void CAscendedObjectList::WriteToStream (IWriteStream *pStream) // WriteToStream // // Write { int i; DWORD dwCount = m_List.GetCount(); pStream->Write((char *)&dwCount, sizeof(DWORD)); for (i = 0; i < (int)dwCount; i++) { try { m_List[i]->WriteToStream(pStream); } catch (...) { CString sError = CONSTLIT("Unable to save ascended object:\r\n"); ReportCrashObj(&sError, m_List[i]); kernelDebugLogMessage(sError); return; } } }
void CTranscendenceWnd::ReportCrash (void) // ReportCrash // // Report a crash { #ifdef DEBUG_PROGRAMSTATE m_sCrashInfo = NULL_STR; // Program state switch (g_iProgramState) { case psAnimating: m_sCrashInfo.Append(CONSTLIT("program state: miscellaneous animation\r\n")); break; case psPaintingSRS: m_sCrashInfo.Append(CONSTLIT("program state: painting SRS\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psUpdating: m_sCrashInfo.Append(CONSTLIT("program state: updating universe\r\n")); break; case psUpdatingEvents: m_sCrashInfo.Append(CONSTLIT("program state: updating events\r\n")); ReportCrashEvent(&m_sCrashInfo); break; case psUpdatingBehavior: m_sCrashInfo.Append(CONSTLIT("program state: updating object behavior\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psUpdatingObj: m_sCrashInfo.Append(CONSTLIT("program state: updating object\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psUpdatingHitTest: m_sCrashInfo.Append(CONSTLIT("program state: updating object hit test\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psUpdatingMove: m_sCrashInfo.Append(CONSTLIT("program state: updating object motion\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psUpdatingEncounters: m_sCrashInfo.Append(CONSTLIT("program state: updating random encounters\r\n")); break; case psDestroyNotify: m_sCrashInfo.Append(CONSTLIT("program state: handling OnObjDestroy\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psUpdatingReactorDisplay: m_sCrashInfo.Append(CONSTLIT("program state: updating reactor display\r\n")); break; case psPaintingMap: m_sCrashInfo.Append(CONSTLIT("program state: painting map\r\n")); break; case psPaintingLRS: m_sCrashInfo.Append(CONSTLIT("program state: painting LRS\r\n")); break; case psPaintingArmorDisplay: m_sCrashInfo.Append(CONSTLIT("program state: painting armor display\r\n")); break; case psPaintingMessageDisplay: m_sCrashInfo.Append(CONSTLIT("program state: painting message display\r\n")); break; case psPaintingReactorDisplay: m_sCrashInfo.Append(CONSTLIT("program state: painting reactor display\r\n")); break; case psPaintingTargetDisplay: m_sCrashInfo.Append(CONSTLIT("program state: painting target display\r\n")); ReportCrashObj(&m_sCrashInfo, (GetPlayer() ? GetPlayer()->GetShip() : NULL)); break; case psPaintingDeviceDisplay: m_sCrashInfo.Append(CONSTLIT("program state: painting device display\r\n")); break; case psStargateEnter: m_sCrashInfo.Append(CONSTLIT("program state: entering stargate\r\n")); break; case psStargateEndGame: m_sCrashInfo.Append(CONSTLIT("program state: entering end-game stargate\r\n")); break; case psStargateLoadingSystem: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, loading destination system\r\n")); break; case psStargateCreatingSystem: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, creating destination system\r\n")); break; case psStargateUpdateExtended: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, updating extended\r\n")); break; case psStargateTransferringGateFollowers: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, transferring gate followers\r\n")); break; case psStargateSavingSystem: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, saving current system\r\n")); break; case psStargateFlushingSystem: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, flushing current system\r\n")); break; case psStargateGarbageCollecting: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, garbage-collecting images\r\n")); break; case psStargateLoadingBitmaps: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, loading new images\r\n")); break; case psLoadingImages: m_sCrashInfo.Append(CONSTLIT("program state: in LoadImages\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psStargateEnterDone: m_sCrashInfo.Append(CONSTLIT("program state: enter stargate done\r\n")); break; case psOnObjDestroyed: m_sCrashInfo.Append(CONSTLIT("program state: in OnObjDestroyed\r\n")); ReportCrashObj(&m_sCrashInfo); break; case psCustomError: if (g_sProgramError) m_sCrashInfo.Append(*g_sProgramError); m_sCrashInfo.Append(CONSTLIT("\r\n")); break; default: m_sCrashInfo.Append(CONSTLIT("program state: unknown\r\n")); } // Game state switch (m_State) { case gsInGame: m_sCrashInfo.Append(CONSTLIT("game state: in game\r\n")); break; case gsDocked: m_sCrashInfo.Append(CONSTLIT("game state: docked\r\n")); break; case gsDestroyed: m_sCrashInfo.Append(CONSTLIT("game state: destroyed\r\n")); break; case gsEnteringStargate: m_sCrashInfo.Append(CONSTLIT("game state: entering stargate\r\n")); break; case gsLeavingStargate: m_sCrashInfo.Append(CONSTLIT("game state: leaving stargate\r\n")); break; case gsIntro: m_sCrashInfo.Append(CONSTLIT("game state: intro\r\n")); break; case gsProlog: m_sCrashInfo.Append(CONSTLIT("game state: prolog\r\n")); break; default: m_sCrashInfo.Append(CONSTLIT("game state: unknown\r\n")); } #endif throw CException(ERR_FAIL); }