[BACK]Return to dialogs.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / os2

Annotation of OpenXM_contrib/gnuplot/os2/dialogs.c, Revision 1.1

1.1     ! maekawa     1: #ifdef INCRCSDATA
        !             2: static char RCSid[]="$Id: dialogs.c,v 1.9 1998/03/22 22:34:20 drd Exp $" ;
        !             3: #endif
        !             4:
        !             5: /****************************************************************************
        !             6:
        !             7:     PROGRAM: gnupmdrv
        !             8:
        !             9:         Outboard PM driver for GNUPLOT 3.3
        !            10:
        !            11:     MODULE:  dialogs.c  Dialog procedures for gnupmdrv
        !            12:
        !            13: ****************************************************************************/
        !            14:
        !            15: /* PM driver for GNUPLOT */
        !            16:
        !            17: /*[
        !            18:  * Copyright 1992, 1993, 1998   Roger Fearick
        !            19:  *
        !            20:  * Permission to use, copy, and distribute this software and its
        !            21:  * documentation for any purpose with or without fee is hereby granted,
        !            22:  * provided that the above copyright notice appear in all copies and
        !            23:  * that both that copyright notice and this permission notice appear
        !            24:  * in supporting documentation.
        !            25:  *
        !            26:  * Permission to modify the software is granted, but not the right to
        !            27:  * distribute the complete modified source code.  Modifications are to
        !            28:  * be distributed as patches to the released version.  Permission to
        !            29:  * distribute binaries produced by compiling modified sources is granted,
        !            30:  * provided you
        !            31:  *   1. distribute the corresponding source modifications from the
        !            32:  *    released version in the form of a patch file along with the binaries,
        !            33:  *   2. add special version identification to distinguish your version
        !            34:  *    in addition to the base release version number,
        !            35:  *   3. provide your name and address as the primary contact for the
        !            36:  *    support of your modified version, and
        !            37:  *   4. retain our contact information in regard to use of the base
        !            38:  *    software.
        !            39:  * Permission to distribute the released version of the source code along
        !            40:  * with corresponding source modifications in the form of a patch file is
        !            41:  * granted with same provisions 2 through 4 for binary distributions.
        !            42:  *
        !            43:  * This software is provided "as is" without express or implied warranty
        !            44:  * to the extent permitted by applicable law.
        !            45: ]*/
        !            46:
        !            47: /*
        !            48:  * AUTHOR
        !            49:  *
        !            50:  *   Gnuplot driver for OS/2:  Roger Fearick
        !            51:  *
        !            52:  * Send your comments or suggestions to
        !            53:  *  info-gnuplot@dartmouth.edu.
        !            54:  * This is a mailing list; to join it send a note to
        !            55:  *  majordomo@dartmouth.edu.
        !            56:  * Send bug reports to
        !            57:  *  bug-gnuplot@dartmouth.edu.
        !            58: **/
        !            59:
        !            60: #define INCL_PM
        !            61: #define INCL_WIN
        !            62: #define INCL_DEV
        !            63: #define INCL_SPL
        !            64: #define INCL_SPLDOSPRINT
        !            65: #define INCL_WINDIALOGS
        !            66: #define INCL_WINBUTTONS
        !            67: #define INCL_WINSYS
        !            68: #define INCL_WINFRAMEMGR
        !            69: #define INCL_WINPOINTERS
        !            70: #define INCL_WINTRACKRECT
        !            71: #define INCL_WINENTRYFIELDS
        !            72: #define INCL_WINWINDOWMGR
        !            73: #include <os2.h>
        !            74: #include <math.h>
        !            75: #include <stdio.h>
        !            76: #include <stdlib.h>
        !            77: #include <string.h>
        !            78: #include "gnupmdrv.h"
        !            79:
        !            80: /* struct for printer capabilities */
        !            81:
        !            82: static struct {
        !            83:     long    lTech ;     // printer technology
        !            84:     long    lVer ;      // driver version
        !            85:     long    lWidth ;    // page width in pels
        !            86:     long    lHeight ;   // page height in pels
        !            87:     long    lWChars ;   // page width in chars
        !            88:     long    lHChars ;   // page height in chars
        !            89:     long    lHorRes ;   // horizontal resolution pels / metre
        !            90:     long    lVertRes ;  // vertical resolution pels / metre
        !            91:     } prCaps ;
        !            92:
        !            93: ULONG GetPrinters( PPRQINFO3* pprq, ULONG *pcTot  ) ;
        !            94:
        !            95:
        !            96: MRESULT EXPENTRY QPrintDlgProc ( HWND hwnd, ULONG usMsg, MPARAM mp1, MPARAM mp2 )
        !            97: /*
        !            98: **  Query print area and printer setup
        !            99: */
        !           100:     {
        !           101:     static PQPRINT pqp = NULL ;
        !           102:     static SWP     swp ;
        !           103:     static RECTL   rectlDef ;
        !           104:     TRACKINFO   ti ;
        !           105:     RECTL       rectlBox ;
        !           106:     HDC         hdc ;
        !           107:     ULONG       ulStyle ;
        !           108:     char        *psz ;
        !           109:
        !           110:     switch ( usMsg ) {
        !           111:
        !           112:         case WM_INITDLG :
        !           113:
        !           114:             pqp = (PQPRINT) PVOIDFROMMP( mp2 ) ;
        !           115:             if( pqp->caps & QP_CAPS_FILE ) {
        !           116:                 ulStyle = WinQueryWindowULong( WinWindowFromID( hwnd, IDD_PRINTQNAME ),
        !           117:                                                QWL_STYLE ) ;
        !           118:                 WinSetWindowULong( WinWindowFromID( hwnd, IDD_PRINTQNAME ),
        !           119:                                    QWL_STYLE, ulStyle ^ DT_HALFTONE  ) ;
        !           120:                 }
        !           121:             else {
        !           122:                 WinSendMsg( WinWindowFromID( hwnd, IDD_QPRNAME ),
        !           123:                             EM_SETREADONLY, (MPARAM)TRUE, 0L ) ;
        !           124:                 }
        !           125:             WinQueryWindowRect( WinWindowFromID( hwnd, IDD_QPRBOX ),
        !           126:                                 &rectlDef ) ;
        !           127:
        !           128:         case WM_USER_SET_DATA :
        !           129:
        !           130:             psz = *pqp->piPrinter->pszComment ? pqp->piPrinter->pszComment :
        !           131:                                         pqp->piPrinter->pszName ;
        !           132:             WinSetDlgItemText( hwnd, IDD_PRINTNAME, psz ) ;
        !           133:             WinSetDlgItemFloatF( hwnd, IDD_QPRXSIZE, 1, pqp->xsize ) ;
        !           134:             WinSetDlgItemFloatF( hwnd, IDD_QPRYSIZE, 1, pqp->ysize ) ;
        !           135:             WinSetDlgItemFloat( hwnd, IDD_QPRXFRAC, pqp->xfrac ) ;
        !           136:             WinSetDlgItemFloat( hwnd, IDD_QPRYFRAC, pqp->yfrac ) ;
        !           137:             WinQueryWindowPos( WinWindowFromID( hwnd, IDD_QPRBOX ),
        !           138:                                &swp ) ;
        !           139:             {
        !           140:             int y = rectlDef.yTop ;
        !           141:             rectlBox = rectlDef ;
        !           142:             if( pqp->xsize < pqp->ysize )
        !           143:                 rectlBox.xRight = rectlDef.yTop * pqp->xsize/pqp->ysize ;
        !           144:             else {
        !           145:                 int x = rectlDef.yTop * pqp->ysize/pqp->xsize ;
        !           146:                 rectlBox.yTop = x ;
        !           147:                 rectlBox.xRight = y ;
        !           148:                 }
        !           149:             }
        !           150:             WinSetWindowPos( WinWindowFromID( hwnd, IDD_QPRBOX ),
        !           151:                              NULLHANDLE, 0, 0, (short) rectlBox.xRight, (short)rectlBox.yTop, SWP_SIZE ) ;
        !           152:             {
        !           153:             double ratio = 1.560 ;
        !           154:             double xs = rectlBox.xRight - rectlBox.xLeft ;
        !           155:             double ys = rectlBox.yTop - rectlBox.yBottom ;
        !           156:             if( ys > xs/ratio ) { /* reduce ys to fit */
        !           157:                  rectlBox.yTop = rectlBox.yBottom + (int)(xs/ratio) ;
        !           158:                  }
        !           159:             else if( ys < xs/ratio ) { /* reduce xs to fit */
        !           160:                  rectlBox.xRight = rectlBox.xLeft + (int)(ys*ratio) ;
        !           161:                  }
        !           162:             }
        !           163:             rectlBox.xRight *= pqp->xfrac ;
        !           164:             rectlBox.yTop *= pqp->yfrac ;
        !           165:             WinSetWindowPos( WinWindowFromID( hwnd, IDD_QPRFRAME ),
        !           166:                              NULLHANDLE,
        !           167:                              swp.x, swp.y, //+(short)(swp.cy*(1.0-pqp->yfrac)),
        !           168:                              (short)rectlBox.xRight, (short)rectlBox.yTop, SWP_SIZE|SWP_MOVE ) ;
        !           169:             break ;
        !           170:
        !           171:         case WM_COMMAND :
        !           172:
        !           173:             switch ( SHORT1FROMMP(mp1) ) {
        !           174:
        !           175:                 case DID_OK:
        !           176:                     WinQueryDlgItemFloat( hwnd, IDD_QPRXFRAC, &pqp->xfrac ) ;
        !           177:                     WinQueryDlgItemFloat( hwnd, IDD_QPRYFRAC, &pqp->yfrac ) ;
        !           178:
        !           179:                     if( pqp->caps & QP_CAPS_FILE ) {
        !           180:                         WinQueryDlgItemText( hwnd, IDD_QPRNAME, 32, pqp->szFilename ) ;
        !           181:                         }
        !           182:                     break ;
        !           183:
        !           184:                 case IDD_QPRSETPR:   /* printer setup */
        !           185:                     if( SetPrinterMode( hwnd, pqp ) == 1 ) {
        !           186:                         if( (hdc = OpenPrinterDC( WinQueryAnchorBlock( hwnd ),
        !           187:                                                   pqp,
        !           188:                                                   OD_INFO,
        !           189:                                                   NULL )) != DEV_ERROR ) {
        !           190:                             DevQueryCaps( hdc, CAPS_TECHNOLOGY, (long)sizeof(prCaps)/sizeof(long), (PLONG)&prCaps ) ;
        !           191:                             DevCloseDC( hdc ) ;
        !           192:                             pqp->xsize = (float)100.0* (float) prCaps.lWidth / (float) prCaps.lHorRes ; // in cm
        !           193:                             pqp->ysize = (float)100.0* (float) prCaps.lHeight / (float) prCaps.lVertRes ; // in cm
        !           194:                             WinSendMsg( hwnd, WM_USER_SET_DATA, 0L, 0L ) ;
        !           195:                             }
        !           196:                         }
        !           197:                     return 0L ;
        !           198:
        !           199:                 case IDD_QPRTRACK :     /* track plot area */
        !           200:                     WinQueryWindowRect( WinWindowFromID( hwnd, IDD_QPRBOX ),
        !           201:                                         &rectlBox ) ;
        !           202:                     {
        !           203:                     double ratio = 1.560 ;
        !           204:                     double xs = rectlBox.xRight - rectlBox.xLeft ;
        !           205:                     double ys = rectlBox.yTop - rectlBox.yBottom ;
        !           206:                     if( ys > xs/ratio ) { /* reduce ys to fit */
        !           207:                         rectlBox.yTop = rectlBox.yBottom + (int)(xs/ratio) ;
        !           208:                         }
        !           209:                     else if( ys < xs/ratio ) { /* reduce xs to fit */
        !           210:                         rectlBox.xRight = rectlBox.xLeft + (int)(ys*ratio) ;
        !           211:                         }
        !           212:                     }
        !           213:                     ti.cxBorder = ti.cyBorder = 2 ;
        !           214:                     ti.cxGrid = ti.cyGrid = 0 ;
        !           215:                     ti.cxKeyboard = ti.cyKeyboard = 2 ;
        !           216:                     ti.ptlMinTrackSize.x = ti.ptlMinTrackSize.y = 2 ;
        !           217:                     ti.rclBoundary = rectlBox ;
        !           218:                     ti.ptlMaxTrackSize.x = rectlBox.xRight ;
        !           219:                     ti.ptlMaxTrackSize.y = rectlBox.yTop ;
        !           220:                     ti.rclTrack.xRight = pqp->xfrac * rectlBox.xRight ;
        !           221:                     ti.rclTrack.yTop = pqp->yfrac*rectlBox.yTop ;
        !           222:                     ti.rclTrack.xLeft = 0 ;
        !           223:                     ti.rclTrack.yBottom = 0 ;//(1.0-pqp->yfrac) * rectlBox.yTop ;
        !           224:                     ti.fs = TF_RIGHT|TF_TOP|TF_STANDARD|TF_SETPOINTERPOS|TF_ALLINBOUNDARY ;
        !           225:                     WinSetPointer( HWND_DESKTOP,
        !           226:                                    WinQuerySysPointer( HWND_DESKTOP, SPTR_SIZENWSE, FALSE ) ) ;
        !           227:                     WinTrackRect( WinWindowFromID( hwnd, IDD_QPRBOX ),
        !           228:                                   NULLHANDLE,
        !           229:                                   &ti ) ;
        !           230:                     pqp->xfrac = (float)ti.rclTrack.xRight / (float)rectlBox.xRight ;
        !           231:                     pqp->yfrac = ((float)(ti.rclTrack.yTop-ti.rclTrack.yBottom) / (float)rectlBox.yTop) ;
        !           232:                     rectlBox.yTop = ti.rclTrack.yTop - ti.rclTrack.yBottom ;
        !           233:                     rectlBox.xRight = ti.rclTrack.xRight ;
        !           234:                     {
        !           235:                     double ratio = 1.560 ;
        !           236:                     double xs = rectlBox.xRight - rectlBox.xLeft ;
        !           237:                     double ys = rectlBox.yTop - rectlBox.yBottom ;
        !           238:                     if( ys > xs/ratio ) { /* reduce ys to fit */
        !           239:                         rectlBox.yTop = rectlBox.yBottom + (int)(xs/ratio) ;
        !           240:                         }
        !           241:                     else if( ys < xs/ratio ) { /* reduce xs to fit */
        !           242:                         rectlBox.xRight = rectlBox.xLeft + (int)(ys*ratio) ;
        !           243:                         }
        !           244:                     }
        !           245:                     WinSetWindowPos( WinWindowFromID( hwnd, IDD_QPRFRAME ),
        !           246:                                      NULLHANDLE,
        !           247:                                      swp.x, swp.y,//+(short)(swp.cy*(1.0-pqp->yfrac)),
        !           248:                                      (short)rectlBox.xRight, (short)rectlBox.yTop, SWP_SIZE|SWP_MOVE ) ;
        !           249:                     WinSetDlgItemFloat( hwnd, IDD_QPRXFRAC, pqp->xfrac ) ;
        !           250:                     WinSetDlgItemFloat( hwnd, IDD_QPRYFRAC, pqp->yfrac ) ;
        !           251:                     return 0L ;
        !           252:
        !           253:                 default:
        !           254:                     break ;
        !           255:                 }
        !           256:
        !           257:          default:
        !           258:             break ;
        !           259:             }
        !           260:         /* fall through to the default control processing */
        !           261:
        !           262:     return WinDefDlgProc ( hwnd , usMsg , mp1 , mp2 ) ;
        !           263:     }
        !           264:
        !           265: MRESULT EXPENTRY QPrintersDlgProc ( HWND hwnd, ULONG usMsg, MPARAM mp1, MPARAM mp2 )
        !           266: /*
        !           267: **  Query printers and allow selection
        !           268: */
        !           269:     {
        !           270:     static HWND hwndLB ;
        !           271:     static PPRQINFO3 pprq=NULL ;
        !           272:     static ULONG cPrinters ;
        !           273:     static USHORT usItem ;
        !           274:     static char *szPrinterName ;
        !           275:     int i, iSelect ;
        !           276:     char *psz ;
        !           277:
        !           278:     switch ( usMsg ) {
        !           279:
        !           280:         case WM_INITDLG :
        !           281:
        !           282:             szPrinterName = (char*) PVOIDFROMMP( mp2 ) ;
        !           283:             iSelect = 0 ;
        !           284:             GetPrinters( &pprq, &cPrinters ) ;
        !           285:             hwndLB = WinWindowFromID( hwnd, IDD_QPRSLIST ) ;
        !           286:             for( i=0; i<cPrinters;i++ ) {
        !           287:                 psz = *pprq[i].pszComment ? pprq[i].pszComment :
        !           288:                                             pprq[i].pszName ;
        !           289:                 WinSendMsg( hwndLB,
        !           290:                             LM_INSERTITEM,
        !           291:                             (MPARAM)LIT_END,
        !           292:                             MPFROMP(psz) ) ;
        !           293:                 if( strcmp( pprq[i].pszName, szPrinterName ) == 0 )
        !           294:                     iSelect = i ;
        !           295:                 }
        !           296:
        !           297:             WinSendMsg( hwndLB,
        !           298:                         LM_SELECTITEM,
        !           299:                         MPFROMSHORT( iSelect ),
        !           300:                         (MPARAM)TRUE ) ;
        !           301:
        !           302:             break ;
        !           303:
        !           304:         case WM_COMMAND :
        !           305:
        !           306:             switch ( SHORT1FROMMP(mp1) ) {
        !           307:
        !           308:                 case DID_OK:
        !           309:                     strcpy( szPrinterName, pprq[usItem].pszName ) ;
        !           310:                 case DID_CANCEL:
        !           311:                     free( pprq ) ;
        !           312:                     pprq = NULL;
        !           313:                     break ;
        !           314:                 }
        !           315:             break ;
        !           316:
        !           317:         case WM_CONTROL:
        !           318:
        !           319:             if( SHORT1FROMMP( mp1 ) == IDD_QPRSLIST ) {
        !           320:                 if( SHORT2FROMMP( mp1 ) == LN_SELECT  ) {
        !           321:                     usItem = (ULONG)WinSendMsg( hwndLB,
        !           322:                                 LM_QUERYSELECTION,
        !           323:                                 0L,
        !           324:                                 0L ) ;
        !           325:                     }
        !           326:                 }
        !           327:
        !           328:         default:
        !           329:             break ;
        !           330:         }
        !           331:         /* fall through to the default control processing */
        !           332:     return WinDefDlgProc ( hwnd , usMsg , mp1 , mp2 ) ;
        !           333:     }
        !           334:
        !           335: ULONG GetPrinters( PPRQINFO3 *pprq, ULONG *pcTot  )
        !           336: /*
        !           337: ** get a list of printers
        !           338: */
        !           339:     {
        !           340:     ULONG rc ;
        !           341:     ULONG cQueues, cbData ;
        !           342:
        !           343:     rc = SplEnumQueue( NULL, 3, NULL, 0, &cQueues, pcTot, &cbData, NULL ) ;
        !           344:
        !           345:     if( *pprq != NULL ) {
        !           346:         free( *pprq ) ;
        !           347:         *pprq = NULL ;
        !           348:         }
        !           349:     if( *pcTot == 0 ) { /* no printers */
        !           350:         return 0 ;
        !           351:         }
        !           352:     *pprq = malloc( cbData ) ;
        !           353:     rc = SplEnumQueue( NULL,
        !           354:                        3,
        !           355:                        *pprq,
        !           356:                        cbData,
        !           357:                        &cQueues,
        !           358:                        pcTot,
        !           359:                        &cbData,
        !           360:                        NULL ) ;
        !           361:     return *pcTot ;
        !           362:     }
        !           363:
        !           364: MRESULT EXPENTRY PauseMsgDlgProc ( HWND hwnd, ULONG usMsg, MPARAM mp1, MPARAM mp2 )
        !           365: /*
        !           366: **  Pause message dialog box proc
        !           367: */
        !           368:     {
        !           369:     static PPAUSEDATA ppdata = NULL ;
        !           370:     char *pszText ;
        !           371:     switch ( usMsg ) {
        !           372:
        !           373:         case WM_INITDLG :
        !           374:                 /* set the position so user can move out the way, and
        !           375:                    have it come back there next time */
        !           376:             ppdata = (PPAUSEDATA) PVOIDFROMMP( mp2 ) ;
        !           377:             if( ppdata->pswp != NULL )
        !           378:                 WinSetWindowPos( hwnd, HWND_TOP, ppdata->pswp->x, ppdata->pswp->y,
        !           379:                                  0, 0, SWP_MOVE ) ;
        !           380:             pszText = ppdata->pszMessage ;
        !           381:             while(*pszText==' ') ++pszText ;
        !           382:             WinSetDlgItemText( hwnd, IDD_PAUSETEXT, pszText ) ;
        !           383:             break ;
        !           384:
        !           385:         case WM_COMMAND :
        !           386:             switch ( SHORT1FROMMP(mp1) ) {
        !           387:                 case DID_OK:
        !           388:                 case DID_CANCEL:
        !           389:                     WinPostMsg( WinQueryWindow( hwnd, QW_OWNER ),
        !           390:                                 WM_PAUSEEND,
        !           391:                                 SHORT1FROMMP(mp1)==DID_OK?(MPARAM)1L:0L,
        !           392:                                 0L ) ;
        !           393:                     if( ppdata->pswp == NULL ) ppdata->pswp = (PSWP)malloc( sizeof(SWP) ) ;
        !           394:                     WinQueryWindowPos( hwnd, ppdata->pswp ) ;
        !           395:                     WinDismissDlg( hwnd, 0 ) ;
        !           396:                     break ;
        !           397:                 case IDM_PRINT:
        !           398:                     WinPostMsg( WinQueryWindow( hwnd, QW_OWNER ),
        !           399:                                 WM_COMMAND,
        !           400:                                 MPFROMSHORT(IDM_PRINT),
        !           401:                                 0L ) ;
        !           402:                     return 0 ;
        !           403:                 default:
        !           404:                     break ;
        !           405:                 }
        !           406:         default:
        !           407:             break ;
        !           408:         }
        !           409:         /* fall through to the default control processing */
        !           410:     return WinDefDlgProc ( hwnd , usMsg , mp1 , mp2 ) ;
        !           411:     }
        !           412:
        !           413: void WinSetDlgItemFloatF( HWND hwnd, USHORT usID, int nDec, float flValue )
        !           414: /*
        !           415: */
        !           416:     {
        !           417:     char achBuffer [ 34 ], *szCvt ; // default string field size ...
        !           418:     int  iDec ;
        !           419:     int  iSign ;
        !           420:     char fmt[32] ;
        !           421:     sprintf( fmt, "%%12.%df", nDec ) ;
        !           422:     sprintf( achBuffer, fmt, flValue ) ;
        !           423:     WinSetDlgItemText( hwnd, usID, achBuffer ) ;
        !           424:     }
        !           425:
        !           426: void WinSetDlgItemFloat( HWND hwnd, USHORT usID, float flValue )
        !           427: /*
        !           428: */
        !           429:     {
        !           430:     char achBuffer [ 34 ] ; // default string field size ...
        !           431:     char fmt[10] ;
        !           432:     sprintf( fmt, "%%12.%df", 4 ) ;
        !           433:     sprintf( achBuffer, fmt, flValue ) ;
        !           434:     WinSetDlgItemText( hwnd, usID, achBuffer ) ;
        !           435:     WinSetDlgItemText( hwnd, usID, achBuffer ) ;
        !           436:     }
        !           437:
        !           438: void WinQueryDlgItemFloat( HWND hwnd, USHORT usID, float *pflValue )
        !           439: /*
        !           440: */
        !           441:     {
        !           442:     char achBuffer [ 34 ] ; // default string field size ...
        !           443:     ULONG ulTemp ;
        !           444:
        !           445:     WinQueryDlgItemText( hwnd, usID, 34, achBuffer ) ;
        !           446:     *pflValue = (float) atof( achBuffer ) ;
        !           447:     }
        !           448:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>