TRACE(( "notifyThread got rc %d, quitting\n", (int)rc));
PRINTF( "notifyThread got rc %d, quitting\n", (int)rc);
void fsTree::Notify(){   // Create PM if necessary (hackish, sorry)   HAB hab;   HMQ hmq;   if( mNeedsPM)   {      hab = WinInitialize( 0);      hmq = WinCreateMsgQueue( hab, 0);   }   for(;;)   {      CBPacket pkt;      APIRET rc = mCBQueue.Read( &pkt);      if( rc)      {         TRACE(( "notifyThread got rc %d, quitting\n", (int)rc));         break;      }      switch( pkt.mCmd)      {         case CBPacket::CreateRoot:            mCallbacks->CreateRoot( pkt.mData.mDir);            break;         case CBPacket::CreateNode:            mCallbacks->CreateDir( pkt.mData.mDir);            break;         case CBPacket::DestroyNode:            mCallbacks->DestroyDir( pkt.mData.mDir);            delete pkt.mData.mDir;            break;         case CBPacket::CreateLeaf:            mCallbacks->CreateFile( pkt.mData.mFile);            break;         case CBPacket::DestroyLeaf:            mCallbacks->DestroyFile( pkt.mData.mFile);            delete pkt.mData.mFile;            break;         case CBPacket::ScanComplete:            mCallbacks->InitialScanComplete();            if( mBuildMode == FS::Synchronous)               DosPostEventSem( mHEV);            break;         default:             assert(0);            break;      }   }   if( mNeedsPM)   {      WinDestroyMsgQueue( hmq);      WinTerminate( hab);   }}