Initial release of Maemo 5 port of gnuplot
[gnuplot] / src / win / wgnuplib.h
diff --git a/src/win/wgnuplib.h b/src/win/wgnuplib.h
new file mode 100644 (file)
index 0000000..bec1eb7
--- /dev/null
@@ -0,0 +1,383 @@
+/*
+ * $Id: wgnuplib.h,v 1.24 2006/03/05 01:15:56 broeker Exp $
+ */
+
+/* GNUPLOT - win/wgnuplib.h */
+
+/*[
+ * Copyright 1982 - 1993, 1998, 2004   Russell Lang
+ *
+ * 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.
+]*/
+
+/*
+ * AUTHORS
+ *
+ *   Russell Lang
+ */
+
+/* this file contains items to be visible outside wgnuplot.dll */
+
+#include <windows.h>
+
+#ifdef _WINDOWS
+#define _Windows
+#endif
+
+/* HBB 19990506: The following used to be #ifdef __DLL__.
+ * But  _export is needed outside the DLL, as well. The long-standing
+ * bug crashing 16bit wgnuplot on Alt-F4 or pressing the 'close' button
+ * stemmed here.  */
+#ifndef WIN32
+#define WINEXPORT _export
+#else
+#define WINEXPORT
+#endif
+
+/* Functions flagged WDPROC are to be export by the DLL, so they can be called
+ * directly from win.trm or the gnuplot core */
+#define WDPROC WINAPI WINEXPORT
+
+/* HBB: bumped version for pointsize, linewidth and PM3D implementation */
+/* HBB: bumped version for massive changes due to mouse-ing and removal of
+ *      variables no longer needed, in struct GW */
+/* HBB: bumped version because of changes in PM3D interface and pointtypes */
+/* HBB: bumped version for filledboxes support */
+/* HBB: bumped version for larger NUMMENU in wresourc.h */
+#define WGNUPLOTVERSION  "1.6   2003-01-23"
+BOOL WDPROC CheckWGNUPLOTVersion(LPSTR str);
+
+/* ================================== */
+/* symbols for the two icons          */
+#define TEXTICON 123
+#define GRPICON 124
+
+/* ================================== */
+/* For WIN32 API's */
+#ifdef WIN32
+/* #define DEFAULT_CHARSET ANSI_CHARSET */
+# define OFFSETOF(x)  (x)
+# define SELECTOROF(x)  (x)
+# define MoveTo(hdc,x,y) MoveToEx(hdc,x,y,(LPPOINT)NULL);
+# if !defined(__TURBOC__) || (__TURBOC__>=0x410) /* Borland C has these defines, already... */
+#  define farmalloc(x) malloc(x)
+#  define farrealloc(s,n) realloc(s,n)
+#  define farfree(s) free(s)
+# endif /* __TURBOC__ */
+#endif
+
+#if defined(__MINGW32__) && (__GNUC__ < 3) && !defined(CYGWIN)
+/* windowsx.h in MinGW32 2.x doesn't define some of the more traditional
+ * things gnuplot expects in every Windows C compiler, it seems: */
+#define _fstrstr(s1,s2) (strstr(s1,s2))
+#define _fstrchr(s,c) (strchr(s,c))
+#define _fstrrchr(s,c) (strrchr(s,c))
+#define _fstrlen(s) (strlen(s))
+#define _fstrcpy(d,s) (strcpy(d,s))
+#define _fstrncpy(d,s,n) (strncpy(d,s,n))
+#define _fstrcat(s1,s2) (strcat(s1,s2))
+#endif /* __MINGW32__ */
+
+/* ================================== */
+/* wprinter.c - windows printer routines */
+void WDPROC DumpPrinter(HWND hwnd, LPSTR szAppName, LPSTR szFileName);
+
+
+typedef struct tagPRINT {
+       HDC             hdcPrn;
+       HWND    hDlgPrint;
+       BOOL    bUserAbort;
+       POINT   pdef;
+       POINT   psize;
+       POINT   poff;
+       struct tagPRINT FAR *next;
+} GP_PRINT;
+typedef GP_PRINT FAR*  GP_LPPRINT;
+
+
+/* ================================== */
+/* wpause.c - pause window structure */
+typedef struct tagPW
+{
+       HINSTANCE       hInstance;              /* required */
+       HINSTANCE       hPrevInstance;  /* required */
+       LPSTR   Title;                  /* required */
+       LPSTR   Message;                /* required */
+       POINT   Origin;                 /* optional */
+       HWND    hWndParent;             /* optional */
+       HWND    hWndPause;
+       HWND    hOK;
+       HWND    hCancel;
+       BOOL    bPause;
+       BOOL    bPauseCancel;
+       BOOL    bDefOK;
+       WNDPROC lpfnOK;
+       WNDPROC lpfnCancel;
+       WNDPROC lpfnPauseButtonProc;
+} PW;
+typedef PW FAR*  LPPW;
+
+int WDPROC PauseBox(LPPW lppw);
+
+/* ================================== */
+/* wmenu.c - menu structure */
+#define BUTTONMAX 10
+typedef struct tagMW
+{
+       LPSTR   szMenuName;             /* required */
+       HMENU   hMenu;
+       BYTE FAR * FAR *macro;
+       BYTE FAR *macrobuf;
+       int             nCountMenu;
+       DLGPROC lpProcInput;
+       char    *szPrompt;
+       char    *szAnswer;
+       int             nChar;
+       int             nButton;
+       HWND    hButton[BUTTONMAX];
+       int             hButtonID[BUTTONMAX];
+       WNDPROC lpfnMenuButtonProc;
+       WNDPROC lpfnButtonProc[BUTTONMAX];
+} MW;
+typedef MW FAR * LPMW;
+
+/* ================================== */
+/* wtext.c text window structure */
+/* If an optional item is not specified it must be zero */
+#define MAXFONTNAME 80
+typedef struct tagTW
+{
+       GP_LPPRINT      lpr;                    /* must be first */
+       HINSTANCE hInstance;            /* required */
+       HINSTANCE hPrevInstance;        /* required */
+       LPSTR   Title;                  /* required */
+       LPMW    lpmw;                   /* optional */
+       POINT   ScreenSize;             /* optional */
+       unsigned int KeyBufSize;        /* optional */
+       LPSTR   IniFile;                /* optional */
+       LPSTR   IniSection;             /* optional */
+       LPSTR   DragPre;                /* optional */
+       LPSTR   DragPost;               /* optional */
+       int             nCmdShow;               /* optional */
+       FARPROC shutdown;               /* optional */
+       HICON   hIcon;                  /* optional */
+       LPSTR   AboutText;              /* optional */
+       HMENU   hPopMenu;
+       HWND    hWndText;
+       HWND    hWndParent;
+       POINT   Origin;
+       POINT   Size;
+       BYTE FAR *ScreenBuffer;
+       BYTE FAR *AttrBuffer;
+       BYTE FAR *KeyBuf;
+       BYTE FAR *KeyBufIn;
+       BYTE FAR *KeyBufOut;
+       BYTE    Attr;
+       BOOL    bFocus;
+       BOOL    bGetCh;
+       BOOL    bSysColors;
+       HBRUSH  hbrBackground;
+       char    fontname[MAXFONTNAME];  /* font name */
+       int             fontsize;                               /* font size in pts */
+       HFONT   hfont;
+       int             CharAscent;
+       int             ButtonHeight;
+       int             CaretHeight;
+       int             CursorFlag;
+       POINT   CursorPos;
+       POINT   ClientSize;
+       POINT   CharSize;
+       POINT   ScrollPos;
+       POINT   ScrollMax;
+       POINT   MarkBegin;
+       POINT   MarkEnd;
+       BOOL    Marking;
+} TW;
+typedef TW FAR*  LPTW;
+
+
+/* ================================== */
+/* wtext.c - Text Window */
+void WDPROC TextMessage(void);
+int WDPROC TextInit(LPTW lptw);
+void WDPROC TextClose(LPTW lptw);
+void WDPROC TextToCursor(LPTW lptw);
+int WDPROC  TextKBHit(LPTW);
+int WDPROC TextGetCh(LPTW);
+int WDPROC TextGetChE(LPTW);
+LPSTR WDPROC TextGetS(LPTW lptw, LPSTR str, unsigned int size);
+int WDPROC TextPutCh(LPTW, BYTE);
+int WDPROC TextPutS(LPTW lptw, LPSTR str);
+void WDPROC TextGotoXY(LPTW lptw, int x, int y);
+int  WDPROC TextWhereX(LPTW lptw);
+int  WDPROC TextWhereY(LPTW lptw);
+void WDPROC TextCursorHeight(LPTW lptw, int height);
+void WDPROC TextClearEOL(LPTW lptw);
+void WDPROC TextClearEOS(LPTW lptw);
+void WDPROC TextInsertLine(LPTW lptw);
+void WDPROC TextDeleteLine(LPTW lptw);
+void WDPROC TextScrollReverse(LPTW lptw);
+void WDPROC TextAttr(LPTW lptw, BYTE attr);
+void WDPROC AboutBox(HWND hwnd, LPSTR str);
+
+/* ================================== */
+/* wgraph.c - graphics window */
+
+/* windows data */
+
+/* number of different 'basic' pens supported (the ones you can modify
+ * by the 'Line styles...' dialog, and save to/from wgnuplot.ini). */
+#define WGNUMPENS 15
+
+/* Information about one graphical operation to be stored by the
+ * driver for the sake of redraws. Array of GWOP kept in global block */
+struct GWOP {
+       WORD op;
+       WORD x, y;
+       HLOCAL htext;
+};
+
+/* memory block for graph operations */
+struct GWOPBLK {                       /* kept in local memory */
+       struct GWOPBLK *next;
+       HGLOBAL hblk;                   /* handle to a global block */
+       struct GWOP FAR *gwop;  /* pointer to global block if locked */
+       UINT used;                              /* number of GWOP's used */
+};
+
+/* ops */
+#define W_endoflist 0
+
+#define W_dot 10
+#define W_plus 11
+#define W_cross 12
+#define W_star 13
+#define W_box 14
+#define W_fbox 15
+#define W_circle 16
+#define W_fcircle 17
+#define W_itriangle 18
+#define W_fitriangle 19
+#define W_triangle 20
+#define W_ftriangle 21
+#define W_diamond 22
+#define W_fdiamond 23
+#define W_pentagon 24
+#define W_fpentagon 25
+
+#define W_move 30
+#define W_vect 31
+#define W_line_type 32
+#define W_put_text 33
+#define W_justify 34
+#define W_text_angle 35
+#define W_pointsize 36
+#define W_line_width 37
+#define W_pm3d_setcolor 38
+#define W_pm3d_filled_polygon_pt   39
+#define W_pm3d_filled_polygon_draw 40
+#define W_boxfill 41
+#define W_fillstyle 42         /* NOTE HBB 20010916: used #if _FILLEDBOXES */
+#define W_font 43
+#define W_image 50
+
+typedef struct tagGW {
+       GP_LPPRINT      lpr;            /* must be first */
+       HINSTANCE hInstance;    /* required */
+       HINSTANCE hPrevInstance;        /* required */
+       LPSTR   Title;          /* required */
+       int     xmax;           /* required */
+       int     ymax;           /* required */
+       LPTW    lptw;           /* optional */  /* associated text window */
+       POINT   Origin;         /* optional */  /* origin of graph window */
+       POINT   Size;           /* optional */  /* size of graph window */
+       LPSTR   IniFile;        /* optional */
+       LPSTR   IniSection;     /* optional */
+       HWND    hWndGraph;      /* window handle */
+       HMENU   hPopMenu;       /* popup menu */
+       int     pen;            /* current pen number */
+       int     htic;           /* horizontal size of point symbol (xmax units) */
+       int     vtic;           /* vertical size of point symbol (ymax units)*/
+       int     hchar;          /* horizontal size of character (xmax units) */
+       int     vchar;          /* vertical size of character (ymax units)*/
+       int     angle;          /* text angle */
+       BOOL    rotate;         /* can text be rotated 90 degrees ? */
+       char    fontname[MAXFONTNAME];  /* font name */
+       int     fontsize;       /* font size in pts */
+       char    deffontname[MAXFONTNAME]; /* default font name */
+       int     deffontsize;    /* default font size */
+       HFONT   hfonth;         /* horizonal font */
+       HFONT   hfontv;         /* rotated font (arbitrary angle) */
+       LOGFONT lf;             /* cached to speed up rotated fonts */
+       BOOL    resized;        /* has graph window been resized? */
+       BOOL    graphtotop;     /* bring graph window to top after every plot? */
+       BOOL    color;          /* color pens? */
+       HPEN    hapen;          /* stored current pen */
+       LOGPEN  colorpen[WGNUMPENS+2];  /* color pen definitions */
+       LOGPEN  monopen[WGNUMPENS+2];   /* mono pen definitions */
+       COLORREF background;            /* background color */
+       HBRUSH  hbrush;         /* background brush */
+       HBRUSH  colorbrush[WGNUMPENS+2];   /* brushes to fill points */
+       struct GWOPBLK *gwopblk_head;
+       struct GWOPBLK *gwopblk_tail;
+       unsigned int nGWOP;
+       BOOL    locked;         /* locked if being written */
+       double  org_pointsize;  /* Original Pointsize */
+} GW;
+typedef GW FAR*  LPGW;
+
+#define WINFONTSIZE 10
+#define WIN30FONT "Courier"
+#define WINFONT "Arial"
+
+#if 0
+enum JUSTIFY {
+       LEFT, CENTRE, RIGHT
+};
+#endif
+
+void WDPROC GraphInit(LPGW lpgw);
+void WDPROC GraphClose(LPGW lpgw);
+void WDPROC GraphStart(LPGW lpgw, double pointsize);
+void WDPROC GraphEnd(LPGW lpgw);
+void WDPROC GraphResume(LPGW lpgw);
+void WDPROC GraphOp(LPGW lpgw, WORD op, WORD x, WORD y, LPCSTR str);
+void WDPROC GraphOpSize(LPGW lpgw, WORD op, WORD x, WORD y, LPCSTR str, DWORD size);
+void WDPROC GraphPrint(LPGW lpgw);
+void WDPROC GraphRedraw(LPGW lpgw);
+void WDPROC GraphChangeFont(LPGW lpgw, LPCSTR font, int fontsize, HDC hdc, RECT rect);
+unsigned int WDPROC GraphGetTextLength(LPGW lpgw, LPCSTR text, LPCSTR fontname, int fontsize);
+int WDPROC GraphGetFontScaling(LPGW lpgw, LPCSTR font, int fontsize);
+
+#ifdef USE_MOUSE
+void WDPROC Graph_set_cursor (LPGW lpgw, int c, int x, int y );
+void WDPROC Graph_set_ruler (LPGW lpgw, int x, int y );
+void WDPROC Graph_put_tmptext(LPGW lpgw, int i, LPCSTR str);
+void WDPROC Graph_set_clipboard (LPGW lpgw, LPCSTR s);
+#endif
+
+/* ================================== */