/*----------------------------------------------------CIRexxApp::ExitInstance-+ | | +----------------------------------------------------------------------------*/ Err CIRexxApp::ExitInstance() { // If we didn't get new globals for this instance, // then don't delete the existing ones! if (!(m_wLaunchFlags & sysAppLaunchFlagNewGlobals)) { return errNone; } // NOTE: The reason we have to check-before-delete is because // because we can now be called under other launch codes, e.g., // Find, and we're not allowed to make cross-segment calls in such // a launch. The delete of m_args, even though it's 0, // causes a cross-segment call! YOWZA! Why? // Not sure. Perhaps it has a virtual dtor? Go figure... if (m_memoDB) delete m_memoDB; if (m_pedit32DB) delete m_pedit32DB; if (m_rexxDB) delete m_rexxDB; if (m_scriptIndexDB) { UInt16 card; LocalID id; Err err1 = m_scriptIndexDB->GetCardNo(card); Err err2 = m_scriptIndexDB->GetDbUniqueID(id); bool doDelete = (err1 == errNone && err2 == errNone); delete m_scriptIndexDB; if (doDelete) DmDeleteDatabase(card, id); } if (m_script) { /*save it*/m_script->seekp(0, ios::end); delete m_script; } if (m_args) delete m_args; if (m_rexx) delete m_rexx; if (g_pBeamerStreamBuf) delete g_pBeamerStreamBuf; return errNone; }
void buildAll() { Err err; LocalID olddb; olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME); if (olddb) { DmDeleteDatabase(0,olddb); FrmCustomAlert(1000,"delete old " BUILD_NAME " DB",0,0); } err = DmCreateDatabase (0, "Glbs::" BUILD_NAME, 'ScVM', 'GLBS', false); olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME); dbP[BUILD_RES] = DmOpenDatabase(0, olddb, dmModeReadWrite); #if defined(BUILD_COMMON) addNewGui(); #elif defined(BUILD_SCUMM) addDimuseTables(); // temp removed // TODO ::scummvm use sizeof(OLD256_MIDI_HACK) so i need to fix it // directly in the code or call MemHandleSize but it may slow down // code execution addAkos(); addDimuseCodecs(); addCodec47(); addGfx(); addDialogs(); addCharset(); addCostume(); addPlayerV2(); addScummTables(); #elif defined(BUILD_SIMON) addSimon(); Simon_addCharset(); #elif defined(BUILD_SKY) Sky_addHufftext(); #elif defined(BUILD_QUEEN) Queen_addTalk(); Queen_addRestables(); Queen_addGraphics(); Queen_addDisplay(); Queen_addMusicdata(); #elif defined(BUILD_SWORD1) Sword1_addStaticres(); #endif DmCloseDatabase(dbP[BUILD_RES]); }
static Boolean DeleteExistingDB(const char* nameP, UInt16 version, UInt16 cardNo, LocalID dbID, void* userDataP) { Err err; err = DmDeleteDatabase(cardNo, dbID); if (!err) return(true); else return(false); }
/* Create database for list of documents */ static void CreateDocList( void ) /* THROWS */ { UInt16 cardNo; Err err; LocalID dbID; UInt16 version; /* list is always put on first card in RAM */ cardNo = 0; err = errNone; err = DmCreateDatabase( cardNo, PlkrDocListName, ViewerAppID, PlkrDocListType, false ); THROW_IF( err != errNone, memErrNotEnoughSpace ); dbID = DmFindDatabase( cardNo, PlkrDocListName ); version = PlkrDocListVersion; err = DmSetDatabaseInfo( cardNo, dbID, NULL, NULL, &version, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); plkrDocList = DmOpenDatabaseByTypeCreator( PlkrDocListType, ViewerAppID, dmModeReadWrite ); ErrTry { InitPlkrAppInfo( plkrDocList ); } ErrCatch( UNUSED_PARAM( err ) ) { LocalID dbID; DmOpenDatabaseInfo( plkrDocList, &dbID, NULL, NULL, &cardNo, NULL ); CloseDatabase( plkrDocList ); DmDeleteDatabase( cardNo, dbID ); MSG( "Couldn't initialize Plkr document list [ appInfo ]\n" ); ErrThrow( memErrNotEnoughSpace ); } ErrEndCatch }