BOOL CSoundFile::Destroy() //------------------------ { int i; for (i=0; i<MAX_PATTERNS; i++) if (Patterns[i]) { FreePattern(Patterns[i]); Patterns[i] = NULL; } m_nPatternNames = 0; if (m_lpszPatternNames) { delete [] m_lpszPatternNames; m_lpszPatternNames = NULL; } if (m_lpszSongComments) { delete [] m_lpszSongComments; m_lpszSongComments = NULL; } for (i=1; i<MAX_SAMPLES; i++) { MODINSTRUMENT *pins = &Ins[i]; if (pins->pSample) { FreeSample(pins->pSample); pins->pSample = NULL; } } for (i=0; i<MAX_INSTRUMENTS; i++) { if (Headers[i]) { delete Headers[i]; Headers[i] = NULL; } } for (i=0; i<MAX_MIXPLUGINS; i++) { if ((m_MixPlugins[i].nPluginDataSize) && (m_MixPlugins[i].pPluginData)) { m_MixPlugins[i].nPluginDataSize = 0; delete [] (signed char*)m_MixPlugins[i].pPluginData; m_MixPlugins[i].pPluginData = NULL; } m_MixPlugins[i].pMixState = NULL; if (m_MixPlugins[i].pMixPlugin) { m_MixPlugins[i].pMixPlugin->Release(); m_MixPlugins[i].pMixPlugin = NULL; } } m_nType = MOD_TYPE_NONE; m_nChannels = m_nSamples = m_nInstruments = 0; return TRUE; }
int DoMainMenu() { int rtval = -1; char *pa = (char*) GraphicsDF->get("palette"); PlayMusic("solution.s3m"); DoneInteract(); ClearScr(); SetPalette(pa); MenuSnd = LoadSample("menu", FALSE); FlashSnd = LoadSample("flash", FALSE); while (rtval == -1) { rtval = ProcessMenu("mmnu0", "mmnu1"); if (rtval == 0) /*new game*/ { rtval = ProcessMenu("mmnu2", "mmnu3"); // dificulty if (rtval == 3) {rtval = -1; continue;} switch (rtval) { case 0 : ActualDifficulty = 'e'; break; case 1 : ActualDifficulty = 'n'; break; case 2 : ActualDifficulty = 'h'; break; } rtval = 0; break; } } FreeSample(MenuSnd); FreeSample(FlashSnd); ClearScr(); SetPalette(Palette); InitInteract(); memfree(pa); return rtval; }
// Allocate sample based on a ModSample's properties. // Returns number of bytes allocated, 0 on failure. size_t ModSample::AllocateSample() //-------------------------------- { // Prevent overflows... if(nLength > SIZE_MAX - 6u || SIZE_MAX / GetBytesPerSample() < nLength + 6u) { return 0; } FreeSample(); size_t sampleSize = (nLength + 6u) * GetBytesPerSample(); if((pSample = CSoundFile::AllocateSample(sampleSize)) == nullptr) { return 0; } else { return sampleSize; } }