File:  [OS/2 SDKs] / pmsdk / samples / linefrac / lfdlg.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 12:28:31 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: pmsdk-1989, HEAD
Microsoft OS/2 SDK PM 02-24-1989

/************************************************************************
*
*   lfdlg.c -- Window procedures for dialog boxes used in LineFractal.
*
*   Created by Microsoft Corporation, 1989
*
************************************************************************/

#define INCL_WIN
#define INCL_GPI
#include <os2.h>

#include <mt\stdio.h>
#include <mt\stdlib.h>
#include <mt\math.h>

#define INCL_GLOBALS
#define INCL_THREADS
#include "linefrac.h"

#define INCL_LFDLG
#define INCL_LFUTIL
#include "lffuncs.h"




/************************************************************************
*
*   Global Variables
*
*   global	Global data block.
*
************************************************************************/

extern GLOBALDATA global;




/************************************************************************
*
*   AboutDlg
*
*   Process messages for the About box.
*
************************************************************************/

ULONG CALLBACK
AboutDlg(hwnd, usMsg, mp1, mp2)
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    switch (usMsg)
    {
    case WM_COMMAND:			/* the user has pressed a button */
	switch (SHORT1FROMMP(mp1))	/* which button? */
	{
	case IDD_OK:
	case IDD_CANCEL:
	    WinDismissDlg(hwnd, TRUE);
	    break;

	default:
	    return FALSE;
	}
	break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}




/************************************************************************
*
*   TimerDelayDlg
*
*   Process messages for the dialog box used to set the timer delay
*   values for automatically restarting a drawing.
*
************************************************************************/

ULONG CALLBACK
TimerDelayDlg(hwnd, usMsg, mp1, mp2)
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:
	MySetWindowUShort(hwnd, IDD_MINDELAY, global.usMinTimerDelay);
	MySetWindowUShort(hwnd, IDD_MAXDELAY, global.usMaxTimerDelay);
	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:
	    MyGetWindowUShort(hwnd, IDD_MINDELAY, &global.usMinTimerDelay);
	    MyGetWindowUShort(hwnd, IDD_MAXDELAY, &global.usMaxTimerDelay);

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}




/************************************************************************
*
*   BitmapParamsDlg
*
*   Process messages for the bitmap parameters dialog box.
*
************************************************************************/

ULONG CALLBACK
BitmapParamsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	MySetWindowUShort(hwnd, IDD_BMCX,     global.bm.cx);
	MySetWindowUShort(hwnd, IDD_BMCY,     global.bm.cy);
	MySetWindowUShort(hwnd, IDD_BMPLANES, global.bm.cPlanes);
	MySetWindowUShort(hwnd, IDD_BMBPP,    global.bm.cBitCount);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    MyGetWindowUShort(hwnd, IDD_BMCX,	  &global.bm.cx);
	    MyGetWindowUShort(hwnd, IDD_BMCY,	  &global.bm.cy);
	    MyGetWindowUShort(hwnd, IDD_BMPLANES, &global.bm.cPlanes);
	    MyGetWindowUShort(hwnd, IDD_BMBPP,	  &global.bm.cBitCount);

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}




/************************************************************************
*
*   SwitchDelayDlg
*
*   Process messages for the dialog box used to set the switch
*   delay value for automatically switching between threads.
*
************************************************************************/

ULONG CALLBACK
SwitchDelayDlg(hwnd, usMsg, mp1, mp2)
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:
	MySetWindowUShort(hwnd, IDD_SWITCHDELAY, global.usSwitchDelay);
	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:
	    MyGetWindowUShort(hwnd, IDD_SWITCHDELAY, &global.usSwitchDelay);

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}




/************************************************************************
*
*   LineAttrsDlg
*
*   Process messages for the line attributes dialog box.
*
************************************************************************/

#define SETLINEATTR(H, I, J)						  \
	MySetWindow##I(hwnd, J, global.lb.H)

#define GETLINEATTR(H, I, J, K, L)					  \
	{								  \
	    J temp;							  \
	    MyGetWindow##I(hwnd, K, &temp);				  \
	    if (temp != global.lb.H)					  \
	    {								  \
		global.lb.H = temp;					  \
		global.flLineAttrs |= L;				  \
	    }								  \
	}

