home *** CD-ROM | disk | FTP | other *** search
- /*
- * GRAPH, Version 1.00 - 4 August 1989
- *
- * Copyright 1989, David Gay. All Rights Reserved.
- * This software is freely redistrubatable.
- */
-
- /* class function, inherits from class object. The actual function types are su
- b-classes of this one */
- #ifndef FUNCTION_H
- #define FUNCTION_H
-
- #include "list.h"
- #include "object.h"
- #include "graph.h"
- #include "user/eval.h"
- #include <stddef.h>
-
- #define MAXERROR 0.2 /* For discontinuities */
- #define MAXITER 4 /* In improvement algo */
- #define FLAT 2 /* number of pixels allowed in "flat" discontinuities */
- #define DEFSTEPS 100 /* Default number of steps */
- #define FDIST 5 /* Max (y) distance for function select */
-
- /* class function (inherited from class object). Fields are public. */
- struct function {
- struct object o;
- int (*calcf)(struct function *this, int allow_mes); /* Recalculate values o
- f points */
- int (*save)(struct function *this, FILE *f); /* Save function specif
- ic info. to file */
-
- /* Information global to all types of functions */
- char vname[VARLEN]; /* name of variable */
- double min, max; /* Limits for variable */
- int steps; /* Number of points to calculate */
- BYTE colour; /* Colour in which to draw */
- int showdisc : 1; /* Show discontinuities ? */
- int nicedisc : 1; /* Allow "nice" discontinuities */
-
- /* State info */
- int calc : 1; /* Points calculated ? */
- int selected : 1; /* function selected ? */
- variable var; /* Actual variable */
- var_list used; /* Vars this function depends on */
- list pts; /* Points composing this, different structure for each
- type of function */
- size_t sizept; /* Size of one point (for delete) */
- };
-
- /* Flags for point state */
- #define EXISTS 1 /* Function is defined here */
- #define DISC 2 /* This is a discontinuity */
- #define OK 4 /* All is well */
-
- /* The base class for a point */
- struct point {
- node node;
- char state;
- double x, y;
- };
-
- typedef struct point point;
-
- /* Create/load the various types of function */
- struct f_of_x *new_f_of_x(struct graph *g, char *name);
- struct x_y *new_x_y(struct graph *g, char *name);
- struct r_of_t *new_r_of_t(struct graph *g, char *name);
- struct r_t *new_r_t(struct graph *g, char *name);
- struct f_of_x *load_f_of_x(struct graph *g, FILE *f);
- struct x_y *load_x_y(struct graph *g, FILE *f);
- struct r_of_t *load_r_of_t(struct graph *g, FILE *f);
- struct r_t *load_r_t(struct graph *g, FILE *f);
-
- /* A few useful functions ... */
- void display_function(struct function *this); /* Draws a function */
- void init_function(struct function *this, struct graph *g, char *name); /* Stan
- dard init. */
- int load_rest(struct function *this, FILE *f); /* Load public part of function
- */
-
- #endif
-
-