//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void Plug::InitializeClass() { Verify(!ConnectionEngineHeap); ConnectionEngineHeap = gos_CreateMemoryHeap("ConnectionEngine"); Check_Pointer(ConnectionEngineHeap); Verify(!DefaultData); DefaultData = new ClassData( PlugClassID, "Stuff::Plug", RegisteredClass::DefaultData ); Register_Object(DefaultData); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // DatabaseHandle::DatabaseHandle( const char* filename, bool read_only ) { // //----------------------------------------------------- // Create the database heap if it doesn't already exist //----------------------------------------------------- // m_fileName = filename; if (!Database::FilesOpened++) Database_Heap = gos_CreateMemoryHeap("Database", 0); gos_PushCurrentHeap(Database_Heap); m_currentRecord = 0; m_currentPointer = NULL; m_dirtyFlag = false; // //-------------------------------------------- // If the file is read only, our job is simple //-------------------------------------------- // m_readOnly = read_only; if (m_readOnly) { if (gos_DoesFileExist(filename)) { FileStream::IsRedirected = false; DWORD size; m_handle = gos_OpenMemoryMappedFile( filename, reinterpret_cast<BYTE**>(&m_dataBase), &size ); if (m_dataBase->m_tag != Database::e_Tag) STOP(("Invalid database file \"%s\"", filename)); if (m_dataBase->m_version > Database::e_Version) STOP(("Application must be recompiled to use database \"%s\"", filename)); m_baseAddress = reinterpret_cast<DWORD>(m_dataBase); Check_Object(m_dataBase); } else STOP(("Database \"%s\" does not exist", filename)); } // //------------------------------------------------------------- // The file is not read only, so see if we load it or create it //------------------------------------------------------------- // else { m_handle = NULL; if (gos_DoesFileExist(filename)) { DWORD size; gos_GetFile( filename, reinterpret_cast<BYTE**>(&m_dataBase), &size ); FileStream::IsRedirected = false; Check_Pointer(m_dataBase); if (m_dataBase->m_tag != Database::e_Tag || m_dataBase->m_version > Database::e_Version || m_dataBase->m_version == 1) { gos_Free(m_dataBase); PAUSE(("Bad database file! Press 'Continue' to rebuild", filename)); m_dataBase = new(gos_Malloc(sizeof(Database), Database_Heap)) Database; m_baseAddress = 0; } else { m_baseAddress = reinterpret_cast<DWORD>(m_dataBase); Check_Object(m_dataBase); } } // //------------------------------------------ // The file doesn't exist, so create it here //------------------------------------------ // else { m_dataBase = new(gos_Malloc(sizeof(Database), Database_Heap)) Database; m_baseAddress = 0; } } gos_PopCurrentHeap(); }