ULONG CALLBACK
LineAttrsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	if (!global.fUpdateAttrs || !(global.flLineAttrs & LFA_LINEALL))
	    global.lb = global.pThrTop->lb;

	SETLINEATTR(lColor,	Long,	IDD_LINECOLOR);
	SETLINEATTR(usMixMode,	UShort, IDD_LINEMIX);
	SETLINEATTR(fxWidth,	Long,	IDD_LINEWIDTH);
	SETLINEATTR(lGeomWidth, Long,	IDD_LINEGEOMWIDTH);
	SETLINEATTR(usType,	UShort, IDD_LINETYPE);
	SETLINEATTR(usEnd,	UShort, IDD_LINEEND);
	SETLINEATTR(usJoin,	UShort, IDD_LINEJOIN);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETLINEATTR(lColor,     Long,   LONG,   IDD_LINECOLOR,     LFA_LINECOLOR);
	    GETLINEATTR(usMixMode,  UShort, USHORT, IDD_LINEMIX,       LFA_LINEMIX);
	    GETLINEATTR(fxWidth,    Long,   LONG,   IDD_LINEWIDTH,     LFA_LINEWIDTH);
	    GETLINEATTR(lGeomWidth, Long,   LONG,   IDD_LINEGEOMWIDTH, LFA_LINEGEOMWIDTH);
	    GETLINEATTR(usType,     UShort, USHORT, IDD_LINETYPE,      LFA_LINETYPE);
	    GETLINEATTR(usEnd,	    UShort, USHORT, IDD_LINEEND,       LFA_LINEEND);
	    GETLINEATTR(usJoin,     UShort, USHORT, IDD_LINEJOIN,      LFA_LINEJOIN);

	    if (global.flLineAttrs & LFA_LINEALL)
	    {
		global.pThrTop->fUpdateAttrs = TRUE;
		global.fUpdateAttrs = TRUE;
	    }

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETLINEATTR
#undef GETLINEATTR




/************************************************************************
*
*   MarkerAttrsDlg
*
*   Process messages for the marker attributes dialog box.
*
************************************************************************/

#define SETMARKATTR(H, I, J)						  \
	MySetWindow##I(hwnd, J, global.mb.H)

#define GETMARKATTR(H, I, J, K, L)					  \
	{								  \
	    J temp;							  \
	    MyGetWindow##I(hwnd, K, &temp);				  \
	    if (temp != global.mb.H)					  \
	    {								  \
		global.mb.H = temp;					  \
		global.flMarkerAttrs |= L;				  \
	    }								  \
	}

ULONG CALLBACK
MarkerAttrsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	if (!global.fUpdateAttrs || !(global.flMarkerAttrs & LFA_MARKALL))
	    global.mb = global.pThrTop->mb;

	SETMARKATTR(lColor,	   Long,   IDD_MARKCOLOR);
	SETMARKATTR(lBackColor,    Long,   IDD_MARKBACKCOLOR);
	SETMARKATTR(usMixMode,	   UShort, IDD_MARKMIX);
	SETMARKATTR(usBackMixMode, UShort, IDD_MARKBACKMIX);
	SETMARKATTR(usSet,	   UShort, IDD_MARKSET);
	SETMARKATTR(usSymbol,	   UShort, IDD_MARKSYMBOL);
	SETMARKATTR(sizfxCell.cx,  Long,   IDD_MARKCELLWIDTH);
	SETMARKATTR(sizfxCell.cy,  Long,   IDD_MARKCELLHEIGHT);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETMARKATTR(lColor,        Long,   LONG,   IDD_MARKCOLOR,	  LFA_MARKCOLOR);
	    GETMARKATTR(lBackColor,    Long,   LONG,   IDD_MARKBACKCOLOR,  LFA_MARKBACKCOLOR);
	    GETMARKATTR(usMixMode,     UShort, USHORT, IDD_MARKMIX,	  LFA_MARKMIX);
	    GETMARKATTR(usBackMixMode, UShort, USHORT, IDD_MARKBACKMIX,	  LFA_MARKBACKMIX);
	    GETMARKATTR(usSet,	       UShort, USHORT, IDD_MARKSET,	  LFA_MARKSET);
	    GETMARKATTR(usSymbol,      UShort, USHORT, IDD_MARKSYMBOL,	  LFA_MARKSYMBOL);
	    GETMARKATTR(sizfxCell.cx,  Long,   LONG,   IDD_MARKCELLWIDTH,  LFA_MARKCELLWIDTH);
	    GETMARKATTR(sizfxCell.cy,  Long,   LONG,   IDD_MARKCELLHEIGHT, LFA_MARKCELLHEIGHT);

	    if (global.flMarkerAttrs & LFA_MARKALL)
	    {
		global.pThrTop->fUpdateAttrs = TRUE;
		global.fUpdateAttrs = TRUE;
	    }

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETMARKATTR
#undef GETMARKATTR




