Операционные системы. Марапулец Ю.В. - 80 стр.

UptoLike

Составители: 

{
ReportError ( hWnd, IDS_UNSUPPORTEDFORMAT );
mmioClose( hmmio, 0 );
return( FALSE ) ;
}
Функция mmioRead требует задания дескриптора файла, указателя буфера
памяти, а также количества байтов. Поле lFmtSize содержит информацию о
количестве байтов в структуре PCMWAVEFORMAT,
которое будет загружено
из дискового файла функцией mmioRead.
Функция mmioAscend перемещает указатель текущей позиции файла в
точку за последним байтом блока формата, подготавливая программу к
выполнению последующей операции.
Для простоты анализа программы Show Wave мы ограничились только 8-
битовыми монозаписями. Чтобы изменить эти параметры, нужно добавить
несколько дополнительных переменных и изменить подпрограмму,
управляющую работой полосы прокрутки.
Итак, мы проверили формат данных. Теперь можно загрузить данные в
память. Программа осуществляет поиск блока data, определяет его размер,
выделяет для него соответствующий буфер в памяти и читает данные в буфер.
/* поиск блока данных */
mmckinfoData.ckid = mmioFOURCC('d','а','t','а');
if( mmioDescend ( hmmio, &mmckinfoData, &mmckinfoWave,
MMIO_FINDCHUNK ) != 0 )
{
ReportError( hWnd, IDS_CORRUPTEDFILE );
mmioClose ( hmmio, 0 ) ;
return( FALSE ) ;
}
/* определение размера блока данных */
lDataSize = (LONG)mmckinfoData.cksize;
if( lDataSize == 0 )
{
ReportError( hWnd, IDS_NOWAVEDATA ) ;
mmioClose( hmmio, 0 );
return( FALSE );
}
/* выделение и блокирование памяти */
lpData = GlobalAllocPtr( GMEM_MOVEABLE, lDataSize );
if( ! lpData )
{
ReportError( hWnd, IDS_OUTOFMEMORY );
mmioClose( hmmio, 0 ) ;
return( FALSE ) ;
80
     {
           ReportError ( hWnd, IDS_UNSUPPORTEDFORMAT );
           mmioClose( hmmio, 0 );
           return( FALSE ) ;
     }

      Функция mmioRead требует задания дескриптора файла, указателя буфера
памяти, а также количества байтов. Поле lFmtSize содержит информацию о
количестве байтов в структуре PCMWAVEFORMAT, которое будет загружено
из дискового файла функцией mmioRead.
      Функция mmioAscend перемещает указатель текущей позиции файла в
точку за последним байтом блока формата, подготавливая программу к
выполнению последующей операции.
      Для простоты анализа программы Show Wave мы ограничились только 8-
битовыми монозаписями. Чтобы изменить эти параметры, нужно добавить
несколько дополнительных переменных и изменить подпрограмму,
управляющую работой полосы прокрутки.
      Итак, мы проверили формат данных. Теперь можно загрузить данные в
память. Программа осуществляет поиск блока data, определяет его размер,
выделяет для него соответствующий буфер в памяти и читает данные в буфер.
              /* поиск блока данных */
      mmckinfoData.ckid = mmioFOURCC('d','а','t','а');
      if( mmioDescend ( hmmio, &mmckinfoData, &mmckinfoWave,
                          MMIO_FINDCHUNK ) != 0 )
      {
              ReportError( hWnd, IDS_CORRUPTEDFILE );
              mmioClose ( hmmio, 0 ) ;
              return( FALSE ) ;
      }
              /* определение размера блока данных */
      lDataSize = (LONG)mmckinfoData.cksize;
      if( lDataSize == 0 )
      {
              ReportError( hWnd, IDS_NOWAVEDATA ) ;
              mmioClose( hmmio, 0 );
              return( FALSE );
      }
              /* выделение и блокирование памяти */
      lpData = GlobalAllocPtr( GMEM_MOVEABLE, lDataSize );
      if( ! lpData )
      {
              ReportError( hWnd, IDS_OUTOFMEMORY );
              mmioClose( hmmio, 0 ) ;
              return( FALSE ) ;

                                   80