summaryrefslogtreecommitdiffstats
path: root/private/oleutest/balls/common/ccubes.cxx
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/oleutest/balls/common/ccubes.cxx
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to '')
-rw-r--r--private/oleutest/balls/common/ccubes.cxx314
1 files changed, 314 insertions, 0 deletions
diff --git a/private/oleutest/balls/common/ccubes.cxx b/private/oleutest/balls/common/ccubes.cxx
new file mode 100644
index 000000000..13606fea8
--- /dev/null
+++ b/private/oleutest/balls/common/ccubes.cxx
@@ -0,0 +1,314 @@
+//+-------------------------------------------------------------------------
+//
+// Microsoft Windows
+// Copyright (C) Microsoft Corporation, 1992 - 1992.
+//
+// File: cubes.cxx
+//
+// Contents: implementations for CCube
+//
+// Functions:
+// CCube::CCube
+// CCube::~CCube
+// CCube::QueryInterface
+// CCube::CreateCube
+// CCube::MoveCube
+// CCube::GetCubePos
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+
+#include <pch.cxx>
+#pragma hdrstop
+#include <ccubes.hxx> // class definition
+#include <iballs.h> // IBalls interface definiton
+
+
+#define CUBE_WIDTH 20
+
+
+//+-------------------------------------------------------------------------
+//
+// Method: CCube::CCube
+//
+// Synopsis: Creates the application window
+//
+// Arguments: [pisb] - ISysBind instance
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+CCube::CCube(void)
+ : _xPos(CUBE_UNDEF),
+ _yPos(CUBE_UNDEF)
+{
+ CreateCube(0,0);
+ GlobalRefs(TRUE);
+
+ ENLIST_TRACKING(CCube);
+}
+
+
+//+-------------------------------------------------------------------------
+//
+// Method: CCube::~CCube
+//
+// Synopsis: Cleans up object
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+CCube::~CCube(void)
+{
+ GlobalRefs(FALSE);
+
+ // automatic actions are enough
+}
+
+
+//+-------------------------------------------------------------------------
+//
+// Method: CCube::QueryInterface
+//
+// Synopsis: Gets called when a WM_COMMAND message received.
+//
+// Arguments: [ifid] - interface instance requested
+// [ppunk] - where to put pointer to interface instance
+//
+// Returns: S_OK or ERROR_BAD_COMMAND
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+STDMETHODIMP CCube::QueryInterface(REFIID riid, void **ppunk)
+{
+ SCODE sc = E_NOINTERFACE;
+ *ppunk = NULL;
+
+ if (IsEqualIID(riid, IID_IUnknown) ||
+ IsEqualIID(riid, IID_ICube))
+ {
+ // Increase the reference count
+ *ppunk = (void *)(ICube *) this;
+ AddRef();
+
+ // Set to success
+ sc = S_OK;
+ }
+
+ return sc;
+}
+
+
+//+-------------------------------------------------------------------------
+//
+// Method: CCube::CreateCube
+//
+// Synopsis: Creates a Cube on the screen
+//
+// Arguments: [xPos] - x position for new Cube
+// [yPos] - y position for new Cube
+//
+// Returns: S_OK or ERROR_BAD_COMMAND
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+STDMETHODIMP CCube::CreateCube(ULONG xPos, ULONG yPos)
+{
+ SCODE sc = E_FAIL;
+
+ if (xPos != (ULONG) -1)
+ {
+ // Update data
+ _xPos = xPos;
+ _yPos = yPos;
+ sc = S_OK;
+
+ // Format message for the screen
+ Display(TEXT("Create Cube xPos = %ld yPos = %ld\n"), xPos, yPos);
+ }
+
+ return sc;
+}
+
+
+//+-------------------------------------------------------------------------
+//
+// Function: CCube::MoveCube
+//
+// Synopsis: Move the Cube from one position to another
+//
+// Arguments: [xPos] - new x position for the Cube
+// [yPos] - new y position for the Cube
+//
+// Returns: S_OK
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+STDMETHODIMP CCube::MoveCube(ULONG xPos, ULONG yPos)
+{
+ // Set the position
+ _xPos = xPos;
+ _yPos = yPos;
+
+ // Format message for the screen
+ Display(TEXT("Move Cube xPos = %ld yPos = %ld\n"), xPos, yPos);
+ return S_OK;
+}
+
+
+//+-------------------------------------------------------------------------
+//
+// Function: CCube::GetCubePos
+//
+// Synopsis: Get the current position of the Cube
+//
+// Arguments: [hWindow] - handle for the window
+//
+// Returns: S_OK
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+STDMETHODIMP CCube::GetCubePos(ULONG *pxPos, ULONG *pyPos)
+{
+ *pxPos = _xPos;
+ *pyPos = _yPos;
+
+ // Format message for the screen
+ Display(TEXT("Get Cube Pos xPos = %ld yPos = %ld\n"), _xPos, _yPos);
+ return S_OK;
+}
+
+
+
+//+-------------------------------------------------------------------------
+//
+// Function: CCube::Contains
+//
+// Synopsis: Check if this Cube is contained in the given cube.
+//
+// Arguments: [hWindow] - handle for the window
+// [pICube] - cube to compare with
+//
+// Returns: S_OK
+//
+// History: 06-Aug-92 Ricksa Created
+//
+//--------------------------------------------------------------------------
+STDMETHODIMP CCube::Contains(IBalls *pIBall)
+{
+ ULONG xPos, yPos;
+
+ SCODE sc = pIBall->GetBallPos(&xPos, &yPos);
+
+ if (SUCCEEDED(sc))
+ {
+ if ((abs(xPos - _xPos) < CUBE_WIDTH) &&
+ (abs(yPos - _yPos) < CUBE_WIDTH))
+ {
+ // Format message for the screen
+ Display(TEXT("Cube contains in Ball. xPos = %ld yPos = %ld\n"), xPos, yPos);
+ }
+ else
+ {
+ // Format message for the screen
+ Display(TEXT("Ball Outside Cube. xPos = %ld yPos = %ld\n"), xPos, yPos);
+ }
+ }
+
+ return sc;
+}
+
+
+//+-------------------------------------------------------------------------
+//
+// Function: CCube::SimpleCall
+//
+// Synopsis: checks the TID and LID to make sure they match the callers.
+//
+// Arguments:
+//
+// Returns: S_OK
+//
+// History: 16-Jan-96 RickHi Created
+//
+//--------------------------------------------------------------------------
+STDMETHODIMP CCube::SimpleCall(DWORD pidCaller, DWORD tidCaller, GUID lidCaller)
+{
+ HRESULT hr = S_OK;
+
+ GUID lid;
+ HRESULT hr2 = CoGetCurrentLogicalThreadId(&lid);
+
+ if (SUCCEEDED(hr2))
+ {
+ if (!IsEqualGUID(lid, lidCaller))
+ {
+ // LIDs dont match, error
+ hr |= 0x80000001;
+ }
+ }
+ else
+ {
+ return hr2;
+ }
+
+ DWORD tid;
+ hr2 = CoGetCallerTID(&tid);
+
+ if (SUCCEEDED(hr2))
+ {
+ if (pidCaller == GetCurrentProcessId())
+ {
+ // if in same process, CoGetCallerTID should return S_OK
+ if (hr2 != S_OK)
+ {
+ hr |= 0x80000002;
+ }
+ }
+ else
+ {
+ // if in different process, CoGetCallerTID should return S_FALSE
+ if (hr2 != S_FALSE)
+ {
+ hr |= 0x80000004;
+ }
+ }
+ }
+ else
+ {
+ return hr2;
+ }
+
+ return hr;
+}
+
+
+
+STDMETHODIMP CCube::PrepForInputSyncCall(IUnknown *pUnkIn)
+{
+ // just remember the input ptr
+
+ _pUnkIn = pUnkIn;
+ _pUnkIn->AddRef();
+
+ return S_OK;
+}
+
+STDMETHODIMP CCube::InputSyncCall()
+{
+ // just attempt to release an Interface Pointer inside an InputSync
+ // method.
+
+ if (_pUnkIn)
+ {
+ if (_pUnkIn->Release() != 0)
+ return RPC_E_CANTCALLOUT_ININPUTSYNCCALL;
+ }
+
+ return S_OK;
+}