/************************************************************************
*
*   AreaAttrsDlg
*
*   Process messages for the area attributes dialog box.
*
************************************************************************/

#define SETAREAATTR(H, I, J)						  \
	MySetWindow##I(hwnd, J, global.ab.H)

#define GETAREAATTR(H, I, J, K, L)					  \
	{								  \
	    J temp;							  \
	    MyGetWindow##I(hwnd, K, &temp);				  \
	    if (temp != global.ab.H)					  \
	    {								  \
		global.ab.H = temp;					  \
		global.flAreaAttrs |= L;				  \
	    }								  \
	}

ULONG CALLBACK
AreaAttrsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	if (!global.fUpdateAttrs || !(global.flAreaAttrs & LFA_AREAALL))
	    global.ab = global.pThrTop->ab;

	SETAREAATTR(lColor,	   Long,   IDD_AREACOLOR);
	SETAREAATTR(lBackColor,    Long,   IDD_AREABACKCOLOR);
	SETAREAATTR(usMixMode,	   UShort, IDD_AREAMIX);
	SETAREAATTR(usBackMixMode, UShort, IDD_AREABACKMIX);
	SETAREAATTR(usSet,	   UShort, IDD_AREASET);
	SETAREAATTR(usSymbol,	   UShort, IDD_AREASYMBOL);
	SETAREAATTR(ptlRefPoint.x, Long,   IDD_AREAREFX);
	SETAREAATTR(ptlRefPoint.y, Long,   IDD_AREAREFY);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETAREAATTR(lColor,        Long,   LONG,   IDD_AREACOLOR,	 LFA_AREACOLOR);
	    GETAREAATTR(lBackColor,    Long,   LONG,   IDD_AREABACKCOLOR, LFA_AREABACKCOLOR);
	    GETAREAATTR(usMixMode,     UShort, USHORT, IDD_AREAMIX,	 LFA_AREAMIX);
	    GETAREAATTR(usBackMixMode, UShort, USHORT, IDD_AREABACKMIX,	 LFA_AREABACKMIX);
	    GETAREAATTR(usSet,	       UShort, USHORT, IDD_AREASET,	 LFA_AREASET);
	    GETAREAATTR(usSymbol,      UShort, USHORT, IDD_AREASYMBOL,	 LFA_AREASYMBOL);
	    GETAREAATTR(ptlRefPoint.x, Long,   LONG,   IDD_AREAREFX,	 LFA_AREAREFX);
	    GETAREAATTR(ptlRefPoint.y, Long,   LONG,   IDD_AREAREFY,	 LFA_AREAREFY);

	    if (global.flAreaAttrs & LFA_AREAALL)
	    {
		global.pThrTop->fUpdateAttrs = TRUE;
		global.fUpdateAttrs = TRUE;
	    }

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETAREAATTR
#undef GETAREAATTR




/************************************************************************
*
*   ImageAttrsDlg
*
*   Process messages for the image attributes dialog box.
*
************************************************************************/

#define SETIMAGEATTR(H, I, J)						  \
	MySetWindow##I(hwnd, J, global.ib.H)

#define GETIMAGEATTR(H, I, J, K, L)					  \
	{								  \
	    J temp;							  \
	    MyGetWindow##I(hwnd, K, &temp);				  \
	    if (temp != global.ib.H)					  \
	    {								  \
		global.ib.H = temp;					  \
		global.flImageAttrs |= L;				  \
	    }								  \
	}

