/* Hello, Emacs, this is -*-C-*-
 * $Id: aed.trm,v 1.14 2006/07/21 02:35:45 sfeam Exp $
 *
 */

/* GNUPLOT - aed.trm */

/*[
 * Copyright 1990 - 1993, 1998, 2004
 *
 * Permission to use, copy, and distribute this software and its
 * documentation for any purpose with or without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.
 *
 * Permission to modify the software is granted, but not the right to
 * distribute the complete modified source code.  Modifications are to
 * be distributed as patches to the released version.  Permission to
 * distribute binaries produced by compiling modified sources is granted,
 * provided you
 *   1. distribute the corresponding source modifications from the
 *    released version in the form of a patch file along with the binaries,
 *   2. add special version identification to distinguish your version
 *    in addition to the base release version number,
 *   3. provide your name and address as the primary contact for the
 *    support of your modified version, and
 *   4. retain our contact information in regard to use of the base
 *    software.
 * Permission to distribute the released version of the source code along
 * with corresponding source modifications in the form of a patch file is
 * granted with same provisions 2 through 4 for binary distributions.
 *
 * This software is provided "as is" without express or implied warranty
 * to the extent permitted by applicable law.
]*/

/*
 * This file is included by ../term.c.
 *
 * This terminal driver supports:
 *   AED terminals
 *
 * AUTHORS
 *     Colin Kelley, Thomas Williams, Russell Lang
 *
 * send your comments or suggestions to (gnuplot-info@lists.sourceforge.net).
 *
 */

/*
 * adapted to the new terminal layout by Stefan Bodewig (Dez. 1995)
 */

#include "driver.h"

#ifdef TERM_REGISTER
register_term(aed512)
register_term(aed767)
#endif

#ifdef TERM_PROTO
TERM_PUBLIC void AED_init __PROTO((void));
TERM_PUBLIC void AED_graphics __PROTO((void));
TERM_PUBLIC void AED_text __PROTO((void));
TERM_PUBLIC void AED_linetype __PROTO((int linetype));
TERM_PUBLIC void AED_move __PROTO((unsigned int x, unsigned int y));
TERM_PUBLIC void AED_vector __PROTO((unsigned int x, unsigned int y));
TERM_PUBLIC void AED_put_text __PROTO((unsigned int x, unsigned int y, const char *str));
TERM_PUBLIC void AED_reset __PROTO((void));

#define AED_XMAX 768
#define AED_YMAX 575

#define AED_VCHAR	13
#define AED_HCHAR	8
#define AED_VTIC	8
#define AED_HTIC	7

/* slightly different for AED 512 */
#define AED5_XMAX 512
#endif

#ifndef TERM_PROTO_ONLY
#ifdef TERM_BODY

#define AED_XLAST (AED_XMAX - 1)
#define AED_YLAST (AED_YMAX - 1)

#define AED5_XLAST (AED5_XMAX - 1)

TERM_PUBLIC void
AED_init()
{
    fputs("\033SEN3DDDN.SEC.7.SCT.0.1.80.80.90.SBC.0.AAV2.MOV.0.9.CHR.0.FFD", gpoutfile);
/*         2            3     4                5     7    6       1
	1. Clear Screen
	2. Set Encoding
	3. Set Default Color
	4. Set Backround Color Table Entry
	5. Set Backround Color
	6. Move to Bottom Lefthand Corner
	7. Anti-Alias Vectors
*/
}


TERM_PUBLIC void
AED_graphics()
{
    fputs("\033FFD\033", gpoutfile);
}


TERM_PUBLIC void
AED_text()
{
    fputs("\033MOV.0.9.SEC.7.XXX", gpoutfile);
}



TERM_PUBLIC void
AED_linetype(int linetype)
{
    static int color[2 + 9] = { 7, 1, 6, 2, 3, 5, 1, 6, 2, 3, 5 };
    static int type[2 + 9] = { 85, 85, 255, 255, 255, 255, 255, 85, 85, 85, 85 };

    if (linetype <= -3)
	return;
    if (linetype >= 10)
	linetype %= 10;

    fprintf(gpoutfile, "\
\033SLS%d.255.\
\033SEC%d.",
	    type[linetype + 2],
	    color[linetype + 2]);
}



TERM_PUBLIC void
AED_move(unsigned int x, unsigned int y)
{
    fprintf(gpoutfile, "\033MOV%d.%d.", x, y);
}


TERM_PUBLIC void
AED_vector(unsigned int x, unsigned int y)
{
    fprintf(gpoutfile, "\033DVA%d.%d.", x, y);
}


TERM_PUBLIC void
AED_put_text(unsigned int x, unsigned int y, const char *str)
{
    AED_move(x, y - AED_VCHAR / 2 + 2);
    fprintf(gpoutfile, "\033XXX%s\033", str);
}


#define hxt (AED_HTIC/2)
#define hyt (AED_VTIC/2)

TERM_PUBLIC void
AED_reset()
{
    fputs("\033SCT0.1.0.0.0.SBC.0.FFD", gpoutfile);
}

#endif /* TERM_BODY */

#ifdef TERM_TABLE
TERM_TABLE_START(aed512_driver)
    "aed512", "AED 512 Terminal",
    AED5_XMAX, AED_YMAX, AED_VCHAR, AED_HCHAR,
    AED_VTIC, AED_HTIC, options_null, AED_init, AED_reset,
    AED_text, null_scale, AED_graphics, AED_move, AED_vector,
    AED_linetype, AED_put_text, null_text_angle,
    null_justify_text, do_point, do_arrow, set_font_null
TERM_TABLE_END(aed512_driver)

#undef LAST_TERM
#define LAST_TERM aed512_driver

TERM_TABLE_START(aed767_driver)
    "aed767", "AED 767 Terminal",
    AED_XMAX, AED_YMAX, AED_VCHAR, AED_HCHAR,
    AED_VTIC, AED_HTIC, options_null, AED_init, AED_reset,
    AED_text, null_scale, AED_graphics, AED_move, AED_vector,
    AED_linetype, AED_put_text, null_text_angle,
    null_justify_text, do_point, do_arrow, set_font_null
TERM_TABLE_END(aed767_driver)

#undef LAST_TERM
#define LAST_TERM aed767_driver

#endif /* TERM_TABLE */
#endif /* TERM_PROTO_ONLY */

#ifdef TERM_HELP
START_HELP(aed767)
"1 aed767",
"?commands set terminal aed767",
"?set terminal aed767",
"?set term aed767",
"?terminal aed767",
"?term aed767",
"?aed767",
"?commands set terminal aed512",
"?set terminal aed512",
"?set term aed512",
"?terminal aed512",
"?term aed512",
"?aed512",
" The `aed512` and `aed767` terminal drivers support AED graphics terminals.",
" The two drivers differ only in their horizontal ranges, which are 512 and",
" 768 pixels, respectively.  Their vertical range is 575 pixels.  There are",
" no options for these drivers."
END_HELP(aed767)
#endif
