--- /dev/null
+#ifdef INCRCSDATA
+static char RCSid[]="$Id: gnupmdrv.c,v 1.6 2005/07/28 07:46:06 mikulik Exp $" ;
+#endif
+
+/****************************************************************************
+
+ PROGRAM: gnupmdrv
+
+ Outboard PM driver for GNUPLOT 3.x
+
+ MODULE: gnupmdrv.c
+
+ This file contains the startup procedures for gnupmdrv
+
+****************************************************************************/
+
+/* PM driver for GNUPLOT */
+
+/*[
+ * Copyright 1992, 1993, 1998, 2004 Roger Fearick
+ *
+ * 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.
+]*/
+
+
+/*
+ * AUTHOR
+ *
+ * Gnuplot driver for OS/2: Roger Fearick
+ */
+
+#define INCL_PM
+#define INCL_WIN
+#define INCL_SPL
+#define INCL_SPLDOSPRINT
+#define INCL_DOSMEMMGR
+#define INCL_DOSPROCESS
+#define INCL_DOSFILEMGR
+#include <os2.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "config.h"
+#include "gnupmdrv.h"
+
+/*==== g l o b a l d a t a ================================================*/
+
+char szIPCName[256] ;
+char szIniFile[256] ;
+#define IPCDEFAULT "gnuplot"
+int bServer=0 ;
+int bPersist=0 ;
+int bWideLines=0 ;
+#ifdef PM_KEEP_OLD_ENHANCED_TEXT
+int bEnhanced=0 ;
+#endif
+
+/*==== l o c a l d a t a ==================================================*/
+
+ /* class names for window registration */
+
+static char szTitle[256] = "Gnuplot" ;
+
+/*==== f u n c t i o n s =====================================================*/
+
+BOOL QueryIni( HAB ) ;
+int main( int, char** ) ;
+static HWND InitHelp( HAB, HWND ) ;
+
+/*==== c o d e ===============================================================*/
+
+int main ( int argc, char **argv )
+/*
+** args: argv[1] : name to be used for IPC (pipes/semaphores) with gnuplot
+**
+** Standard PM initialisation:
+** -- set up message processing loop
+** -- register all window classes
+** -- start up main window
+** -- subclass main window for help and dde message trapping to frame window
+** -- init help system
+** -- check command line and open any filename found there
+**
+*/
+ {
+ static ULONG flFrameFlags = (FCF_ACCELTABLE|FCF_STANDARD);//&(~FCF_TASKLIST) ;
+ static ULONG flClientFlags = WS_VISIBLE ;
+ HMQ hmq ;
+ QMSG qmsg ;
+ PFNWP pfnOldFrameWndProc ;
+ HWND hwndHelp ;
+ BOOL bPos ;
+
+ /* (am, 19981001)
+ * A subtile problem is fixed here:
+ * upon the first initialization of this driver (i.e. we're here in main())
+ * it may inherit handles of files opened (temporarily) by gnuplot itself!
+ * We close them here.
+ */
+ _fcloseall();
+
+ if( argc <= 1 ) strcpy( szIPCName, IPCDEFAULT ) ;
+ else {
+ int i ;
+ strcpy( szIPCName, argv[1] ) ;
+ for ( i=2; i<argc; i++ ) {
+ while( *argv[i] != '\0' ) {
+ if( *argv[i] == '-' ) {
+ ++argv[i] ;
+ switch( *argv[i] ) {
+ case 's' :
+ bServer = 1 ;
+ break ;
+#ifdef PM_KEEP_OLD_ENHANCED_TEXT
+ case 'e' :
+ bEnhanced = 1 ;
+ break ;
+#endif
+ case 'p' :
+ bPersist = 1 ;
+ break ;
+ case 'w' :
+ bWideLines = 1 ;
+ break ;
+ }
+ }
+ else if ( *argv[i] == '"' ) {
+ char *p = szTitle ;
+ argv[i]++ ;
+ while( *argv[i] != '"' ) {
+ *p++ = *argv[i]++ ;
+ }
+ *p = '\0' ;
+ }
+ argv[i]++ ;
+ }
+ }
+ }
+ {
+ char *p ;
+ /* get path from argv[0] to track down program files */
+ strcpy( szIniFile, argv[0] ) ;
+ while( (p=strchr(szIniFile,'/'))!=NULL ) *p = '\\' ;
+ p = strrchr(szIniFile,'\\') ;
+ if(p==NULL) p = strrchr(szIniFile,':') ;
+ if(p==NULL) p = szIniFile ;
+ else ++p ;
+ strcpy(p,GNUINI);
+ }
+
+ hab = WinInitialize( 0 ) ;
+ hmq = WinCreateMsgQueue( hab, 50 ) ;
+
+ // get defaults from gnupmdrv.ini
+
+ bPos = QueryIni( hab ) ;
+
+ // register window and child window classes
+
+ if( ! WinRegisterClass( hab, /* Exit if can't register */
+ APP_NAME,
+ (PFNWP)DisplayClientWndProc,
+ CS_SIZEREDRAW,
+ 0 )
+ ) return 0L ;
+
+ // create main window
+
+ hwndFrame = WinCreateStdWindow (
+ HWND_DESKTOP,
+ 0,//WS_VISIBLE,
+ &flFrameFlags,
+ APP_NAME,
+ NULL,
+ flClientFlags,
+ 0L,
+ 1,
+ &hApp) ;
+
+ if ( ! hwndFrame ) return 0 ;
+
+ // subclass window for help & DDE trapping
+
+ pfnOldFrameWndProc = WinSubclassWindow( hwndFrame, (PFNWP)NewFrameWndProc ) ;
+ WinSetWindowULong( hwndFrame, QWL_USER, (ULONG) pfnOldFrameWndProc ) ;
+
+ // init the help manager
+
+ hwndHelp = InitHelp( hab, hwndFrame ) ;
+
+ // set window title and make it active
+
+ {
+ char text[256] = APP_NAME;
+ strcat( text, " [" ) ;
+ strcat( text, szTitle ) ;
+ strcat( text, "]" ) ;
+ WinSetWindowText( hwndFrame, text ) ;
+ }
+ // process window messages
+
+ while (WinGetMsg (hab, &qmsg, NULLHANDLE, 0, 0))
+ WinDispatchMsg (hab, &qmsg) ;
+
+ // shut down
+
+ WinDestroyHelpInstance( hwndHelp ) ;
+ WinDestroyWindow (hwndFrame) ;
+ WinDestroyMsgQueue (hmq) ;
+ WinTerminate (hab) ;
+
+ return 0 ;
+ }
+
+static HWND InitHelp( HAB hab, HWND hwnd )
+/*
+** initialise the help system
+*/
+ {
+ static HELPINIT helpinit = { sizeof(HELPINIT),
+ 0L,
+ NULL,
+ (PHELPTABLE)MAKELONG(1, 0xFFFF),
+ 0L,
+ 0L,
+ 0,
+ 0,
+ "GnuplotPM Help",
+ CMIC_HIDE_PANEL_ID,
+ "gnupmdrv.hlp" } ;
+ HWND hwndHelp ;
+ /* should be bigger or dynamic */
+ static char helppath[256] ;
+ char *p;
+ _execname(helppath, sizeof(helppath));
+ _fnslashify(helppath);
+ p=strrchr(helppath, '/');
+ if (p)
+ *p='\0';
+ strcat( helppath, "/" ) ;
+ strcat( helppath, helpinit.pszHelpLibraryName ) ;
+ helpinit.pszHelpLibraryName = helppath ;
+
+ hwndHelp = WinCreateHelpInstance( hab, &helpinit ) ;
+ WinAssociateHelpInstance( hwndHelp, hwnd ) ;
+ return hwndHelp ;
+ }
+
+MRESULT EXPENTRY NewFrameWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
+/*
+** Subclasses top-level frame window to trap help & dde messages
+*/
+ {
+ PFNWP pfnOldFrameWndProc ;
+
+ pfnOldFrameWndProc = (PFNWP) WinQueryWindowULong( hwnd, QWL_USER ) ;
+ switch( msg ) {
+ default:
+ break ;
+
+ case HM_QUERY_KEYS_HELP:
+ return (MRESULT) IDH_KEYS ;
+ }
+ return (*pfnOldFrameWndProc)(hwnd, msg, mp1, mp2) ;
+ }
+
+
+MRESULT EXPENTRY About( HWND hDlg, ULONG message, MPARAM mp1, MPARAM mp2)
+/*
+** 'About' box dialog function
+*/
+ {
+ return WinDefDlgProc( hDlg, message, mp1, mp2 ) ;
+ }
+