DWORD RequestProc (DWORD dwNichts) { int *pBuffer; DWORD dwRet; HANDLE heventWait[2]; int iBeginLine, iEndLine; heventWait[0] = heventParentSend; heventWait[1] = heventDone; while (1) { dwRet = WaitForMultipleObjects (2, heventWait, FALSE, INFINITE); // heventDone fired, so we're exiting. if (dwRet == WAIT_OBJECT_0 + 1) break; pBuffer = (int *) GetMappedBuffer (hfileBuffer); // hfileBuffer is invalid. Just leave. if (!pBuffer) { Con_SafePrintf ("Invalid hfileBuffer\n"); break; } switch (pBuffer[0]) { case CCOM_WRITE_TEXT: // Param1 : Text pBuffer[0] = WriteText ((LPCTSTR) (pBuffer + 1)); break; case CCOM_GET_TEXT: // Param1 : Begin line // Param2 : End line iBeginLine = pBuffer[1]; iEndLine = pBuffer[2]; pBuffer[0] = ReadText ((LPTSTR) (pBuffer + 1), iBeginLine, iEndLine); break; case CCOM_GET_SCR_LINES: // No params pBuffer[0] = GetScreenBufferLines (&pBuffer[1]); break; case CCOM_SET_SCR_LINES: // Param1 : Number of lines pBuffer[0] = SetScreenBufferLines (pBuffer[1]); break; } ReleaseMappedBuffer (pBuffer); SetEvent (heventChildSend); } return 0; }
static unsigned _stdcall RequestProc( void *arg ) { int *pBuffer; DWORD dwRet; HANDLE heventWait[2]; int iBeginLine, iEndLine; heventWait[0] = heventParentSend; heventWait[1] = heventDone; for(;; ) { dwRet = WaitForMultipleObjects( 2, heventWait, FALSE, INFINITE ); // heventDone fired, so we're exiting. if( dwRet == WAIT_OBJECT_0 + 1 ) break; pBuffer = (int *) GetMappedBuffer( hfileBuffer ); // hfileBuffer is invalid. Just leave. if( !pBuffer ) { printf( "Invalid hfileBuffer\n" ); break; } switch( pBuffer[0] ) { case CCOM_WRITE_TEXT: // Param1 : Text pBuffer[0] = WriteText( (LPCTSTR) ( pBuffer + 1 ) ); break; case CCOM_GET_TEXT: // Param1 : Begin line // Param2 : End line iBeginLine = pBuffer[1]; iEndLine = pBuffer[2]; pBuffer[0] = ReadText( (LPTSTR) ( pBuffer + 1 ), iBeginLine, iEndLine ); break; case CCOM_GET_SCR_LINES: // No params pBuffer[0] = GetScreenBufferLines( &pBuffer[1] ); break; case CCOM_SET_SCR_LINES: // Param1 : Number of lines pBuffer[0] = SetScreenBufferLines( pBuffer[1] ); break; } ReleaseMappedBuffer( pBuffer ); SetEvent( heventChildSend ); } _endthreadex( 0 ); arg = NULL; // wsw : aiwa : shut up compiler return 0; }