|
|
1.1 root 1: /**********************************************************************\ 1.1.1.2 ! root 2: * General include for LineFractal application ! 3: * ! 4: * Created by Microsoft Corporation, 1989 ! 5: * 1.1 root 6: \**********************************************************************/ 7: 1.1.1.2 ! root 8: /* ! 9: Type definition ! 10: */ ! 11: typedef double far * PDBL; ! 12: ! 13: ! 14: ! 15: /* ! 16: Resource Ids for Linefractal application ! 17: */ ! 18: ! 19: /* resources loaded via WinCreateStdWindow */ ! 20: #define IDR_LINEFRACTAL 0x01 ! 21: ! 22: /* pointers */ ! 23: #define IDR_TRACKINGPTR 0x10 ! 24: #define IDR_PASTINGPTR 0x11 ! 25: #define IDR_KOCH0 0x12 ! 26: #define IDR_KOCH1 0x13 ! 27: #define IDR_KOCH2 0x14 ! 28: #define IDR_KOCH3 0x15 ! 29: ! 30: /* dialog boxes */ ! 31: #define IDR_ABOUTDLG 0x20 ! 32: #define IDR_TIMERDELAYDLG 0x21 ! 33: #define IDR_BITMAPPARAMSDLG 0x22 ! 34: #define IDR_SWITCHDELAYDLG 0x23 ! 35: #define IDR_LINEATTRSDLG 0x24 ! 36: #define IDR_MARKERATTRSDLG 0x25 ! 37: #define IDR_AREAATTRSDLG 0x26 ! 38: #define IDR_IMAGEATTRSDLG 0x27 ! 39: #define IDR_MISCATTRSDLG 0x28 ! 40: #define IDR_DIMENSIONSDLG 0x29 ! 41: #define IDR_PTRPREFERENCESDLG 0x2A 1.1 root 42: 43: 44: 45: 46: /**********************************************************************\ 1.1.1.2 ! root 47: * IDD_ - ID for Dialog item ! 48: * IDM_ - ID for Menu commands 1.1 root 49: * IDS - ID for String table 50: * IDT - ID for Timers 51: \**********************************************************************/ 52: 1.1.1.2 ! root 53: /* common dialog box control values */ ! 54: #define ID_NULL -1 ! 55: #define IDD_OK -2 ! 56: #define IDD_CANCEL -3 ! 57: ! 58: /* redraw timer delay */ ! 59: #define IDD_MINDELAY 0x001 ! 60: #define IDD_MAXDELAY 0x002 ! 61: ! 62: /* bitmap parameters */ ! 63: #define IDD_BMCX 0x010 ! 64: #define IDD_BMCY 0x011 ! 65: #define IDD_BMPLANES 0x012 ! 66: #define IDD_BMBPP 0x013 ! 67: ! 68: /* thread-switch timer delay */ ! 69: #define IDD_SWITCHDELAY 0x020 ! 70: ! 71: /* line attributes */ ! 72: #define IDD_LINECOLOR 0x030 ! 73: #define IDD_LINEMIX 0x031 ! 74: #define IDD_LINEWIDTH 0x032 ! 75: #define IDD_LINEGEOMWIDTH 0x033 ! 76: #define IDD_LINETYPE 0x034 ! 77: #define IDD_LINEEND 0x035 ! 78: #define IDD_LINEJOIN 0x036 ! 79: ! 80: /* marker attributes */ ! 81: #define IDD_MARKCOLOR 0x040 ! 82: #define IDD_MARKBACKCOLOR 0x041 ! 83: #define IDD_MARKMIX 0x042 ! 84: #define IDD_MARKBACKMIX 0x043 ! 85: #define IDD_MARKSET 0x044 ! 86: #define IDD_MARKSYMBOL 0x045 ! 87: #define IDD_MARKCELLWIDTH 0x046 ! 88: #define IDD_MARKCELLHEIGHT 0x047 ! 89: ! 90: /* area attributes */ ! 91: #define IDD_AREACOLOR 0x050 ! 92: #define IDD_AREABACKCOLOR 0x051 ! 93: #define IDD_AREAMIX 0x052 ! 94: #define IDD_AREABACKMIX 0x053 ! 95: #define IDD_AREASET 0x054 ! 96: #define IDD_AREASYMBOL 0x055 ! 97: #define IDD_AREAREFX 0x056 ! 98: #define IDD_AREAREFY 0x057 ! 99: ! 100: /* image attributes */ ! 101: #define IDD_IMAGECOLOR 0x060 ! 102: #define IDD_IMAGEBACKCOLOR 0x061 ! 103: #define IDD_IMAGEMIX 0x062 ! 104: #define IDD_IMAGEBACKMIX 0x063 ! 105: ! 106: /* miscellaneous fractal attributes */ ! 107: #define IDD_RECURSION 0x070 ! 108: #define IDD_CPTMAX 0x071 ! 109: #define IDD_NUMSIDES 0x072 ! 110: #define IDD_ROTATION 0x073 ! 111: ! 112: /* fractal dimensions */ ! 113: #define IDD_XOFF 0x080 ! 114: #define IDD_YOFF 0x081 ! 115: #define IDD_XSCALE 0x082 ! 116: #define IDD_YSCALE 0x083 ! 117: ! 118: /* pointer preferences */ ! 119: #define IDD_PTRTHRESHOLD 0x090 ! 120: #define IDD_USERPTR0 0x091 ! 121: #define IDD_USERPTR1 0x092 ! 122: #define IDD_USERPTR2 0x093 ! 123: #define IDD_USERPTR3 0x094 ! 124: ! 125: ! 126: ! 127: ! 128: /* menus */ ! 129: ! 130: #define IDM_FILE 0x100 ! 131: #define IDM_LOAD 0x101 ! 132: #define IDM_SAVE 0x102 ! 133: #define IDM_ABOUT 0x103 ! 134: ! 135: #define IDM_EDIT 0x200 ! 136: #define IDM_SELECT 0x201 ! 137: #define IDM_SELECTALL 0x202 ! 138: #define IDM_CUT 0x203 ! 139: #define IDM_COPY 0x204 ! 140: #define IDM_PASTE 0x205 ! 141: #define IDM_USECLIPBRD 0x206 ! 142: #define IDM_PASTES 0x207 ! 143: #define IDM_PASTEDSA 0x208 ! 144: #define IDM_PASTEDSO 0x209 ! 145: #define IDM_PASTEDSX 0x20A ! 146: #define IDM_PASTESN 0x20B ! 147: #define IDM_PASTEDSAN 0x20C ! 148: #define IDM_PASTEDSON 0x20D ! 149: #define IDM_PASTEDSXN 0x20E ! 150: ! 151: #define IDM_THREAD 0x300 ! 152: #define IDM_NEWTHREAD 0x310 ! 153: #define IDM_DCDIRECT 0x311 ! 154: #define IDM_DCMEMORY 0x312 ! 155: #define IDM_DCPOSTSCRIPT 0x313 ! 156: #define IDM_DCPROPRINTER 0x314 ! 157: #define IDM_THREADTOTOP 0x320 ! 158: #define IDM_THR0TOTOP 0x321 ! 159: #define IDM_THR1TOTOP 0x322 ! 160: #define IDM_THR2TOTOP 0x323 ! 161: #define IDM_THR3TOTOP 0x324 ! 162: #define IDM_THR4TOTOP 0x325 ! 163: #define IDM_THR5TOTOP 0x326 ! 164: #define IDM_THR6TOTOP 0x327 ! 165: #define IDM_THR7TOTOP 0x328 ! 166: #define IDM_THR8TOTOP 0x329 ! 167: #define IDM_THR9TOTOP 0x32A ! 168: #define IDM_EDITTHREADPARAMS 0x330 ! 169: #define IDM_KILLTOPTHREAD 0x340 ! 170: #define IDM_KILLALLTHREADS 0x350 ! 171: #define IDM_AUTOSWITCH 0x360 ! 172: #define IDM_SWITCHDELAY 0x370 ! 173: #define IDM_UPDATEMENUS 0x380 ! 174: #define IDM_THREADINHERITANCE 0x390 ! 175: ! 176: #define IDM_CONTROL 0x400 ! 177: #define IDM_REDRAW 0x401 ! 178: #define IDM_ABORT 0x402 ! 179: #define IDM_CLEARBITMAP 0x403 ! 180: #define IDM_COPYBITMAPTOSCREEN 0x404 ! 181: #define IDM_SQUAREBITMAP 0x405 ! 182: #define IDM_RESIZEBITMAPTOWINDOW 0x406 ! 183: #define IDM_MOUSECHANGESRECURSION 0x407 ! 184: #define IDM_ANIMATEPTR 0x408 ! 185: #define IDM_PTRPREFERENCES 0x409 ! 186: #define IDM_TIMERDELAY 0x40A ! 187: ! 188: #define IDM_FRACTAL 0x500 ! 189: #define IDM_FRACREDRAW 0x501 ! 190: #define IDM_SHARKTOOTH 0x502 ! 191: #define IDM_SAWTOOTH 0x503 ! 192: #define IDM_KOCH 0x504 ! 193: #define IDM_SPACEFILLER 0x505 ! 194: #define IDM_STOVE 0x506 ! 195: #define IDM_SQUAREWAVE 0x507 ! 196: #define IDM_HOURGLASS 0x508 ! 197: ! 198: #define IDM_PRIMITIVE 0x600 ! 199: #define IDM_PRIMREDRAW 0x601 ! 200: #define IDM_POLYLINE 0x602 ! 201: #define IDM_POLYFILLET 0x603 ! 202: #define IDM_POLYSPLINE 0x604 ! 203: #define IDM_POLYMARKER 0x605 ! 204: #define IDM_PEANO 0x606 ! 205: ! 206: #define IDM_ATTRIBUTES 0x700 ! 207: #define IDM_ATTRREDRAW 0x701 ! 208: #define IDM_LINEATTRS 0x702 ! 209: #define IDM_MARKERATTRS 0x703 ! 210: #define IDM_AREAATTRS 0x704 ! 211: #define IDM_IMAGEATTRS 0x705 ! 212: #define IDM_MISCATTRS 0x706 ! 213: #define IDM_DIMENSIONS 0x707 ! 214: #define IDM_DRAGDIMS 0x708 ! 215: ! 216: #define IDM_ENVIRONMENT 0x800 ! 217: #define IDM_AUTORESIZE 0x801 ! 218: #define IDM_AUTOSELECTDIMS 0x802 ! 219: #define IDM_CLEARONREDRAW 0x803 ! 220: #define IDM_AUTOSTARTREDRAW 0x804 ! 221: #define IDM_COLLECTBOUNDS 0x805 ! 222: ! 223: ! 224: 1.1 root 225: 226: 1.1.1.2 ! root 227: #define IDS_TITLE 1 ! 228: #define IDT_AUTOSTARTREDRAW 1 ! 229: #define IDT_AUTOSWITCH 2 1.1 root 230: 231: 232: 233: 234: /************************************************************************ 235: * 236: * Constants 237: * 238: * Miscellaneous constants. 239: * 240: ************************************************************************/ 241: 1.1.1.2 ! root 242: #define CCHSTR 12 /* work buffer size for MyGetWindowLong, etc */ ! 243: ! 244: #define MAX_POINT_COUNT 0x10000/sizeof(POINTL) /* number of points buffered up */ 1.1 root 245: 246: #define PI 3.1415926 /* useful in computing angles */ 247: #define TWO_PI (2 * PI) /* ditto */ 248: 249: #define EOLIST 0 /* End-of-list marker for xform */ 250: 1.1.1.2 ! root 251: #define NUM_PTR_SHAPES 4 ! 252: ! 253: ! 254: ! 255: ! 256: /************************************************************************ ! 257: * ! 258: * Aspect ratio structure. ! 259: * ! 260: ************************************************************************/ ! 261: ! 262: typedef struct _aspect ! 263: { ! 264: LONG lHorz; ! 265: LONG lVert; ! 266: } ASPECT; ! 267: 1.1 root 268: 269: 270: 271: /************************************************************************ 272: * 273: * Line fractal transform structure. 274: * 275: * The structure LINEFRAC defines a transform for a single line 276: * segment within a linefractal similarity transform. A proper 277: * similarity transform would be a collection of segment transforms in 278: * the form of a linked list. 279: * 280: * next link to the next line segment 281: * angle relative angle in radians, positive being 282: * counterclockwise 1.1.1.2 ! root 283: * length relative length of a segment, as percentage of ! 284: * length segment on which transform was defined 1.1 root 285: * flip orientation of transform at a segment 286: * FALSE ==> rotate transform by angle[] 287: * TRUE ==> rotate transform by -angle[] 288: * (i.e. flip it) 289: * 290: ************************************************************************/ 291: 292: typedef struct _linefrac 293: { 294: struct _linefrac *next; 295: double angle; 1.1.1.2 ! root 296: double length; 1.1 root 297: BOOL flip; 298: } LINEFRAC; 299: typedef LINEFRAC *PLINEFRAC; 300: 301: 302: 303: 1.1.1.2 ! root 304: /************************************************************************ ! 305: * ! 306: * Transform-defaults structure. ! 307: * ! 308: ************************************************************************/ ! 309: ! 310: typedef struct ! 311: { ! 312: PLINEFRAC pXform; ! 313: double xOff; ! 314: double yOff; ! 315: double xScale; ! 316: double yScale; ! 317: USHORT usSides; ! 318: } XFORMDATA; ! 319: ! 320: ! 321: ! 322: ! 323: /************************************************************************ ! 324: * ! 325: * Private bitmap info header. This is to avoid having the extra ! 326: * cbFix space taken up in the per-thread data structure. I use this ! 327: * only to store the data that will go into the real BITMAPINFOHEADER ! 328: * structure later. ! 329: * ! 330: ************************************************************************/ ! 331: ! 332: typedef struct ! 333: { ! 334: USHORT cx; ! 335: USHORT cy; ! 336: USHORT cPlanes; ! 337: USHORT cBitCount; ! 338: } MYBMINFO; ! 339: ! 340: ! 341: ! 342: ! 343: #ifdef INCL_GLOBALS ! 344: #define INCL_THREADS ! 345: #endif 1.1 root 346: 1.1.1.2 ! root 347: #ifdef INCL_THREADS ! 348: /************************************************************************ ! 349: * ! 350: * Per-thread overhead structure. ! 351: * ! 352: ************************************************************************/ ! 353: ! 354: typedef struct _threadoh ! 355: { ! 356: /* environment preferences */ 1.1 root 357: 1.1.1.2 ! root 358: BOOL fAutoSizePS; /* PS resized on various events */ ! 359: BOOL fAutoSelectDims; /* scale and offset from fractal defaults */ ! 360: BOOL fClearOnRedraw; /* clear surface at start of redraw */ ! 361: BOOL fAutoStartRedraw;/* random automatic redraw enabled */ ! 362: BOOL fCollectBounds; /* collect bounds on primitives */ ! 363: ! 364: BOOL fFracRedraw; /* redraw if fractal similarity xform changes */ ! 365: BOOL fPrimRedraw; /* redraw if primitive changes */ ! 366: BOOL fAttrRedraw; /* redraw if any attributes change */ ! 367: ! 368: /* fractal attributes */ ! 369: ! 370: LINEBUNDLE lb; ! 371: ULONG flLineAttrs; ! 372: #define LFA_LINECOLOR LBB_COLOR ! 373: #define LFA_LINEMIX LBB_MIX_MODE ! 374: #define LFA_LINEWIDTH LBB_WIDTH ! 375: #define LFA_LINEGEOMWIDTH LBB_GEOM_WIDTH ! 376: #define LFA_LINETYPE LBB_TYPE ! 377: #define LFA_LINEEND LBB_END ! 378: #define LFA_LINEJOIN LBB_JOIN ! 379: #define LFA_LINEALL (LBB_COLOR|LBB_MIX_MODE|LBB_WIDTH|LBB_GEOM_WIDTH|\ ! 380: LBB_TYPE|LBB_END|LBB_JOIN) ! 381: ! 382: ! 383: MARKERBUNDLE mb; ! 384: ULONG flMarkerAttrs; ! 385: #define LFA_MARKCOLOR MBB_COLOR ! 386: #define LFA_MARKBACKCOLOR MBB_BACK_COLOR ! 387: #define LFA_MARKMIX MBB_MIX_MODE ! 388: #define LFA_MARKBACKMIX MBB_BACK_MIX_MODE ! 389: #define LFA_MARKSET MBB_SET ! 390: #define LFA_MARKSYMBOL MBB_SYMBOL ! 391: #define LFA_MARKCELLWIDTH MBB_BOX /* part of sizfxCell field */ ! 392: #define LFA_MARKCELLHEIGHT MBB_BOX /* part of sizfxCell field */ ! 393: #define LFA_MARKALL (MBB_COLOR|MBB_BACK_COLOR|MBB_MIX_MODE|MBB_BACK_MIX_MODE|\ ! 394: MBB_SET|MBB_SYMBOL|MBB_BOX) ! 395: ! 396: ! 397: AREABUNDLE ab; ! 398: ULONG flAreaAttrs; ! 399: #define LFA_AREACOLOR ABB_COLOR ! 400: #define LFA_AREABACKCOLOR ABB_BACK_COLOR ! 401: #define LFA_AREAMIX ABB_MIX_MODE ! 402: #define LFA_AREABACKMIX ABB_BACK_MIX_MODE ! 403: #define LFA_AREASET ABB_SET ! 404: #define LFA_AREASYMBOL ABB_SYMBOL ! 405: #define LFA_AREAREFX ABB_REF_POINT /* part of ptlRefPoint field */ ! 406: #define LFA_AREAREFY ABB_REF_POINT /* part of ptlRefPoint field */ ! 407: #define LFA_AREAALL (ABB_COLOR|ABB_BACK_COLOR|ABB_MIX_MODE|ABB_BACK_MIX_MODE|\ ! 408: ABB_SET|ABB_SYMBOL|ABB_REF_POINT) ! 409: ! 410: ! 411: IMAGEBUNDLE ib; ! 412: ULONG flImageAttrs; ! 413: #define LFA_IMAGECOLOR IBB_COLOR ! 414: #define LFA_IMAGEBACKCOLOR IBB_BACK_COLOR ! 415: #define LFA_IMAGEMIX IBB_MIX_MODE ! 416: #define LFA_IMAGEBACKMIX IBB_BACK_MIX_MODE ! 417: #define LFA_IMAGEALL (IBB_COLOR|IBB_BACK_COLOR|IBB_MIX_MODE|IBB_BACK_MIX_MODE) ! 418: ! 419: ! 420: /* miscellaneous other attributes */ ! 421: ! 422: USHORT usCurPrim; /* primitive to draw with */ ! 423: USHORT usCurXform; /* fractal to draw with */ ! 424: USHORT usRecursion; /* level of recursion at which to draw */ ! 425: USHORT cptMax; /* max batch size for point buffer */ ! 426: USHORT usPolygonSides; /* number of sides on polygonal frame */ ! 427: double dblRotation; /* rotation in radians of image */ ! 428: double dblXOff; /* offset expressed as percentage of surface extents */ ! 429: double dblYOff; ! 430: double dblXScale; /* scale expressed as percentage of surface extents */ ! 431: double dblYScale; ! 432: ULONG cxWCS; /* dimensions of drawing in world space */ ! 433: ULONG cyWCS; ! 434: ! 435: ULONG flMiscAttrs; ! 436: #define LFA_CURPRIM 0x0001L ! 437: #define LFA_CURXFORM 0x0002L ! 438: #define LFA_RECURSION 0x0004L ! 439: #define LFA_POLYGONSIDES 0x0008L ! 440: #define LFA_CPTMAX 0x0010L ! 441: #define LFA_XOFF 0x0020L ! 442: #define LFA_YOFF 0x0040L ! 443: #define LFA_XSCALE 0x0080L ! 444: #define LFA_YSCALE 0x0100L ! 445: #define LFA_ROTATION 0x0200L ! 446: #define LFA_CXWCS 0x0400L ! 447: #define LFA_CYWCS 0x0800L ! 448: ! 449: #define LFA_MISCALL 0x0FFFL ! 450: ! 451: ! 452: /* fixed per-thread overhead */ ! 453: ! 454: USHORT dcType; /* code identifying type of DC */ ! 455: RECTL rcl; /* surface dimensions as a rectangle */ ! 456: USHORT cPlanes; /* if bitmap, number of color planes */ ! 457: USHORT cBitCount; /* if bitmap, number of color bits per pel */ ! 458: ASPECT AspectRatio; /* DC's aspect ratio */ ! 459: ! 460: ! 461: /******************************************************************** ! 462: * ! 463: * Per-process per-thread overhead. ! 464: * ! 465: * Data after this point should not be saved ! 466: * as part of a fractal context. ! 467: * ! 468: ********************************************************************/ ! 469: ! 470: TID tid; /* thread id */ ! 471: SEL selStack; /* thread stack selector */ ! 472: HDC hdc; ! 473: HBITMAP hbm; ! 474: HPS hps; ! 475: LONG lSemRedraw; /* redraw semaphore */ ! 476: BOOL fInterrupted; /* fractal suicide flag recognized in recursion */ ! 477: BOOL fTimeToDie; /* thread suicide flag */ ! 478: BOOL fUpdateAttrs; /* TRUE --> new attributes since redraw */ ! 479: BOOL fBusy; /* TRUE --> not waiting on semaphore */ ! 480: PPOINTL pptl; /* fractal point buffer */ ! 481: ULONG cptl; /* number of points in buffer */ ! 482: RECTL rclBounds; /* bounds of last primitive drawn */ ! 483: double x; /* current position */ ! 484: double y; ! 485: PMATRIXLF pmatlf; /* --> matrices for each side of ngon */ ! 486: ! 487: } THR; ! 488: typedef THR *PTHR; ! 489: #endif 1.1 root 490: 491: 492: 493: 1.1.1.2 ! root 494: #ifdef INCL_GLOBALS ! 495: /************************************************************************ ! 496: * ! 497: * Global data structure. This makes it easier to save the state of ! 498: * the program to a file. ! 499: * ! 500: ************************************************************************/ ! 501: ! 502: #define MAX_THREADS 10 ! 503: ! 504: typedef struct _globaldata ! 505: { ! 506: /******************************************************************** ! 507: * ! 508: * LineFrac session data. ! 509: * ! 510: * The following can be saved to a file to record the user's ! 511: * session. ! 512: * ! 513: ********************************************************************/ ! 514: ! 515: BOOL fAutoSwitch; /* TRUE --> automatically cycle through threads */ ! 516: BOOL fUpdateMenusOnThreadSwitch;/* TRUE --> per-thread menu items not updated during animation */ ! 517: BOOL fThreadInheritance; /* TRUE --> new threads are copies of top one */ ! 518: USHORT usSwitchDelay; /* delay between automatic thread switches */ ! 519: USHORT usMinTimerDelay; /* lower limit of random redraw delay */ ! 520: USHORT usMaxTimerDelay; /* upper limit of random redraw delay */ ! 521: BOOL fMouseChangesRecursion; /* TRUE --> mouse clicks change recursion */ ! 522: BOOL fAnimatePtr; /* TRUE --> pointer changes with mouse movements */ ! 523: USHORT usUserPtr; /* pointer to use when not animated */ ! 524: USHORT usPtrThreshold; /* relates to speed of pointer animation */ ! 525: USHORT usRopIndex; /* index into paste rop table */ ! 526: BOOL fUseClipbrd; /* TRUE --> edit operations use system clipboard */ ! 527: /* FALSE --> ... use private bitmaps */ ! 528: RECTL rcl; /* window dimensions */ ! 529: USHORT cThr; /* number of threads */ ! 530: USHORT iThrTop; /* top thread */ ! 531: ! 532: ! 533: /******************************************************************** ! 534: * ! 535: * Per-process global data. ! 536: * ! 537: * Data after this point should not be saved ! 538: * as part of a linefrac session. ! 539: * ! 540: ********************************************************************/ ! 541: ! 542: /* attributes: user's input is put here; thread picks it up when ! 543: * told to redraw. ! 544: */ ! 545: ! 546: BOOL fUpdateAttrs; /* TRUE --> no thread has read attrs yet */ ! 547: LINEBUNDLE lb; ! 548: ULONG flLineAttrs; ! 549: MARKERBUNDLE mb; ! 550: ULONG flMarkerAttrs; ! 551: AREABUNDLE ab; ! 552: ULONG flAreaAttrs; ! 553: IMAGEBUNDLE ib; ! 554: ULONG flImageAttrs; ! 555: USHORT usCurPrim; /* primitive to draw with */ ! 556: USHORT usCurXform; /* fractal to draw with */ ! 557: USHORT usRecursion; /* level of recursion at which to draw */ ! 558: USHORT cptMax; /* max batch size for point buffer */ ! 559: USHORT usPolygonSides; /* number of sides on polygonal frame */ ! 560: double dblRotation; /* rotation in radians of image */ ! 561: double dblXOff; /* offset expressed as percentage of surface extents */ ! 562: double dblYOff; ! 563: double dblXScale; /* scale expressed as percentage of surface extents */ ! 564: double dblYScale; ! 565: ULONG cxWCS; /* dimensions of drawing in world space */ ! 566: ULONG cyWCS; ! 567: ULONG flMiscAttrs; ! 568: ! 569: HAB hab; ! 570: HMQ hMsgQ; ! 571: HWND hwnd; ! 572: HWND hwndFrame; ! 573: HPOINTER hptr[NUM_PTR_SHAPES]; /* array of pointer shapes to animate */ ! 574: HPOINTER hptrTrack; /* pointer used when dragging a new rect */ ! 575: HPOINTER hptrPaste; /* pointer used when dragging paste rect */ ! 576: HPOINTER hptrWait; /* hourglass pointer for when top thread is busy */ ! 577: USHORT usPtrIncr; /* +1 or -1, so pointer doesn't wrap in array */ ! 578: USHORT usPtrCounter; /* counts WM_MOUSEMOVE messages */ ! 579: USHORT usCurPtr; /* index into pointer array of current one */ ! 580: BOOL fFirstThread; /* TRUE --> no threads initialized yet */ ! 581: BOOL fTimerOn; /* TRUE --> auto redraw timer is on */ ! 582: HDC CutCopyDC; /* DC for cut/copy private bit storage */ ! 583: HPS CutCopyPS; /* PS for cut/copy private bit storage */ ! 584: HBITMAP CutCopyBM; /* BM for cut/copy private bit storage */ ! 585: RECTL rclSelect; /* most recently dragged selection rect */ ! 586: RECTL rclCutCopy; /* most recent cut/copy rect */ ! 587: ULONG ulPasteROP; /* BitBlt ROP to use when pasting */ ! 588: BOOL fHaveCutCopyDC; /* TRUE --> cut/copy DC exists */ ! 589: BOOL fTracking; /* TRUE --> dragging dimensions */ ! 590: BOOL fSelecting; /* TRUE --> dragging cut/copy rect */ ! 591: BOOL fPasting; /* TRUE --> dragging paste rect */ ! 592: BOOL fTempSelect; /* TRUE --> selection rect just dragged */ ! 593: BOOL fShowSelectRc; /* TRUE --> display selection rect */ ! 594: BOOL fHaveSelectRc; /* TRUE --> have valid selection rect */ ! 595: MYBMINFO bm; /* scratch space for various bitmap functions */ ! 596: PTHR pThrTop; /* top thread */ ! 597: PTHR aThr[MAX_THREADS];/* array of threads */ ! 598: ! 599: } GLOBALDATA; ! 600: #endif ! 601: ! 602: ! 603: ! 604: ! 605: /************************************************************************ ! 606: * ! 607: * Handy macros to eliminate some typing. ! 608: * ! 609: ************************************************************************/ ! 610: ! 611: #define TOGGLE_BOOL(x) ((x)=(!(x))) 1.1 root 612: 1.1.1.2 ! root 613: #ifdef INCL_WINDIALOGS 1.1 root 614: 1.1.1.2 ! root 615: #define SET_CHECK_BOX(x, y, z) \ ! 616: WinSendDlgItemMsg((x),(y),BM_SETCHECK, \ ! 617: MPFROM2SHORT((z),0),0L) ! 618: ! 619: #define TOGGLE_MENU_ITEM(x, y, z) \ ! 620: WinSendDlgItemMsg((x), FID_MENU, MM_SETITEMATTR, \ ! 621: MPFROM2SHORT((y),TRUE), \ ! 622: MPFROM2SHORT(MIA_CHECKED,(z)?MIA_CHECKED:NULL)) ! 623: ! 624: #define CHECK_MENU_ITEM(x, y) \ ! 625: WinSendDlgItemMsg((x), FID_MENU, MM_SETITEMATTR, \ ! 626: MPFROM2SHORT((y),TRUE), \ ! 627: MPFROM2SHORT(MIA_CHECKED,MIA_CHECKED)) ! 628: ! 629: #define UNCHECK_MENU_ITEM(x, y) \ ! 630: WinSendDlgItemMsg((x), FID_MENU, MM_SETITEMATTR, \ ! 631: MPFROM2SHORT((y),TRUE), \ ! 632: MPFROM2SHORT(MIA_CHECKED,NULL)) ! 633: ! 634: #define ENABLE_MENU_ITEM(x, y) \ ! 635: WinSendDlgItemMsg((x), FID_MENU, MM_SETITEMATTR, \ ! 636: MPFROM2SHORT((y),TRUE), \ ! 637: MPFROM2SHORT(MIA_DISABLED,NULL)) ! 638: ! 639: #define DISABLE_MENU_ITEM(x, y) \ ! 640: WinSendDlgItemMsg((x), FID_MENU, MM_SETITEMATTR, \ ! 641: MPFROM2SHORT((y),TRUE), \ ! 642: MPFROM2SHORT(MIA_DISABLED,MIA_DISABLED)) 1.1 root 643: 1.1.1.2 ! root 644: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.