#define BASIC_IVIEW 0

typedef int ColorCode;

typedef enum {
  MouseClick = 0,
  MouseMove = 1
} MouseEventType;

typedef enum {
  NoModifiers = 0,
  ExtendModifier = 1,
  OptionModifier = 2,
  OptionExtendModifier = 3
} MouseClickModifier;

typedef enum {
  pointInvisible,
  pointNormal,
  pointHilited,
  pointSelected
} PointState;

typedef enum {
  selecting,
  brushing,
  usermode
} MouseMode;

#ifdef MACINTOSH
#define thePort qd.thePort
#define arrow qd.arrow
#ifdef THINK_C
#define RETURNCHAR '\r'
#endif /* THINK_C */
#ifdef applec
#define RETURNCHAR '\n'
#endif /* applec */
#ifdef __MWERKS__
#define RETURNCHAR '\r'
#endif /* __MWERKS__ */
#else
#ifdef SUNVIEW
typedef struct {
  int h, v;
} Point;
#else
typedef struct {
  int h, v;
} Point;
typedef struct {
  int left, right, width, height;
} Rect;
#endif /* SUNVIEW */
#endif /* MACINTOSH */

#ifdef MACINTOSH
#define IVIEW_WINDOW WindowPtr
#define IVIEW_MENU MenuHandle

#define InitialTop (20 + GetMBarHeight())
#define InitialLeft 10
#define MOUSE_TOLERANCE 0

# define gray qd.gray
# define black qd.black
# define thePort qd.thePort
# define screenBits qd.screenBits
# define arrow qd.arrow
# undef extend
#ifdef applec
VOID PtoCstr _((StringPtr s));
VOID CtoPstr _((char * s));
#endif /* applec */

typedef struct {
  LVAL Object;                                /* elements of window_data */
  int idleOn, frontOnly;                      /* elements of window_data */
  int mouse_x, mouse_y;                       /* elements of window_data */
  WindowPtr window;
  void (*FreeMem) _((IVIEW_WINDOW));
  ColorCode backColor, drawColor;
  int canvasWidth, canvasHeight;
  int lineType, drawMode, lineWidth;
  long RefCon;
  int use_color;
  int hasHscroll, hasVscroll, view_h, view_v;
  int v_scroll_inc[2], h_scroll_inc[2];
  ControlHandle hscroll, vscroll;
  int initialized;
  int symbolMode;
  int cursor;
  Rect clip_rect;
  int clipped;
} StGWWinInfo;

extern Rect scroll_bar_bounds();

#define GetWRefCon(w) (((WindowPeek)(w))->refCon)

#define BAG_RES    1800
#define GLASS_RES  1801
#define CAN_RES    1802
#define BRUSH_RES  1803
#define HAND_RES   1804
#define FINGER_RES 1805
#endif /* MACINTOSH */

#ifdef UNIX
#ifdef GNUPLOT
#define Window long
#define Menu long
#define StGWWinInfo VOID
#define StGWWinInfo VOID
#endif /* GNUPLOT */
#define IVIEW_WINDOW Window
#define IVIEW_MENU Menu
#endif /* UNIX */

#ifdef SUNVIEW
typedef struct {
  long Object;                                /* elements of window_data */
  int idleOn, frontOnly;                      /* elements of window_data */
  int mouse_x, mouse_y;                       /* elements of window_data */
  IVIEW_WINDOW window;
  int (*FreeMem)();
  IVIEW_MENU menu;
  int (*MenuAction)(), (*MenuShow)(), (*MenuUpdate)();
  ColorCode backColor, drawColor;
  int canvasWidth, canvasHeight;
  int lineType, drawMode, lineWidth;
  Canvas content_canvas;
  long RefCon;
  int use_color;
  int hasHscroll, hasVscroll, view_h, view_v;
  int v_scroll_inc[2], h_scroll_inc[2];
/*  ControlHandle hscroll, vscroll; +++ */
  int initialized;
  int symbolMode;
  int cursor;
  Rect clip_rect;
  int clipped;
} StGWWinInfo;
#endif /* SUNVIEW */

#ifdef X11WINDOWS
typedef struct {
  LVAL Object;                                /* elements of window_data */
  int idleOn, frontOnly;                      /* elements of window_data */
  int mouse_x, mouse_y;                       /* elements of window_data */
  Window window, panel;
  VOID (*FreeMem) _((IVIEW_WINDOW));
  ColorCode backColor, drawColor;
  int canvasWidth, canvasHeight;
  int lineType, drawMode, lineWidth;
  long RefCon;
  int use_color;
  int hasHscroll, hasVscroll, view_h, view_v;
  int v_scroll_inc[2], h_scroll_inc[2];
  Window hscroll, vscroll;
  int initialized;
  int symbolMode;
  int cursor;
  int clip_left, clip_top, clip_width, clip_height;
  int clipped;
  int frame_width, frame_height;
  GC gc, erase_gc, xor_gc;
  int go_away, has_menu_button;
} StGWWinInfo;
#endif /* X11WINDOWS */

#ifdef _Windows
#define IVIEW_WINDOW HWND
#define IVIEW_MENU HMENU