ULONG CALLBACK
ImageAttrsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	if (!global.fUpdateAttrs || !(global.flImageAttrs & LFA_IMAGEALL))
	    global.ib = global.pThrTop->ib;

	SETIMAGEATTR(lColor,	    Long,   IDD_IMAGECOLOR);
	SETIMAGEATTR(lBackColor,    Long,   IDD_IMAGEBACKCOLOR);
	SETIMAGEATTR(usMixMode,     UShort, IDD_IMAGEMIX);
	SETIMAGEATTR(usBackMixMode, UShort, IDD_IMAGEBACKMIX);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETIMAGEATTR(lColor,	Long,	LONG,	IDD_IMAGECOLOR,	   LFA_IMAGECOLOR);
	    GETIMAGEATTR(lBackColor,	Long,	LONG,	IDD_IMAGEBACKCOLOR, LFA_IMAGEBACKCOLOR);
	    GETIMAGEATTR(usMixMode,	UShort, USHORT, IDD_IMAGEMIX,	   LFA_IMAGEMIX);
	    GETIMAGEATTR(usBackMixMode, UShort, USHORT, IDD_IMAGEBACKMIX,   LFA_IMAGEBACKMIX);

	    if (global.flImageAttrs & LFA_IMAGEALL)
	    {
		global.pThrTop->fUpdateAttrs = TRUE;
		global.fUpdateAttrs = TRUE;
	    }

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETIMAGEATTR
#undef GETIMAGEATTR




/************************************************************************
*
*   MiscAttrsDlg
*
*   Process messages for the fractal attributes dialog box.
*
************************************************************************/

#define SETMISCATTR(H, I, J)						  \
	MySetWindow##I(hwnd, J, global.H)

#define GETMISCATTR(H, I, J, K, L)					  \
	{								  \
	    J temp;							  \
	    MyGetWindow##I(hwnd, K, &temp);				  \
	    if (temp != global.H)					  \
	    {								  \
		global.H = temp;					  \
		global.flMiscAttrs |= L;				  \
	    }								  \
	}

ULONG CALLBACK
MiscAttrsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	if (!global.fUpdateAttrs || !(global.flMiscAttrs &
		(LFA_RECURSION|LFA_CPTMAX|LFA_POLYGONSIDES|LFA_ROTATION)))
	{
	    global.usRecursion	  = global.pThrTop->usRecursion;
	    global.cptMax	  = global.pThrTop->cptMax;
	    global.usPolygonSides = global.pThrTop->usPolygonSides;
	    global.dblRotation	  = global.pThrTop->dblRotation;
	}

	SETMISCATTR(usRecursion,    UShort, IDD_RECURSION);
	SETMISCATTR(cptMax,	    UShort, IDD_CPTMAX);
	SETMISCATTR(usPolygonSides, UShort, IDD_NUMSIDES);
	SETMISCATTR(dblRotation,    Double, IDD_ROTATION);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETMISCATTR(usRecursion,	UShort, USHORT, IDD_RECURSION, LFA_RECURSION);
	    GETMISCATTR(cptMax, 	UShort, USHORT, IDD_CPTMAX,    LFA_CPTMAX);
	    GETMISCATTR(usPolygonSides, UShort, USHORT, IDD_NUMSIDES,  LFA_POLYGONSIDES);
	    GETMISCATTR(dblRotation,	Double, double, IDD_ROTATION,  LFA_ROTATION);

	    if (global.flMiscAttrs & LFA_POLYGONSIDES)
		if (global.usPolygonSides == 0)
		    global.usPolygonSides = 2;

	    if (global.flMiscAttrs & LFA_CPTMAX)
	    {
		if (global.cptMax == 0)
		    global.cptMax = 1;
		else if (global.cptMax > MAX_POINT_COUNT)
		    global.cptMax = MAX_POINT_COUNT;
	    }

	    if (global.flMiscAttrs & (LFA_RECURSION|LFA_CPTMAX|
		LFA_POLYGONSIDES|LFA_ROTATION))
	    {
		global.pThrTop->fUpdateAttrs = TRUE;
		global.fUpdateAttrs = TRUE;
	    }

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETMISCATTR
#undef GETMISCATTR




