|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 5025 (0x13a1)
Types: TextFile
Names: »plot.h«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
└─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z«
└─⟦036c765ac⟧
└─⟦this⟧ »TeX3.0/TeXcontrib/gnutex/plot.h«
/*
*
* G N U P L O T -- plot.h
*
* Copyright (C) 1986 Colin Kelley, Thomas Williams
*
* You may use this code as you wish if credit is given and this message
* is retained.
*
* Please e-mail any useful additions to vu-vlsi!plot so they may be
* included in later releases.
*
* This file should be edited with 4-column tabs! (:set ts=4 sw=4 in vi)
*/
/*
* Modifications for LaTeX and other support by David Kotz, 1988.
* Department of Computer Science, Duke University, Durham, NC 27706.
* Mail to dfk@cs.duke.edu.
*/
#define PATCHLEVEL 0
#define PROGRAM "gnutex"
#define PROMPT "gnutex> "
#define SHELL "/bin/sh"
#define TRUE 1
#define FALSE 0
#define Pi 3.141592653589793
#define MAX_PLOTS 16 /* max number of overlapping plots */
#define MAX_LINE_LEN 512 /* maximum number of chars allowed on line */
#define MAX_TOKENS 200
#define MAX_ID_LEN 200 /* max length of an identifier (long for files)*/
#ifdef PC
#define MAX_UDFS 20 /* max number of user-defined functions */
#else /* PC */
#define MAX_UDFS 100
#endif /* PC */
#define MAX_STYLES 20 /* max number of user-defined styles */
#define MAX_KEYS 16 /* max number of entries in key */
#define MAX_VALUES 50 /* max number of user-defined constants */
#define MAX_AT_LEN 100 /* max number of entries in action table */
#define STACK_DEPTH 100
#define NO_CARET (-1)
#define SAMPLES 160 /* default number of samples for a plot */
#define ZERO 1e-8 /* default for 'zero' set option */
/*
* note about HUGE: this number is just used as a flag for really
* big numbers, so it doesn't have to be the absolutely biggest number
* on the machine.
*/
#ifdef PC
#define HUGE 1e38
#endif /* PC */
#define END_OF_COMMAND (c_token == num_tokens || equals(c_token,";"))
#define push(arg) f_pushc(arg) /* same thing! */
#define top_of_stack stack[s_p]
typedef int BOOLEAN;
typedef int (*FUNC_PTR)();
enum {
C_PI, NEXT_VALUE
};
enum operators {
PUSH, PUSHC, PUSHD, CALL, TERNIARY, LNOT, BNOT, UMINUS, LOR, LAND, BOR,
XOR, BAND, EQ, NE, GT, LT, GE, LE, PLUS, MINUS, MULT, DIV, MOD, POWER,
SF_START
};
enum DATA_TYPES {
INT, CMPLX
};
enum PLOT_TYPES {
FUNC, DATA
};
enum PLOT_STYLE {
LINES, POINTS, IMPULSES, LINESPOINTS, DOTS
};
#define FIXED_STYLES ((int)DOTS) /* highest numbered fixed style */
struct cmplx {
double real, imag;
};
struct value {
enum DATA_TYPES type;
union {
char *str_val;
int int_val;
struct cmplx cmplx_val;
} v;
};
struct lexical_unit {
BOOLEAN is_token; /* true if token, false if a value */
struct value l_val;
int start_index; /* index of first char in token */
int length; /* length of token in chars */
};
struct at_entry { /* action table entry */
int index; /* index into function table */
struct value arg;
};
struct at_type {
int count;
struct at_entry actions[MAX_AT_LEN];
};
struct ft_entry { /* standard function table entry */
char *ft_name; /* pointer to name of this function */
FUNC_PTR funct; /* address of function to call */
};
struct udft_entry { /* user-defined function table entry */
char udft_name[MAX_ID_LEN+1];/* name of this function entry */
struct at_type at; /* action table to execute */
char definition[MAX_LINE_LEN+1]; /* definition of function as typed */
struct value dummy_value;/* current value of dummy variable */
};
struct vt_entry { /* value table entry */
char vt_name[MAX_ID_LEN+1];/* name of this value entry */
BOOLEAN vt_undef; /* true if not defined yet */
struct value vt_value; /* value it has */
};
struct st_entry { /* style table entry */
char st_name[MAX_ID_LEN+1];/* name of this style entry */
BOOLEAN st_undef; /* true if not defined yet */
char st_point[MAX_ID_LEN+1]; /* string for point */
float st_spacing; /* spacing of seqence */
short st_length; /* length of sequence */
#define MAX_STYLE_SEQ_LENGTH 5
char st_seq[MAX_STYLE_SEQ_LENGTH][MAX_ID_LEN+1]; /* dot sequence */
};
struct coordinate {
BOOLEAN undefined; /* TRUE if value off screen */
#ifdef PC
float x, y; /* memory is tight on PCs! */
#else
double x, y;
#endif /* PC */
};
struct curve_points {
enum PLOT_TYPES plot_type;
unsigned int plot_style; /* now an int to include user-defined styles */
char title[MAX_LINE_LEN + 1];
int count;
struct coordinate *points;
};
struct termentry {
char name[MAX_ID_LEN + 1];
unsigned int xmax,ymax,v_char,h_char,v_tic,h_tic;
FUNC_PTR init,reset,text,graphics,move,vector,linetype,lrput_text,
ulput_text,point;
FUNC_PTR xyput_text, xtick_text, ytick_text;
FUNC_PTR plotstyle;
};
/*
* SS$_NORMAL is "normal completion", STS$M_INHIB_MSG supresses
* printing a status message.
* SS$_ABORT is the general abort status code.
from: Martin Minow
decvax!minow
*/
#ifdef vms
#include <ssdef.h>
#include <stsdef.h>
#define IO_SUCCESS (SS$_NORMAL | STS$M_INHIB_MSG)
#define IO_ERROR SS$_ABORT
#endif /* vms */
#ifndef IO_SUCCESS /* DECUS or VMS C will have defined these already */
#define IO_SUCCESS 0
#endif
#ifndef IO_ERROR
#define IO_ERROR 1
#endif