typedef struct {
  LVAL Object;                                /* elements of window_data */
  int idleOn;                                 /* elements of window_data */
  int mouse_x, mouse_y;                       /* elements of window_data */
  IVIEW_WINDOW window;
  void (*FreeMem)(HWND);
  ColorCode backColor, drawColor;
  int canvasWidth, canvasHeight;
  int lineType, drawMode, lineWidth;
  long RefCon;
  int use_color;
  int hasHscroll, hasVscroll, view_h, view_v;
  int v_scroll_inc[2], h_scroll_inc[2];
  int initialized;
  int symbolMode;
  int cursor;
  RECT clip_rect;
  int clipped;
  LOGPEN drawPen;
  int rect_offset;
  int bPrinting;
  int cxPrintPos, cyPrintPos;
} StGWWinInfo;

/* Access Defines */
#define SETWINOBJECT(w, d) SetWindowLong((HWND) (w), 0, (LONG) (d))
#define GETWINOBJECT(w) ((LVAL) GetWindowLong((HWND) (w), 0))
#define SETGWINFO(w, d) SetWindowLong((HWND) (w), 4, (LONG) (d))
#define GETGWINFO(w) ((StGWWinInfo *) GetWindowLong((HWND) (w), 4))

/* GDI defines */
#define GET_DC(w) (currentDC ? currentDC : GetDC((HWND) (w)))
#define RELEASE_DC(w, d) if (!currentDC) ReleaseDC((HWND) (w), (HDC) (d))
#define GET_DRAW_PEN(g) ((g)->drawPen)
#define RELEASE_PEN(p) DeleteObject(p);
#define SET_PEN(h,g) SelectObject(h, CreatePenIndirect(&GET_DRAW_PEN(g)))
#define RESTORE_PEN(h,p) RELEASE_PEN(SelectObject(h,p))
#define GET_DRAW_BRUSH(g) CreateSolidBrush(get_color((g)->drawColor))
#define GET_ERASE_BRUSH(g) CreateSolidBrush(get_color((g)->backColor))
#define SET_DRAW_BRUSH(h,g) SelectObject(h, GET_DRAW_BRUSH(g))
#define SET_ERASE_BRUSH(h,g) SelectObject(h, GET_ERASE_BRUSH(g))
#define RELEASE_BRUSH(b) DeleteObject(b)
#define RESTORE_BRUSH(h,b) RELEASE_BRUSH(SelectObject(h,b))
#endif /* _Windows */

extern StGWWinInfo *StGWObWinInfo _((LVAL object));
extern long StGWGetRefCon _((StGWWinInfo *));
extern long StGWGetColRefCon _((unsigned int index));
extern long StGWGetCursRefCon _((unsigned int index));
extern long StGWGetSymRefCon _((unsigned int index));

extern IVIEW_WINDOW IViewWindowNew _((LVAL object, int is_GW));
extern ColorCode StGWDrawColor _((StGWWinInfo *));
extern ColorCode StGWBackColor _((StGWWinInfo *));
extern LVAL IViewWindowGetObject _((IVIEW_WINDOW w));
StGWWinInfo *IViewWindowWinInfo _((IVIEW_WINDOW w));

extern IVIEW_WINDOW IViewNew _((LVAL object));
extern IVIEW_WINDOW IViewSpinNew _((LVAL object));
extern IVIEW_WINDOW IViewScatmatNew _((LVAL object));
extern IVIEW_WINDOW IViewListNew _((LVAL object));
extern IVIEW_WINDOW IViewHistNew _((LVAL object));

#define ARROW_CURSOR      0
#define WATCH_CURSOR      1
#define CROSS_CURSOR      2
#define BRUSH_CURSOR      3
#define HAND_CURSOR       4
#define FINGER_CURSOR     5
#define HOUR_GLASS_CURSOR 6
#define TRASH_BAG_CURSOR  7
#define TRASH_CAN_CURSOR  8

typedef char *IViewReallocData;

#ifdef MACINTOSH
#define Fixed Fixed_
#define FixRound FixRound_
#endif /* MACINTOSH */

typedef long Fixed;

typedef struct basic_points {
  int num_points, num_variables;
  double *scale, *location, **transformation;
  IViewReallocData *data, *screen_data;
  int recalculateScreenPoints, fixed;
} *IViewBasicPoints;

#define NOCOLOR 255
typedef unsigned char color_index;

typedef struct point_symbol {
  int normal, highlighted;
} PointSymbol;

typedef struct point_info {
  PointState state, screen_state;
  char marked, masked;
  color_index color;
  PointSymbol symbol;
  char *label;
} PointInfo;

typedef struct line_info {
  int next, type;
  char masked, width;
  color_index color;
} LineInfo;

#ifdef USESTRINGS
typedef struct string_info {
  char *string;
  char masked, up, h, v;
  color_index color;
} StringInfo;
#endif /* USESTRINGS */

typedef struct iview_data {
#ifdef USESTRINGS
  IViewBasicPoints points, lines, strings;
  IViewReallocData pointInfo, lineInfo, stringInfo;
#else
  IViewBasicPoints points, lines;
  IViewReallocData pointInfo, lineInfo;
#endif /* USESTRINGS */
  double *mins, *maxes, *scale, *location;
  int *screen_mins, *screen_maxes;
  char **variableLabels;
  int recalculateScreenPoints, transformed;
  double **transformation;
} *IViewData;

#define IVIEW_WINDOW_NULL(w) (w == (IVIEW_WINDOW) 0)


syntax highlighted by Code2HTML, v. 0.9.1