[ create a new paste ] login | about

Link: http://codepad.org/gYNxJ8a5    [ raw code | fork ]

D, pasted on Jun 19:
TCHAR* DrumFileRead(DRUM* pdrum, TCHAR* szFileName)
{
    DRUM  drum;
    HMMIO hmmio;
    int i, iFormat;
    MMCKINFO[3] mmckinfo;

    // Open the file
    hmmio = mmioOpen(szFileName, NULL, MMIO_READ);
    if (hmmio == NULL)
        return szErrorNotFound;

    // Locate a "RIFF" chunk with a "DRUM" form-type
    mmckinfo[0].ckid = mmioStringToFOURCC(szDrumID, 0);

    if (mmioDescend(hmmio, &mmckinfo[0], NULL, MMIO_FINDRIFF))
    {
        mmioClose(hmmio, 0);
        return szErrorNotDrum;
    }

    // Locate, read, and verify the "fmt " sub-chunk
    mmckinfo[1].ckid = mmioStringToFOURCC(szFmtID, 0);
        
    if (mmioDescend(hmmio, &mmckinfo[1], &mmckinfo[0], MMIO_FINDCHUNK))
    {
        mmioClose(hmmio, 0);
        return szErrorNotDrum;
    }

    if (mmckinfo[1].cksize != int.sizeof)
    {
        mmioClose(hmmio, 0);
        return szErrorUnsupported;
    }

    if (mmioRead(hmmio, cast(PSTR)&iFormat, int.sizeof) != int.sizeof)
    {
        mmioClose(hmmio, 0);
        return szErrorCannotRead;
    }

    if (iFormat != 1 && iFormat != 2)
    {
        mmioClose(hmmio, 0);
        return szErrorUnsupported;
    }

    // Go to end of "fmt " sub-chunk
    mmioAscend(hmmio, &mmckinfo[1], 0);

    // Locate, read, and verify the "data" sub-chunk
    mmckinfo[1].ckid = mmioStringToFOURCC(szDataID, 0);
    writeln((cast(char*)&mmckinfo[1].ckid)[0..4]);

    if (mmioDescend(hmmio, &mmckinfo[1], &mmckinfo[0], MMIO_FINDCHUNK))
    {
        mmioClose(hmmio, 0);
        return szErrorNotDrum;
    }

    if (mmckinfo[1].cksize != DRUM.sizeof)
    {
        mmioClose(hmmio, 0);
        return szErrorUnsupported;
    }

    if (mmioRead(hmmio, cast(LPSTR)&drum, DRUM.sizeof != DRUM.sizeof))
    {
        mmioClose(hmmio, 0);
        return szErrorCannotRead;
    }
    
    // Close the file
    mmioClose(hmmio, 0);
    
    // Convert format 1 to format 2 and copy the DRUM structure data
    if (iFormat == 1)
    {
        for (i = 0; i < NUM_PERC; i++)
        {
            drum.dwSeqPerc [i] = drum.dwSeqPian [i];
            drum.dwSeqPian [i] = 0;
        }
    }

    *pdrum = drum;
    return NULL;
}


Create a new paste based on this one


Comments: