** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: sgp.h,v 1.5 2000/05/07 12:46:19 kevin Exp $
-** $Log: sgp.h,v $
-** Revision 1.5 2000/05/07 12:46:19 kevin
-** made c++ compatible
-**
-** Revision 1.4 2000/04/30 19:17:35 kevin
-** Set up include files for conditional INTERACTIVE_GRAPHICS
-**
-** Revision 1.3 2000/04/28 18:35:21 kevin
-** removed unused files
-**
-** Revision 1.2 2000/04/28 14:14:16 kevin
-** *** empty log message ***
-**
+** $Id: sgp.h,v 1.9 2000/06/15 19:07:10 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
******************************************************************************/
+
/*----------------------------------------------------------------------*/
/* Standard Graphics Package Header File */
/*----------------------------------------------------------------------*/
#include "kstddef.h"
#include "kmath.h"
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+#if HAVE_G2_H
+extern "C" {
+#include "g2.h"
+#include "g2_X11.h"
+}
+#endif
/* device names */
/* data structures */
+struct sgp_window_st {
+ int pw_xsize; /* Physical Window size */
+ int pw_ysize;
+ char title[256];
+ int g2_id;
+ double xw_min; /* Window extents */
+ double yw_min;
+ double xw_max;
+ double yw_max;
+ double xv_min; /* Viewport extents */
+ double yv_min;
+ double xv_max;
+ double yv_max;
+ double view[4]; /* Viewport array for clip_rect() */
+ double curx; /* Current stylus position in world coords */
+ double cury;
+ int recalc_mc_to_ndc;
+ int recalc_ndc_to_mc;
+ GRFMTX_2D wc_to_ndc_x; /* World coord to NDC matrix */
+ GRFMTX_2D mc_to_ndc_x; /* Master to NDC */
+ GRFMTX_2D ndc_to_mc_x; /* NDC to Master */
+ GRFMTX_2D ctm_2_x; /* Current transfromation matrix */
+
+ int phys_curx;
+ int phys_cury;
+};
+
+typedef struct sgp_window_st SGP_WINDOW;
+typedef struct sgp_window_st *SGP_ID;
+
struct device_st {
int open; /* TRUE if device is open for output */
int xsize, ysize; /* Size of device in pixels */
struct point {double x, y, z;};
-/******************************************************************
- * *
- * GRAPH.H *
- * *
- * Max R. Dursteler Dec 1983 *
- * 12405 Village Square Terrace *
- * Rockville Md. 20852 *
- ******************************************************************
- */
-
/* Constants */
/* Flagcodes for motion directions */
/*-------------------------------------------------------------------------*/
-#define X_STKMIN 10 /* joystick specific values */
-#define X_STKMAX 313
-#define Y_STKMIN 10
-#define Y_STKMAX 313
-
-#define X_LOCMAX (X_STKMAX - X_STKMIN); /* range from readloc() */
-#define Y_LOCMAX (Y_STKMAX - Y_STKMIN); /* = 0 to LOCMAX */
-
-#define JOYSTK1 0 /* device names */
-#define JOYSTK2 1
-
-#define BUTT_DONE 2 /* Right joystick button to end a command */
-#define BUTT_START 1 /* Left joystick button to start a command */
-#define BUTT_BOTH 3 /* Both buttons pressed */
-
-#define RL_ERROR -1 /* readloc() return codes */
-#define RL_OFF 0
-#define RL_ON 1
-
-/*-------------------------------------------------------------------------*/
-
-struct raster_st {
- int type;
- int xmin, ymin;
- int xmax, ymax;
-};
-
-typedef struct raster_st RASTER;
-
-/*-------------------------------------------------------------------------*/
-
-
-/* circle.c */
-void circle(const double r);
-void drawarc(double start, double stop, const double r);
-/* ctm.c */
-int ctm_xlat_pre_2(double x, double y);
-int ctm_xlat_post_2(double x, double y);
-int ctm_scale_pre_2(double sx, double sy);
-int ctm_scale_post_2(double sx, double sy);
-int ctm_rotate_pre_2(double theta);
-int ctm_rotate_post_2(double theta);
-int ctm_shear_pre_2(double shrx, double shry);
-int ctm_shear_post_2(double shrx, double shry);
-int xlat_gmtx_2(GRFMTX_2D m, double x, double y);
-int scale_gmtx_2(GRFMTX_2D m, double sx, double sy);
-int shear_gmtx_2(GRFMTX_2D m, double shrx, double shry);
-int rotate_gmtx_2(GRFMTX_2D m, double theta);
-int ident_gmtx_2(GRFMTX_2D m);
-int mult_gmtx_2(GRFMTX_2D a, GRFMTX_2D b, GRFMTX_2D c);
-int invert_gmtx_2(GRFMTX_2D a, GRFMTX_2D b);
+/* circle.cpp */
+void sgp2_draw_circle(const double r);
+void sgp2_draw_arc(double start, double stop, const double r);
+
+/* ctm.cpp */
+void ctm_xlat_pre_2(double x, double y);
+void ctm_xlat_post_2(double x, double y);
+void ctm_scale_pre_2(double sx, double sy);
+void ctm_scale_post_2(double sx, double sy);
+void ctm_rotate_pre_2(double theta);
+void ctm_rotate_post_2(double theta);
+void ctm_shear_pre_2(double shrx, double shry);
+void ctm_shear_post_2(double shrx, double shry);
+void xlat_gmtx_2(GRFMTX_2D m, double x, double y);
+void scale_gmtx_2(GRFMTX_2D m, double sx, double sy);
+void shear_gmtx_2(GRFMTX_2D m, double shrx, double shry);
+void rotate_gmtx_2(GRFMTX_2D m, double theta);
+void ident_gmtx_2(GRFMTX_2D m);
+void mult_gmtx_2(GRFMTX_2D a, GRFMTX_2D b, GRFMTX_2D c);
+void invert_gmtx_2(GRFMTX_2D a, GRFMTX_2D b);
double determ_gmtx_2(GRFMTX_2D a);
-/* drawbox.c */
-int drawbox(double xmin, double ymin, double xmax, double ymax);
-/* sgp.c */
-int gp_init_2(void);
-int window2(double xmin, double ymin, double xmax, double ymax);
-int window_2(double xmin, double ymin, double xmax, double ymax);
-int viewprt2(double xmin, double ymin, double xmax, double ymax);
-int viewport_2(double xmin, double ymin, double xmax, double ymax);
-int framevpt(void);
-int calc_wc_to_ndc(void);
-int calc_ndc_to_mc(void);
-int wc_to_ndc(double xw, double yw, double *xn, double *yn);
-int ndc_to_wc(double xn, double yn, double *xw, double *yw);
-int color(int icol);
-int linestyle(int style);
-int line_abs_2(double x, double y);
-int lineabs2(double x, double y);
-int move_abs_2(double x, double y);
-int moveabs2(double x, double y);
-int line_rel_2(double x, double y);
-int linerel2(double x, double y);
-int move_rel_2(double x, double y);
-int moverel2(double x, double y);
-int draw_text(char *message);
-int drawtext(char *message);
-int polylnabs2(double x[], double y[], int n);
-int markabs2(double x, double y);
-int markrel2(double x, double y);
-int pntabs2(double x, double y);
-int pntrel2(double x, double y);
-int ctm_clr_2(void);
-int ctm_get_2(GRFMTX_2D m);
-int ctm_set_2(GRFMTX_2D m);
-int ctm_pre_mult_2(GRFMTX_2D m);
-int ctm_post_mult_2(GRFMTX_2D m);
-/* sgpdrive.c */
-int initgrf2(void);
+
+/* drawbox.cpp */
+void sgp2_draw_rect (double xmin, double ymin, double xmax, double ymax);
+
+/* sgp.cpp */
+SGP_ID sgp2_init (int xsize, int ysize, const char *title);
+void sgp2_close (SGP_ID gid);
+void sgp2_set_active_win (SGP_ID);
+SGP_ID sgp2_get_active_win (void);
+void sgp2_clear (void);
+void sgp2_window(double xmin, double ymin, double xmax, double ymax);
+void sgp2_viewport(double xmin, double ymin, double xmax, double ymax);
+void sgp2_frame_vpt(void);
+void calc_wc_to_ndc(void);
+void calc_ndc_to_mc(void);
+void wc_to_ndc(double xw, double yw, double *xn, double *yn);
+void ndc_to_wc(double xn, double yn, double *xw, double *yw);
+void sgp2_color(int icol);
+void sgp2_line_style(int style);
+void sgp2_line_abs(double x, double y);
+void sgp2_move_abs(double x, double y);
+void sgp2_line_rel(double x, double y);
+void sgp2_move_rel(double x, double y);
+void sgp2_draw_text(char *message);
+void sgp2_polyline_abs(double x[], double y[], int n);
+void sgp2_mark_abs(double x, double y);
+void sgp2_mark_rel(double x, double y);
+void sgp2_point_abs(double x, double y);
+void sgp2_point_rel(double x, double y);
+void charsize(double wid, double height);
+void textangle(double angle);
+void ctm_clr_2(void);
+void ctm_get_2(GRFMTX_2D m);
+void ctm_set_2(GRFMTX_2D m);
+void ctm_pre_mult_2(GRFMTX_2D m);
+void ctm_post_mult_2(GRFMTX_2D m);
+
+/* sgpdrive.cpp */
+int _sgp2_init_dev(SGP_ID gid);
int initdevice(int dev, int mode, int xsize, int ysize);
int opendevice(int dev);
-int closedevice(int dev);
-int termdevice(int dev);
-void stylus(double x, double y, int beam);
-int pntndc(double x, double y);
-int markndc(double x, double y);
+void closedevice(int dev);
+void termdevice(int dev);
+void _sgp2_stylus(SGP_ID gid, double x, double y, int beam);
+void pntndc (SGP_ID gid, double x, double y);
+void markndc (SGP_ID gid, double x, double y);
GRFSTATE *inqstate(void);
-int gp_set_aspect(int dev, double asp);
+void gp_set_aspect(int dev, double asp);
void setlinestyle(int style);
-int setlinewidth(int wid);
+void setlinewidth(int wid);
DEVICE *inqdev(int dev);
-int settext(double width, double height, double textangle, int font);
-int settextclr(int fore, int back);
-int setcolor(int fore);
-int setbackg(int back);
+void _sgp2_set_text(SGP_ID gid, double width, double height, double textangle, int font);
+void settextclr(int fore, int back);
+void setcolor(int fore);
+void setbackg(int back);
int initmarker(int marker, int color);
int settextdir(int direction);
-int charsize(double wid, double height);
-int textangle(double angle);
-int drivtext(char *message);
-int termgrf2(void);
-int flushdevice(int dev);
-/* sgptext.c */
+void _sgp2_dev_text(SGP_ID gid, char *message);
+void termgrf2(void);
+void flushdevice(int dev);
+
+/* sgptext.cpp */
void wrtsymbol(int sym, int x, int y, DEVICE *dev);
void wrtchar(int ch, int x, int y, CHARSPEC *cspec, DEVICE *dev);
void wrttext(char txtstr[], int x, int y, CHARSPEC *cspec, DEVICE *dev);
void crtcolor(int mode, int *f, int *b);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
#endif