Annotation of OpenXM_contrib/gnuplot/os2/gnupmdrv.c, Revision 1.1
1.1 ! maekawa 1: #ifdef INCRCSDATA
! 2: static char RCSid[]="$Id: gnupmdrv.c,v 1.10 1998/03/22 22:34:23 drd Exp $" ;
! 3: #endif
! 4:
! 5: /****************************************************************************
! 6:
! 7: PROGRAM: gnupmdrv
! 8:
! 9: Outboard PM driver for GNUPLOT 3.3
! 10:
! 11: MODULE: gnupmdrv.c
! 12:
! 13: This file contains the startup procedures for gnupmdrv
! 14:
! 15: ****************************************************************************/
! 16:
! 17: /* PM driver for GNUPLOT */
! 18:
! 19: /*[
! 20: * Copyright 1992, 1993, 1998 Roger Fearick
! 21: *
! 22: * Permission to use, copy, and distribute this software and its
! 23: * documentation for any purpose with or without fee is hereby granted,
! 24: * provided that the above copyright notice appear in all copies and
! 25: * that both that copyright notice and this permission notice appear
! 26: * in supporting documentation.
! 27: *
! 28: * Permission to modify the software is granted, but not the right to
! 29: * distribute the complete modified source code. Modifications are to
! 30: * be distributed as patches to the released version. Permission to
! 31: * distribute binaries produced by compiling modified sources is granted,
! 32: * provided you
! 33: * 1. distribute the corresponding source modifications from the
! 34: * released version in the form of a patch file along with the binaries,
! 35: * 2. add special version identification to distinguish your version
! 36: * in addition to the base release version number,
! 37: * 3. provide your name and address as the primary contact for the
! 38: * support of your modified version, and
! 39: * 4. retain our contact information in regard to use of the base
! 40: * software.
! 41: * Permission to distribute the released version of the source code along
! 42: * with corresponding source modifications in the form of a patch file is
! 43: * granted with same provisions 2 through 4 for binary distributions.
! 44: *
! 45: * This software is provided "as is" without express or implied warranty
! 46: * to the extent permitted by applicable law.
! 47: ]*/
! 48:
! 49:
! 50: /*
! 51: * AUTHOR
! 52: *
! 53: * Gnuplot driver for OS/2: Roger Fearick
! 54: *
! 55: * Send your comments or suggestions to
! 56: * info-gnuplot@dartmouth.edu.
! 57: * This is a mailing list; to join it send a note to
! 58: * majordomo@dartmouth.edu.
! 59: * Send bug reports to
! 60: * bug-gnuplot@dartmouth.edu.
! 61: **/
! 62:
! 63: #define INCL_PM
! 64: #define INCL_WIN
! 65: #define INCL_SPL
! 66: #define INCL_SPLDOSPRINT
! 67: #define INCL_DOSMEMMGR
! 68: #define INCL_DOSPROCESS
! 69: #define INCL_DOSFILEMGR
! 70: #include <os2.h>
! 71: #include <string.h>
! 72: #include <stdio.h>
! 73: #include <stdlib.h>
! 74: #include "gnupmdrv.h"
! 75:
! 76: /*==== g l o b a l d a t a ================================================*/
! 77:
! 78: char szIPCName[256] ;
! 79: char szIniFile[256] ;
! 80: #define IPCDEFAULT "gnuplot"
! 81: int bServer=0 ;
! 82: int bPersist=0 ;
! 83: int bWideLines=0 ;
! 84: int bEnhanced=0 ;
! 85:
! 86: /*==== l o c a l d a t a ==================================================*/
! 87:
! 88: /* class names for window registration */
! 89:
! 90: static char szChildName [] = "Gnuchild" ;
! 91:
! 92: static char szTitle[256] = "Gnuplot" ;
! 93:
! 94: /*==== f u n c t i o n s =====================================================*/
! 95:
! 96: BOOL QueryIni( HAB ) ;
! 97: int main( int, char** ) ;
! 98: static HWND InitHelp( HAB, HWND ) ;
! 99:
! 100: /*==== c o d e ===============================================================*/
! 101:
! 102: int main ( int argc, char **argv )
! 103: /*
! 104: ** args: argv[1] : name to be used for IPC (pipes/semaphores) with gnuplot
! 105: **
! 106: ** Standard PM initialisation:
! 107: ** -- set up message processing loop
! 108: ** -- register all window classes
! 109: ** -- start up main window
! 110: ** -- subclass main window for help and dde message trapping to frame window
! 111: ** -- init help system
! 112: ** -- check command line and open any filename found there
! 113: **
! 114: */
! 115: {
! 116: static ULONG flFrameFlags = (FCF_ACCELTABLE|FCF_STANDARD);//&(~FCF_TASKLIST) ;
! 117: static ULONG flClientFlags = WS_VISIBLE ;
! 118: HMQ hmq ;
! 119: QMSG qmsg ;
! 120: PFNWP pfnOldFrameWndProc ;
! 121: HWND hwndHelp ;
! 122: BOOL bPos ;
! 123:
! 124: /* (am, 19981001)
! 125: * A subtile problem is fixed here:
! 126: * upon the first initialization of this driver (i.e. we're here in main())
! 127: * it may inherit handles of files opened (temporarily) by gnuplot itself!
! 128: * We close them here.
! 129: */
! 130: fcloseall();
! 131:
! 132: if( argc <= 1 ) strcpy( szIPCName, IPCDEFAULT ) ;
! 133: else {
! 134: int i ;
! 135: strcpy( szIPCName, argv[1] ) ;
! 136: for ( i=2; i<argc; i++ ) {
! 137: while( *argv[i] != '\0' ) {
! 138: if( *argv[i] == '-' ) {
! 139: ++argv[i] ;
! 140: switch( *argv[i] ) {
! 141: case 's' :
! 142: bServer = 1 ;
! 143: break ;
! 144: case 'e' :
! 145: bEnhanced = 1 ;
! 146: break ;
! 147: case 'p' :
! 148: bPersist = 1 ;
! 149: break ;
! 150: case 'w' :
! 151: bWideLines = 1 ;
! 152: break ;
! 153: }
! 154: }
! 155: else if ( *argv[i] == '"' ) {
! 156: char *p = szTitle ;
! 157: argv[i]++ ;
! 158: while( *argv[i] != '"' ) {
! 159: *p++ = *argv[i]++ ;
! 160: }
! 161: *p = '\0' ;
! 162: }
! 163: argv[i]++ ;
! 164: }
! 165: }
! 166: }
! 167: {
! 168: char *p ;
! 169: /* get path from argv[0] to track down program files */
! 170: strcpy( szIniFile, argv[0] ) ;
! 171: while( (p=strchr(szIniFile,'/'))!=NULL ) *p = '\\' ;
! 172: p = strrchr(szIniFile,'\\') ;
! 173: if(p==NULL) p = strrchr(szIniFile,':') ;
! 174: if(p==NULL) p = szIniFile ;
! 175: else ++p ;
! 176: strcpy(p,GNUINI);
! 177: }
! 178:
! 179: hab = WinInitialize( 0 ) ;
! 180: hmq = WinCreateMsgQueue( hab, 50 ) ;
! 181:
! 182: // get defaults from gnupmdrv.ini
! 183:
! 184: bPos = QueryIni( hab ) ;
! 185:
! 186: // register window and child window classes
! 187:
! 188: if( ! WinRegisterClass( hab, /* Exit if can't register */
! 189: APP_NAME,
! 190: (PFNWP)DisplayClientWndProc,
! 191: CS_SIZEREDRAW,
! 192: 0 )
! 193: ) return 0L ;
! 194:
! 195: // create main window
! 196:
! 197: hwndFrame = WinCreateStdWindow (
! 198: HWND_DESKTOP,
! 199: 0,//WS_VISIBLE,
! 200: &flFrameFlags,
! 201: APP_NAME,
! 202: NULL,
! 203: flClientFlags,
! 204: 0L,
! 205: 1,
! 206: &hApp) ;
! 207:
! 208: if ( ! hwndFrame ) return 0 ;
! 209:
! 210: // subclass window for help & DDE trapping
! 211:
! 212: pfnOldFrameWndProc = WinSubclassWindow( hwndFrame, (PFNWP)NewFrameWndProc ) ;
! 213: WinSetWindowULong( hwndFrame, QWL_USER, (ULONG) pfnOldFrameWndProc ) ;
! 214:
! 215: // init the help manager
! 216:
! 217: hwndHelp = InitHelp( hab, hwndFrame ) ;
! 218:
! 219: // set window title and make it active
! 220:
! 221: {
! 222: char text[256] = APP_NAME;
! 223: strcat( text, " [" ) ;
! 224: strcat( text, szTitle ) ;
! 225: strcat( text, "]" ) ;
! 226: WinSetWindowText( hwndFrame, text ) ;
! 227: }
! 228: // process window messages
! 229:
! 230: while (WinGetMsg (hab, &qmsg, NULLHANDLE, 0, 0))
! 231: WinDispatchMsg (hab, &qmsg) ;
! 232:
! 233: // shut down
! 234:
! 235: WinDestroyHelpInstance( hwndHelp ) ;
! 236: WinDestroyWindow (hwndFrame) ;
! 237: WinDestroyMsgQueue (hmq) ;
! 238: WinTerminate (hab) ;
! 239:
! 240: return 0 ;
! 241: }
! 242:
! 243: static HWND InitHelp( HAB hab, HWND hwnd )
! 244: /*
! 245: ** initialise the help system
! 246: */
! 247: {
! 248: static HELPINIT helpinit = { sizeof(HELPINIT),
! 249: 0L,
! 250: NULL,
! 251: (PHELPTABLE)MAKELONG(1, 0xFFFF),
! 252: 0L,
! 253: 0L,
! 254: 0,
! 255: 0,
! 256: "GnuplotPM Help",
! 257: CMIC_HIDE_PANEL_ID,
! 258: "gnupmdrv.hlp" } ;
! 259: HWND hwndHelp ;
! 260: static char helppath[256] ;
! 261: char *p ;
! 262: if( (p=getenv("GNUPLOT")) != NULL ) {
! 263: strcpy( helppath, p ) ;
! 264: strcat( helppath, "/" ) ;
! 265: strcat( helppath, helpinit.pszHelpLibraryName ) ;
! 266: helpinit.pszHelpLibraryName = helppath ;
! 267: }
! 268: hwndHelp = WinCreateHelpInstance( hab, &helpinit ) ;
! 269: WinAssociateHelpInstance( hwndHelp, hwnd ) ;
! 270: return hwndHelp ;
! 271: }
! 272:
! 273: MRESULT EXPENTRY NewFrameWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
! 274: /*
! 275: ** Subclasses top-level frame window to trap help & dde messages
! 276: */
! 277: {
! 278: PFNWP pfnOldFrameWndProc ;
! 279:
! 280: pfnOldFrameWndProc = (PFNWP) WinQueryWindowULong( hwnd, QWL_USER ) ;
! 281: switch( msg ) {
! 282: default:
! 283: break ;
! 284:
! 285: case HM_QUERY_KEYS_HELP:
! 286: return (MRESULT) IDH_KEYS ;
! 287: }
! 288: return (*pfnOldFrameWndProc)(hwnd, msg, mp1, mp2) ;
! 289: }
! 290:
! 291:
! 292: MRESULT EXPENTRY About( HWND hDlg, ULONG message, MPARAM mp1, MPARAM mp2)
! 293: /*
! 294: ** 'About' box dialog function
! 295: */
! 296: {
! 297: return WinDefDlgProc( hDlg, message, mp1, mp2 ) ;
! 298: }
! 299:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>