/************************************************************************
*
*   DimensionsDlg
*
*   Process messages for the fractal dimensions dialog box.
*
************************************************************************/

#define SETDIMENSIONS(H, I, J)						  \
	MySetWindow##I(hwnd, J, global.H)

#define GETDIMENSIONS(H, I, J, K, L)					  \
	{								  \
	    J temp;							  \
	    MyGetWindow##I(hwnd, K, &temp);				  \
	    if (temp != global.H)					  \
	    {								  \
		global.H = temp;					  \
		global.flMiscAttrs |= L;				  \
	    }								  \
	}

ULONG CALLBACK
DimensionsDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	if (!global.fUpdateAttrs || !(global.flMiscAttrs &
	    (LFA_XOFF|LFA_YOFF|LFA_XSCALE|LFA_YSCALE)))
	{
	    global.dblXOff   = global.pThrTop->dblXOff;
	    global.dblYOff   = global.pThrTop->dblYOff;
	    global.dblXScale = global.pThrTop->dblXScale;
	    global.dblYScale = global.pThrTop->dblYScale;
	}

	SETDIMENSIONS(dblXOff,	 Double, IDD_XOFF);
	SETDIMENSIONS(dblYOff,	 Double, IDD_YOFF);
	SETDIMENSIONS(dblXScale, Double, IDD_XSCALE);
	SETDIMENSIONS(dblYScale, Double, IDD_YSCALE);

	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETDIMENSIONS(dblXOff,   Double, double, IDD_XOFF,	LFA_XOFF);
	    GETDIMENSIONS(dblYOff,   Double, double, IDD_YOFF,	LFA_YOFF);
	    GETDIMENSIONS(dblXScale, Double, double, IDD_XSCALE, LFA_XSCALE);
	    GETDIMENSIONS(dblYScale, Double, double, IDD_YSCALE, LFA_YSCALE);

	    if (global.flMiscAttrs & (LFA_XOFF|LFA_YOFF|LFA_XSCALE|LFA_YSCALE))
	    {
		global.pThrTop->fUpdateAttrs = TRUE;
		global.fUpdateAttrs = TRUE;
	    }

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETDIMENSIONS
#undef GETDIMENSIONS




/************************************************************************
*
*   PtrPreferencesDlg
*
*   Process messages for the mouse pointer preferences dialog box.
*
************************************************************************/

#define SETPTRPREF(H, I, J)				    \
	MySetWindow##I(hwnd, J, global.H)

#define GETPTRPREF(H, I, J)				    \
	MyGetWindow##I(hwnd, J, &global.H)

ULONG CALLBACK
PtrPreferencesDlg( hwnd, usMsg, mp1, mp2 )
HWND   hwnd;
USHORT usMsg;
MPARAM mp1;
MPARAM mp2;
{
    BOOL fRet = FALSE;

    switch (usMsg)
    {
    case WM_INITDLG:

	SETPTRPREF(usPtrThreshold, UShort, IDD_PTRTHRESHOLD);
	WinSendDlgItemMsg(hwnd, global.usUserPtr+IDD_USERPTR0,
			  BM_SETCHECK, (MPARAM)TRUE, 0L);
	return FALSE;

    case WM_COMMAND:
	switch (SHORT1FROMMP(mp1))
        {
	case IDD_OK:

	    GETPTRPREF(usPtrThreshold, UShort, IDD_PTRTHRESHOLD);
	    global.usUserPtr = (USHORT) WinSendDlgItemMsg(hwnd, IDD_USERPTR0,
						 BM_QUERYCHECKINDEX, 0L, 0L);

	    if (global.usPtrThreshold < 0)
		global.usPtrThreshold = 0;

	    if (!global.fAnimatePtr)
		global.usCurPtr = global.usUserPtr;

	    fRet = TRUE;

	    /* fall through to some common code */

	case IDD_CANCEL:
	    WinDismissDlg(hwnd, fRet);
            break;

        default:
	    return FALSE;
        }
        break;

    default:
	return (ULONG) WinDefDlgProc(hwnd, usMsg, mp1, mp2);
    }
    return FALSE;
}
#undef SETPTRPREF
#undef GETPTRPREF

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.