|
|
1.1 ! root 1: /*** ! 2: *cpoly.cpp - Implementation of the CPoly object. ! 3: * ! 4: * Copyright (C) 1992, Microsoft Corporation. All Rights Reserved. ! 5: * Information Contained Herein Is Proprietary and Confidential. ! 6: * ! 7: *Purpose: ! 8: * This module implements the CPoly class. This class implements a ! 9: * number of methods and properties, and exposes them via IDispatch. ! 10: * ! 11: * This module is intended as a sample implementation of the IDispatch ! 12: * interface, and its purpose is to demonstrate how an object can ! 13: * expose methods and properties for programatic and cross-process ! 14: * access via the IDispatch interface. ! 15: * ! 16: *Implementation Notes: ! 17: * ! 18: *****************************************************************************/ ! 19: ! 20: #include <windows.h> ! 21: #include <ole2.h> ! 22: #if !defined(WIN32) ! 23: #include <olenls.h> ! 24: #endif ! 25: #include <dispatch.h> ! 26: ! 27: #include "statbar.h" ! 28: #include "cenumpt.h" ! 29: ! 30: #include "spoly.h" ! 31: #include "cpoint.h" ! 32: #include "cpoly.h" ! 33: ! 34: ! 35: // Adjust for WIN16/WIN32 synchronization ! 36: #if defined(WIN32) && !defined(OLE2FINAL) ! 37: #define E_FAIL E_UNSPEC ! 38: #endif ! 39: ! 40: ! 41: extern HWND g_hwndClient; ! 42: ! 43: extern CStatBar FAR* g_psb; ! 44: ! 45: extern BOOL g_fExitOnLastRelease; ! 46: ! 47: ! 48: // our global list of polygons. ! 49: // ! 50: POLYLINK FAR* g_ppolylink = (POLYLINK FAR*)NULL; ! 51: ! 52: // global count of polygons. ! 53: // ! 54: int g_cPoly = 0; ! 55: ! 56: ! 57: CPoly::CPoly() ! 58: { ! 59: m_refs = 0; ! 60: m_xorg = 0; ! 61: m_yorg = 0; ! 62: m_width = 0; ! 63: m_cPoints = 0; ! 64: ! 65: m_red = 0; ! 66: m_green = 0; ! 67: m_blue = 0; ! 68: ! 69: m_ptinfo = NULL; ! 70: ! 71: m_ppointlink = NULL; ! 72: m_ppointlinkLast = NULL; ! 73: } ! 74: ! 75: ! 76: /*** ! 77: *CPoly *CPoly::Create(void) ! 78: *Purpose: ! 79: * Create an instance of a CPoly object, and add it to the global ! 80: * list of polygons. ! 81: * ! 82: *Entry: ! 83: * None ! 84: * ! 85: *Exit: ! 86: * returns a polygon object, NULL the allocation failed. ! 87: * ! 88: ***********************************************************************/ ! 89: CPoly FAR* ! 90: CPoly::Create() ! 91: { ! 92: HRESULT hresult; ! 93: CPoly FAR* ppoly; ! 94: ITypeInfo FAR* ptinfo; ! 95: POLYLINK FAR* ppolylink; ! 96: extern INTERFACEDATA NEAR g_idataCPoly; ! 97: ! 98: ! 99: if((ppolylink = new FAR POLYLINK) == (POLYLINK FAR*)NULL) ! 100: return (CPoly FAR*)NULL; ! 101: ! 102: if((ppoly = new FAR CPoly()) == (CPoly FAR*)NULL) ! 103: return (CPoly FAR*)NULL; ! 104: ! 105: ppoly->AddRef(); ! 106: ! 107: // create and attach its TypeInfo ! 108: // ! 109: hresult = CreateDispTypeInfo(&g_idataCPoly, LOCALE_SYSTEM_DEFAULT, &ptinfo); ! 110: if(hresult != NOERROR) ! 111: goto LError0; ! 112: ! 113: ppoly->m_ptinfo = ptinfo; ! 114: ! 115: // push the new polygon onto the front of the polygon list. ! 116: // ! 117: ++g_cPoly; ! 118: ! 119: ppolylink->ppoly = ppoly; ! 120: ! 121: ppolylink->next = g_ppolylink; ! 122: g_ppolylink = ppolylink; ! 123: ! 124: SBprintf(g_psb, "#poly = %d", g_cPoly); ! 125: ! 126: return ppoly; ! 127: ! 128: ! 129: LError0:; ! 130: ppoly->Release(); ! 131: ! 132: return NULL; ! 133: } ! 134: ! 135: ! 136: //--------------------------------------------------------------------- ! 137: // IUnknown Methods ! 138: //--------------------------------------------------------------------- ! 139: ! 140: ! 141: STDMETHODIMP ! 142: CPoly::QueryInterface(REFIID riid, void FAR* FAR* ppv) ! 143: { ! 144: if(riid != IID_IUnknown) ! 145: if(riid != IID_IDispatch) ! 146: return ResultFromScode(E_NOINTERFACE); ! 147: ! 148: *ppv = this; ! 149: AddRef(); ! 150: return NOERROR; ! 151: } ! 152: ! 153: ! 154: STDMETHODIMP_(ULONG) ! 155: CPoly::AddRef() ! 156: { ! 157: return ++m_refs; ! 158: } ! 159: ! 160: ! 161: STDMETHODIMP_(ULONG) ! 162: CPoly::Release() ! 163: { ! 164: POLYLINK FAR* FAR* pppolylink, FAR* ppolylinkDead; ! 165: ! 166: if(--m_refs == 0){ ! 167: Reset(); // release all CPoints ! 168: ! 169: // remove ourselves from the global list of polygons ! 170: // ! 171: for( pppolylink = &g_ppolylink; ! 172: *pppolylink != NULL; ! 173: pppolylink = &(*pppolylink)->next) ! 174: { ! 175: if((*pppolylink)->ppoly == this){ ! 176: ppolylinkDead = *pppolylink; ! 177: *pppolylink = (*pppolylink)->next; ! 178: delete ppolylinkDead; ! 179: break; ! 180: } ! 181: } ! 182: ! 183: if(m_ptinfo != NULL){ ! 184: m_ptinfo->Release(); ! 185: } ! 186: ! 187: --g_cPoly; ! 188: ! 189: #ifndef _MAC ! 190: SBprintf(g_psb, "#poly = %d", g_cPoly); ! 191: #endif ! 192: ! 193: delete this; ! 194: return 0; ! 195: } ! 196: return m_refs; ! 197: } ! 198: ! 199: ! 200: //--------------------------------------------------------------------- ! 201: // IDispatch Methods ! 202: //--------------------------------------------------------------------- ! 203: ! 204: STDMETHODIMP ! 205: CPoly::GetTypeInfoCount(UINT FAR* pctinfo) ! 206: { ! 207: // This object has a single *introduced* interface ! 208: // ! 209: *pctinfo = 1; ! 210: ! 211: return NOERROR; ! 212: } ! 213: ! 214: ! 215: STDMETHODIMP ! 216: CPoly::GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo) ! 217: { ! 218: if(itinfo != 0) ! 219: return ResultFromScode(DISP_E_BADINDEX); ! 220: ! 221: m_ptinfo->AddRef(); ! 222: *pptinfo = m_ptinfo; ! 223: ! 224: return NOERROR; ! 225: } ! 226: ! 227: ! 228: /*** ! 229: *HRESULT CPoly::GetIDsOfNames(char**, UINT, LCID, LONG*) ! 230: *Purpose: ! 231: * This method translates the given array of names to a corresponding ! 232: * array of DISPIDs. ! 233: * ! 234: * This method deferrs to a common implementation shared by ! 235: * both the CPoly and CPoint objects. See the description of ! 236: * 'SPolyGetIDsOfNames()' in dispimpl.cpp for more information. ! 237: * ! 238: *Entry: ! 239: * rgszNames = pointer to an array of names ! 240: * cNames = the number of names in the rgszNames array ! 241: * lcid = the callers locale ID ! 242: * ! 243: *Exit: ! 244: * return value = HRESULT ! 245: * rgdispid = array of DISPIDs corresponding to the rgszNames array ! 246: * this array will contain -1 for each entry that is not known. ! 247: * ! 248: ***********************************************************************/ ! 249: STDMETHODIMP ! 250: CPoly::GetIDsOfNames( ! 251: REFIID riid, ! 252: char FAR* FAR* rgszNames, ! 253: UINT cNames, ! 254: LCID lcid, ! 255: DISPID FAR* rgdispid) ! 256: { ! 257: if(riid != IID_NULL) ! 258: return ResultFromScode(DISP_E_UNKNOWNINTERFACE); ! 259: ! 260: return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgdispid); ! 261: } ! 262: ! 263: ! 264: /*** ! 265: *HRESULT CPoly::Invoke(...) ! 266: *Purpose: ! 267: * Dispatch a method or property request for objects of type CPoly. ! 268: * ! 269: * see the IDispatch document for more information, and a general ! 270: * description of this method. ! 271: * ! 272: *Entry: ! 273: * dispidMember = the DISPID of the member being requested ! 274: * ! 275: * riid = reference to the interface ID of the interface on this object ! 276: * that the requested member belongs to. IID_NULL means to interpret ! 277: * the member as belonging to the implementation defined "default" ! 278: * or "primary" interface. ! 279: * ! 280: * lcid = the caller's locale ID ! 281: * ! 282: * wFlags = flags indicating the type of access being requested ! 283: * ! 284: * pdispparams = pointer to the DISPPARAMS struct containing the ! 285: * requested members arguments (if any) and its named parameter ! 286: * DISPIDs (if any). ! 287: * ! 288: *Exit: ! 289: * return value = HRESULT ! 290: * see the IDispatch spec for a description of possible success codes. ! 291: * ! 292: * pvarResult = pointer to a caller allocated VARIANT containing ! 293: * the members return value (if any). ! 294: * ! 295: * pexcepinfo = caller allocated exception info structure, this will ! 296: * be filled in only if an exception was raised that must be passed ! 297: * up through Invoke to an enclosing handler. ! 298: * ! 299: * puArgErr = pointer to a caller allocated UINT, that will contain the ! 300: * index of the offending argument if a DISP_E_TYPEMISMATCH error ! 301: * was returned indicating that one of the arguments was of an ! 302: * incorrect type and/or could not be reasonably coerced to a proper ! 303: * type. ! 304: * ! 305: ***********************************************************************/ ! 306: STDMETHODIMP ! 307: CPoly::Invoke( ! 308: DISPID dispidMember, ! 309: REFIID riid, ! 310: LCID lcid, ! 311: WORD wFlags, ! 312: DISPPARAMS FAR* pdispparams, ! 313: VARIANT FAR* pvarResult, ! 314: EXCEPINFO FAR* pexcepinfo, ! 315: UINT FAR* puArgErr) ! 316: { ! 317: if(riid != IID_NULL) ! 318: return ResultFromScode(DISP_E_UNKNOWNINTERFACE); ! 319: ! 320: return DispInvoke( ! 321: this, m_ptinfo, ! 322: dispidMember, wFlags, pdispparams, ! 323: pvarResult, pexcepinfo, puArgErr); ! 324: } ! 325: ! 326: ! 327: //--------------------------------------------------------------------- ! 328: // Introduced Methods ! 329: //--------------------------------------------------------------------- ! 330: ! 331: ! 332: /*** ! 333: *void CPoly::Draw(void) ! 334: *Purpose: ! 335: * Draw the polygon, using the current x/y origin and line width ! 336: * properties. ! 337: * ! 338: *Entry: ! 339: * None ! 340: * ! 341: *Exit: ! 342: * None ! 343: * ! 344: ***********************************************************************/ ! 345: void METHODCALLTYPE EXPORT ! 346: CPoly::Draw() ! 347: { ! 348: POINTLINK FAR* ppointlinkFirst, FAR* ppointlink; ! 349: ! 350: if((ppointlinkFirst = m_ppointlink) == (POINTLINK FAR*)NULL) ! 351: return; ! 352: ! 353: #ifdef _MAC /* { */ ! 354: ! 355: #else /* }{ */ ! 356: ! 357: HDC hdc; ! 358: RECT rect; ! 359: short xorg, yorg; ! 360: HPEN hpen, hpenOld; ! 361: ! 362: GetClientRect(g_hwndClient, &rect); ! 363: xorg = m_xorg + (short) rect.left; ! 364: yorg = m_yorg + (short) rect.top; ! 365: ! 366: hdc = GetDC(g_hwndClient); ! 367: hpen = CreatePen(PS_SOLID, m_width, RGB(m_red, m_green, m_blue)); ! 368: hpenOld = SelectObject(hdc, hpen); ! 369: ! 370: #ifdef WIN32 ! 371: MoveToEx(hdc, ! 372: xorg + ppointlinkFirst->ppoint->m_x, ! 373: yorg + ppointlinkFirst->ppoint->m_y, NULL); ! 374: #else ! 375: MoveTo(hdc, ! 376: xorg + ppointlinkFirst->ppoint->m_x, ! 377: yorg + ppointlinkFirst->ppoint->m_y); ! 378: #endif ! 379: ! 380: for(ppointlink = ppointlinkFirst->next; ! 381: ppointlink != (POINTLINK FAR*)NULL; ! 382: ppointlink = ppointlink->next) ! 383: { ! 384: LineTo(hdc, ! 385: xorg + ppointlink->ppoint->m_x, ! 386: yorg + ppointlink->ppoint->m_y); ! 387: } ! 388: ! 389: LineTo(hdc, ! 390: xorg + ppointlinkFirst->ppoint->m_x, ! 391: yorg + ppointlinkFirst->ppoint->m_y); ! 392: ! 393: SelectObject(hdc, hpenOld); ! 394: DeleteObject(hpen); ! 395: ! 396: ReleaseDC(g_hwndClient, hdc); ! 397: ! 398: #endif /* } */ ! 399: } ! 400: ! 401: ! 402: /*** ! 403: *void CPoly::Reset(void) ! 404: *Purpose: ! 405: * Release all points referenced by this poly. ! 406: * ! 407: *Entry: ! 408: * None ! 409: * ! 410: *Exit: ! 411: * None ! 412: * ! 413: ***********************************************************************/ ! 414: void METHODCALLTYPE EXPORT ! 415: CPoly::Reset() ! 416: { ! 417: POINTLINK FAR* ppointlink, FAR* ppointlinkNext; ! 418: ! 419: for(ppointlink = m_ppointlink; ! 420: ppointlink != (POINTLINK FAR*)NULL; ! 421: ppointlink = ppointlinkNext) ! 422: { ! 423: ppointlinkNext = ppointlink->next; ! 424: ppointlink->ppoint->Release(); ! 425: delete ppointlink; ! 426: } ! 427: ! 428: m_cPoints = 0; ! 429: m_ppointlink = NULL; ! 430: m_ppointlinkLast = NULL; ! 431: } ! 432: ! 433: ! 434: /*** ! 435: *HRESULT CPoly::AddPoint(short, short) ! 436: *Purpose: ! 437: * Add a CPoint with the given coordinates to the end of our current ! 438: * list of points. ! 439: * ! 440: *Entry: ! 441: * x,y = the x and y coordinates of the new point. ! 442: * ! 443: *Exit: ! 444: * return value = HRESULT ! 445: * ! 446: ***********************************************************************/ ! 447: HRESULT METHODCALLTYPE ! 448: CPoly::AddPoint(short x, short y) ! 449: { ! 450: CPoint FAR* ppoint; ! 451: POINTLINK FAR* ppointlink; ! 452: ! 453: ppoint = CPoint::Create(); ! 454: if(ppoint == (CPoint FAR*)NULL) ! 455: return ResultFromScode(E_OUTOFMEMORY); ! 456: ! 457: ppoint->SetX(x); ! 458: ppoint->SetY(y); ! 459: ! 460: ppointlink = new FAR POINTLINK; ! 461: if(ppointlink == (POINTLINK FAR*)NULL){ ! 462: delete ppoint; ! 463: return ResultFromScode(E_OUTOFMEMORY); ! 464: } ! 465: ! 466: ppointlink->ppoint = ppoint; ! 467: ppointlink->next = (POINTLINK FAR*)NULL; ! 468: ! 469: if(m_ppointlinkLast == (POINTLINK FAR*)NULL){ ! 470: m_ppointlink = m_ppointlinkLast = ppointlink; ! 471: }else{ ! 472: m_ppointlinkLast->next = ppointlink; ! 473: m_ppointlinkLast = ppointlink; ! 474: } ! 475: ! 476: ++m_cPoints; ! 477: ! 478: return NOERROR; ! 479: } ! 480: ! 481: ! 482: /*** ! 483: *IUnknown FAR* CPoly::EnumPoints(void); ! 484: *Purpose: ! 485: * Return and enumerator for the points in this polygon. ! 486: * ! 487: *Entry: ! 488: * None ! 489: * ! 490: *Exit: ! 491: * return value = HRESULT ! 492: * ! 493: * *ppenum = pointer to an IEnumVARIANT for the points in this polygon ! 494: * ! 495: ***********************************************************************/ ! 496: IUnknown FAR* METHODCALLTYPE EXPORT ! 497: CPoly::EnumPoints() ! 498: { ! 499: UINT i; ! 500: HRESULT hresult; ! 501: VARIANT var; ! 502: SAFEARRAY FAR* psa; ! 503: IUnknown FAR* punk; ! 504: CEnumPoint FAR* penum; ! 505: POINTLINK FAR* ppointlink; ! 506: SAFEARRAYBOUND rgsabound[1]; ! 507: ! 508: rgsabound[0].lLbound = 0; ! 509: rgsabound[0].cElements = m_cPoints; ! 510: ! 511: psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound); ! 512: if(psa == NULL){ ! 513: hresult = ResultFromScode(E_OUTOFMEMORY); ! 514: goto LError0; ! 515: } ! 516: ! 517: ppointlink = m_ppointlink; ! 518: for(i = 0; i < m_cPoints; ++i){ ! 519: LONG ix[1]; ! 520: ! 521: if(ppointlink == NULL){ ! 522: // this indicates an internal consistency error. ! 523: // (this test should probably be an assertion) ! 524: hresult = ResultFromScode(E_FAIL); ! 525: goto LError1; ! 526: } ! 527: ! 528: V_VT(&var) = VT_DISPATCH; ! 529: hresult = ppointlink->ppoint->QueryInterface( ! 530: IID_IDispatch, (void FAR* FAR*)&V_DISPATCH(&var)); ! 531: if(hresult != NOERROR) ! 532: goto LError1; ! 533: ! 534: ix[0] = i; ! 535: SafeArrayPutElement(psa, ix, &var); ! 536: ! 537: ppointlink = ppointlink->next; ! 538: } ! 539: ! 540: hresult = CEnumPoint::Create(psa, &penum); ! 541: if(hresult != NOERROR) ! 542: goto LError1; ! 543: ! 544: // ownership of the array has passed to the enumerator ! 545: psa = NULL; ! 546: ! 547: hresult = penum->QueryInterface(IID_IUnknown, (void FAR* FAR*)&punk); ! 548: if(hresult != NOERROR) ! 549: goto LError2; ! 550: ! 551: penum->Release(); ! 552: ! 553: return punk; ! 554: ! 555: LError2:; ! 556: penum->Release(); ! 557: ! 558: LError1:; ! 559: // destroy the array if we were not successful creating the enumerator. ! 560: if(psa != NULL) ! 561: SafeArrayDestroy(psa); ! 562: ! 563: LError0:; ! 564: return NULL; ! 565: } ! 566: ! 567: ! 568: short METHODCALLTYPE EXPORT ! 569: CPoly::GetXOrigin() ! 570: { ! 571: return m_xorg; ! 572: } ! 573: ! 574: void METHODCALLTYPE EXPORT ! 575: CPoly::SetXOrigin(short x) ! 576: { ! 577: m_xorg = x; ! 578: } ! 579: ! 580: short METHODCALLTYPE EXPORT ! 581: CPoly::GetYOrigin() ! 582: { ! 583: return m_yorg; ! 584: } ! 585: ! 586: void METHODCALLTYPE EXPORT ! 587: CPoly::SetYOrigin(short y) ! 588: { ! 589: m_yorg = y; ! 590: } ! 591: ! 592: short METHODCALLTYPE EXPORT ! 593: CPoly::GetWidth() ! 594: { ! 595: return m_width; ! 596: } ! 597: ! 598: ! 599: void METHODCALLTYPE EXPORT ! 600: CPoly::SetWidth(short width) ! 601: { ! 602: m_width = width; ! 603: } ! 604: ! 605: short METHODCALLTYPE EXPORT ! 606: CPoly::get_red() ! 607: { ! 608: return m_red; ! 609: } ! 610: ! 611: void METHODCALLTYPE EXPORT ! 612: CPoly::set_red(short red) ! 613: { ! 614: m_red = red; ! 615: } ! 616: ! 617: short METHODCALLTYPE EXPORT ! 618: CPoly::get_green() ! 619: { ! 620: return m_green; ! 621: } ! 622: ! 623: void METHODCALLTYPE EXPORT ! 624: CPoly::set_green(short green) ! 625: { ! 626: m_green = green; ! 627: } ! 628: ! 629: short METHODCALLTYPE EXPORT ! 630: CPoly::get_blue() ! 631: { ! 632: return m_blue; ! 633: } ! 634: ! 635: void METHODCALLTYPE EXPORT ! 636: CPoly::set_blue(short blue) ! 637: { ! 638: m_blue = blue; ! 639: } ! 640: ! 641: ! 642: /*** ! 643: *void CPoly::Dump(void) ! 644: *Purpose: ! 645: * Output a debug dump of this instance. ! 646: * ! 647: *Entry: ! 648: * None ! 649: * ! 650: *Exit: ! 651: * None ! 652: * ! 653: ***********************************************************************/ ! 654: void METHODCALLTYPE EXPORT ! 655: CPoly::Dump() ! 656: { ! 657: #ifdef _MAC ! 658: ! 659: // REVIEW: implement for the mac ! 660: ! 661: #else ! 662: ! 663: char buffer[80]; ! 664: POINTLINK FAR* ppointlink; ! 665: ! 666: wsprintf(buffer, "CPoly(0x%x) =\n", (int)this); ! 667: OutputDebugString(buffer); ! 668: ! 669: wsprintf(buffer, ! 670: " xorg = %d, yorg = %d, width = %d, rgb = {%d,%d,%d}\n points = ", ! 671: m_xorg, m_yorg, m_width, ! 672: get_red(), ! 673: get_green(), ! 674: get_blue()); ! 675: ! 676: OutputDebugString(buffer); ! 677: ! 678: for(ppointlink = m_ppointlink; ! 679: ppointlink != (POINTLINK FAR*)NULL; ! 680: ppointlink = ppointlink->next) ! 681: { ! 682: wsprintf(buffer, "{%d,%d}", ! 683: ppointlink->ppoint->GetX(), ! 684: ppointlink->ppoint->GetY()); ! 685: OutputDebugString(buffer); ! 686: ! 687: wsprintf(buffer, " "); ! 688: OutputDebugString(buffer); ! 689: } ! 690: wsprintf(buffer, "\n"); ! 691: OutputDebugString(buffer); ! 692: ! 693: #endif ! 694: } ! 695: ! 696: /*** ! 697: *void CPoly::PolyDraw(void) ! 698: *Purpose: ! 699: * Draw all polygons. ! 700: * ! 701: *Entry: ! 702: * None ! 703: * ! 704: *Exit: ! 705: * None ! 706: * ! 707: ***********************************************************************/ ! 708: void ! 709: CPoly::PolyDraw() ! 710: { ! 711: POLYLINK FAR* polylink; ! 712: ! 713: for(polylink = g_ppolylink; ! 714: polylink != (POLYLINK FAR*)NULL; ! 715: polylink = polylink->next) ! 716: { ! 717: polylink->ppoly->Draw(); ! 718: } ! 719: } ! 720: ! 721: ! 722: /*** ! 723: *void PolyTerm(void) ! 724: *Purpose: ! 725: * Release all polygons. ! 726: * ! 727: *Entry: ! 728: * None ! 729: * ! 730: *Exit: ! 731: * None ! 732: * ! 733: ***********************************************************************/ ! 734: void ! 735: CPoly::PolyTerm() ! 736: { ! 737: POLYLINK FAR* ppolylink; ! 738: POLYLINK FAR* ppolylinkNext; ! 739: ! 740: for(ppolylink = g_ppolylink; ! 741: ppolylink != (POLYLINK FAR*)NULL; ! 742: ppolylink = ppolylinkNext) ! 743: { ! 744: ppolylinkNext = ppolylink->next; ! 745: ppolylink->ppoly->Release(); ! 746: delete ppolylink; ! 747: } ! 748: } ! 749: ! 750: ! 751: /*** ! 752: *void PolyDump(void) ! 753: *Purpose: ! 754: * Invoke the debug Dump() method on all polygons were currently ! 755: * holding on to. ! 756: * ! 757: *Entry: ! 758: * None ! 759: * ! 760: *Exit: ! 761: * None ! 762: * ! 763: ***********************************************************************/ ! 764: void ! 765: CPoly::PolyDump() ! 766: { ! 767: POLYLINK FAR* ppolylink; ! 768: ! 769: if(g_ppolylink == (POLYLINK FAR*)NULL){ ! 770: OutputDebugString("\t(none)\n"); ! 771: return; ! 772: } ! 773: ! 774: for(ppolylink = g_ppolylink; ! 775: ppolylink != (POLYLINK FAR*)NULL; ! 776: ppolylink = ppolylink->next) ! 777: { ! 778: ppolylink->ppoly->Dump(); ! 779: } ! 780: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.