home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional Developers Kit 1992 November / Disc01 / Disc01.mdf / runnable / mmos2 / mmtoolkt / h / mmio.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-06  |  31.4 KB  |  757 lines

  1. /***************************************************************************\
  2. *
  3. * Module Name: MMIO.H
  4. *
  5. * OS/2 2.0 Multimedia Extensions Input/Output Manager Definitions file
  6. *  NOTE:  All structures are UNPACKED!!
  7. *
  8. * Copyright (c) International Business Machines Corporation 1990,1991,1992
  9. *                         All Rights Reserved
  10. *
  11. *
  12. \****************************************************************************/
  13.  
  14.  
  15. #ifndef _MMIO_H_
  16. #define _MMIO_H_
  17.  
  18. #pragma pack(4)
  19.  
  20. /*
  21.  * MMIO symbols.
  22.  */
  23.  
  24. #ifndef _OS2MEDEF_H
  25. typedef USHORT WORD;
  26. typedef ULONG  DWORD;
  27. typedef DWORD  HMMIO;
  28. #endif
  29.  
  30. typedef HMMIO  HMMCF;
  31. typedef DWORD  FOURCC;
  32. typedef FOURCC *PFOURCC;
  33.  
  34. /*
  35.  * MS compat defines.
  36.  */
  37.  
  38. #ifndef _OS2MEDEF_H
  39. #define LPSTR PSZ
  40. #endif
  41.  
  42. #define HPSTR PSZ
  43.  
  44. /*
  45.  * Define MMIO public data structures.
  46.  */
  47.  
  48. typedef struct _MMCKINFO {    /* mmckinfo                             */
  49.    FOURCC   ckid;             /* Chunk id (FOURCC)                    */
  50.    DWORD    ckSize;           /* Chunk Size (bytes)                   */
  51.    FOURCC   fccType;          /* FourCC Type (if ckid RIFF or LIST)   */
  52.    DWORD    dwDataOffset;     /* File Offset of data portion of chunk */
  53.    DWORD    dwFlags;          /* MMIO_DIRTY (if new chunk)            */
  54.    } MMCKINFO;
  55.  
  56. typedef MMCKINFO FAR *PMMCKINFO;
  57. #define LPMMCKINFO PMMCKINFO     /* MS compat define */
  58.  
  59. typedef LONG (APIENTRY MMIOPROC)                    /*  Format must       */
  60.                                 ( PVOID pmmioinfo,  /*  appear this       */
  61.                                   WORD wMsg,        /*  way for h2inc     */
  62.                                   LONG lParam1,     /*  to work properly. */
  63.                                   LONG lParam2 );
  64.  
  65. typedef MMIOPROC FAR *PMMIOPROC;
  66. #define LPMMIOPROC PMMIOPROC     /* MS compat define */
  67.  
  68. typedef struct _MMIOINFO {       /* mmioinfo                    */
  69.    DWORD       dwFlags;          /* Open flags                  */
  70.    FOURCC      fccIOProc;        /* FOURCC of the IOProc to use */
  71.    PMMIOPROC   pIOProc;          /* Function Pointer to IOProc to use */
  72.    DWORD       dwErrorRet;       /* Extended Error return code  */
  73.    LONG        cchBuffer;        /* I/O buff size (if used), Fsize if MEM */
  74.    PSZ         pchBuffer;        /* Start of I/O buff           */
  75.    PSZ         pchNext;          /* Next char to read or write in buff */
  76.    PSZ         pchEndRead;       /* Last char in buff can be read + 1  */
  77.    PSZ         pchEndWrite;      /* Last char in buff can be written + 1 */
  78.    LONG        lBufOffset;       /* Offset in buff to pchNext */
  79.    LONG        lDiskOffset;      /* Disk offset in file       */
  80.    DWORD       adwInfo[4];       /* IOProc specific fields    */
  81.    LONG        lLogicalFilePos;  /* Actual file position, buffered or not */
  82.    DWORD       dwTranslate;      /* Translation field         */
  83.    FOURCC      fccChildIOProc;   /* FOURCC of Child IOProc    */
  84.    PVOID       pExtraInfoStruct; /* Pointer to a structure of related data */
  85.    HMMIO       hmmio;            /* Handle to media element   */
  86.    } MMIOINFO;
  87.  
  88. typedef MMIOINFO FAR *PMMIOINFO;
  89. #define LPMMIOINFO PMMIOINFO     /* MS compat define */
  90.  
  91. typedef struct _MMCFINFO {       /* mmcfinfo                  */
  92.    DWORD    dwHeaderSize;        /* CTOC header size          */
  93.    DWORD    dwEntriesTotal;      /* Num of CTOC table entries */
  94.    DWORD    dwEntriesDeleted;    /* Num of CTOC table entries deleted */
  95.    DWORD    dwEntriesUnused;     /* Num of unused CTOC entries */
  96.    DWORD    dwBytesTotal;        /* Combined byte size of all CGRP elements */
  97.    DWORD    dwBytesDeleted;      /* Byte size of all deleted CGRP elements */
  98.    DWORD    dwHeaderFlags;       /* Info about entire compound file (CF)  */
  99.    WORD     wEntrySize;          /* Size of each CTOC table entry */
  100.    WORD     wNameSize;           /* Size of name field in entry, default 13 */
  101.    WORD     wExHdrFields;        /* Num CTOC header extra fields */
  102.    WORD     wExEntFields;        /* Num CTOC entry extra fields  */
  103.    } MMCFINFO;
  104.  
  105. /*
  106.  * Note:  The are variable length DWORD arrays that may be present
  107.  *        at the end of the MMCFINFO structure.
  108.  */
  109.  
  110. /*   DWORD    (*adwExHdrFldUsage)[];  /* Array of header extra usage fields */
  111. /*   DWORD    (*adwExtEntFldUsage)[]; /* Array of entry extra usage fields  */
  112. /*   DWORD    (*adwExHdrField)[];     /* Array of header extra fields       */
  113.  
  114. typedef MMCFINFO FAR *PMMCFINFO;
  115. #define LPMMCFINFO PMMCFINFO     /* MS compat define */
  116.  
  117. typedef struct _MMCTOCENTRY {    /* mmctocentry                   */
  118.    DWORD    dwOffset;            /* Offset of element within CGRP */
  119.    DWORD    dwSize;              /* Size of element               */
  120.    DWORD    dwMedType;           /* Fourcc of element             */
  121.    DWORD    dwMedUsage;          /* Possible sub type             */
  122.    DWORD    dwCompressTech;      /* Compression technique used    */
  123.    DWORD    dwUncompressBytes;   /* Actual size of uncompressed element */
  124.    } MMCTOCENTRY;
  125.  
  126. /*
  127.  * Note:  A variable length name field and possibly a DWORD array may
  128.  *        be present at the end of the MMCTOCENTRY structure.
  129.  */
  130.  
  131. /*   DWORD    (*adwExEntField)[];  /* Array of entry extra fields */
  132. /*   PSZ      pszElementName[];    /* Name of element, variable length */
  133.  
  134. typedef MMCTOCENTRY FAR *PMMCTOCENTRY;
  135. #define LPMMCTOCENTRY PMMCTOCENTRY /* MS compat define */
  136.  
  137. /*
  138.  * Conversion Flags/Data Structures:
  139.  */
  140.  
  141. #define MMIO_MEDIATYPE_IMAGE        0x00000001L  /* Image media */
  142. #define MMIO_MEDIATYPE_AUDIO        0x00000002L  /* Audio media */
  143. #define MMIO_MEDIATYPE_MIDI         0x00000004L  /* MIDI media  */
  144. #define MMIO_MEDIATYPE_COMPOUND     0x00000008L  /* Cmpd media  */
  145. #define MMIO_MEDIATYPE_OTHER        0x00000010L  /* Other media */
  146. #define MMIO_MEDIATYPE_UNKNOWN      0x00000020L  /* Unknown media */
  147. #define MMIO_MEDIATYPE_DIGITALVIDEO 0x00000040L  /* Future: Not Supported */
  148. #define MMIO_MEDIATYPE_ANIMATION    0x00000080L  /* Future: Not Supported */
  149.  
  150. #define MMIO_CANREADTRANSLATED        0x00000001L  /* IOProc Cpbilty Flgs. */
  151. #define MMIO_CANWRITETRANSLATED       0x00000002L  /*  "       "       "   */
  152. #define MMIO_CANREADWRITETRANSLATED   0x00000004L  /*  "       "       "   */
  153. #define MMIO_CANREADUNTRANSLATED      0x00000008L  /*  "       "       "   */
  154. #define MMIO_CANWRITEUNTRANSLATED     0x00000010L  /*  "       "       "   */
  155. #define MMIO_CANREADWRITEUNTRANSLATED 0x00000020L  /*  "       "       "   */
  156. #define MMIO_CANSEEKTRANSLATED        0x00000040L  /*  "       "       "   */
  157. #define MMIO_CANSEEKUNTRANSLATED      0x00000080L  /*  "       "       "   */
  158. #define MMIO_CANINSERTUNTRANSLATED    0x00000100L  /*  "       "       "   */
  159. #define MMIO_CANSAVEUNTRANSLATED      0x00000200L  /*  "       "       "   */
  160. #define MMIO_CANINSERTTRANSLATED      0x00000400L  /*  "       "       "   */
  161. #define MMIO_CANSAVETRANSLATED        0x00000800L  /*  "       "       "   */
  162.  
  163. #define MMIO_IOPROC_STORAGESYSTEM     0x00000001L  /* IOProc Types */
  164. #define MMIO_IOPROC_FILEFORMAT        0x00000002L    
  165. #define MMIO_IOPROC_DATAFORMAT        0x00000004L    
  166.  
  167. typedef struct _MMFORMATINFO {         /* mmformatinfo             */
  168.    DWORD    dwStructLen;               /* Length of this structure */
  169.    FOURCC   fccIOProc;                 /* IOProc identifier        */
  170.    DWORD    dwIOProcType;              /* Type of IOProc           */
  171.    DWORD    dwMediaType;               /* Media Type               */
  172.    DWORD    dwFlags;                   /* IOProc capability flags  */
  173.    CHAR     achDefaultFormatExt[sizeof(FOURCC) + 1];
  174.                                        /* Default extension 4 + null */
  175.    DWORD    dwCodePage;                /* Code Page                  */
  176.    DWORD    dwLanguage;                /* Language                   */
  177.    LONG     lNameLength;               /* length of identifier string */
  178.    } MMFORMATINFO;
  179.  
  180. typedef MMFORMATINFO *PMMFORMATINFO;
  181.  
  182. #define MMIO_IMAGE_UNKNOWN          0x00000000L  /* Unknown image content */
  183. #define MMIO_IMAGE_DRAWING          0x00000001L  /* Simple drawing        */
  184. #define MMIO_IMAGE_GRAPH            0x00000002L  /* Graphs & Cartoons     */
  185. #define MMIO_IMAGE_PHOTO            0x00000004L  /* Varying Color & Shades */
  186.  
  187. #ifdef INCL_GPI
  188. #ifdef INCL_GPIBITMAPS
  189.  
  190. #define MAX_PALETTE  256
  191.  
  192. typedef struct _XDIBHDR_PREFIX {             /* XDIB Header Prefix */
  193.    ULONG ulMemSize;                          /* Length of bitmap   */
  194.    ULONG ulPelFormat;                        
  195.    USHORT usTransType;                       
  196.    ULONG ulTransVal;                         
  197.    } XDIBHDR_PREFIX;
  198.  
  199. typedef struct _MMXDIBHEADER {               /* XDIB Header */
  200.    XDIBHDR_PREFIX    XDIBHeaderPrefix;       
  201.    BITMAPINFOHEADER2 BMPInfoHeader2;         
  202.    } MMXDIBHEADER;
  203.  
  204. typedef struct _MMIMAGEHEADER {              /* mmimageheader   */
  205.    DWORD             dwHeaderLength;         /* Length in Bytes */
  206.    DWORD             dwContentType;          /* Image content   */
  207.    DWORD             dwMediaType;            /* Media Type      */
  208.    MMXDIBHEADER      mmXDIBHeader;           /* OS/2 2.0 PM compat header */
  209.    RGB2              bmiColors[MAX_PALETTE]; /* PM compatible palette */
  210.    } MMIMAGEHEADER;
  211.  
  212. typedef MMIMAGEHEADER *PMMIMAGEHEADER;
  213.  
  214. #endif
  215. #endif
  216.  
  217. #define MMIO_AUDIO_UNKNOWN          0x00000000L  /* Unknown image content  */
  218. #define MMIO_AUDIO_VOICE            0x00000001L  /* Limited Range          */
  219. #define MMIO_AUDIO_MUSIC            0x00000002L  /* FM Radio or equivalent */
  220. #define MMIO_AUDIO_HIFI             0x00000004L  /* High quality recording */
  221.  
  222. typedef struct _WAVE_HEADER {                /* waveheader          */
  223.    USHORT          usFormatTag;              /* Type of wave format */
  224.    USHORT          usChannels;               /* Number of channels  */
  225.    ULONG           ulSamplesPerSec;          /* Sampling rate       */
  226.    ULONG           ulAvgBytesPerSec;         /* Avg bytes per sec   */
  227.    USHORT          usBlockAlign;             /* Block Alignment in bytes */
  228.    USHORT          usBitsPerSample;          /* Bits per sample     */
  229.    } WAVE_HEADER;
  230.  
  231. typedef struct _XWAV_HEADERINFO {            /* xwaveheader info        */
  232.    ULONG           ulAudioLengthInMS;        /* Audio data in millisecs */
  233.    ULONG           ulAudioLengthInBytes;     /* Audio data in bytes     */
  234.    ULONG           ulReserved;               /* reserved                */           
  235.    } XWAV_HEADERINFO;
  236.  
  237. typedef struct _MMXWAV_HEADER {              /* mmxwaveheader            */
  238.    WAVE_HEADER     WAVEHeader;               /* Per RIFF WAVE Definition */
  239.    XWAV_HEADERINFO XWAVHeaderInfo;           /* Extended wave definition */
  240.    } MMXWAV_HEADER;
  241.  
  242. typedef struct _MMAUDIOHEADER {              /* mmaudioheader   */
  243.    DWORD           dwHeaderLength;           /* Length in Bytes */
  244.    DWORD           dwContentType;            /* Image content   */
  245.    DWORD           dwMediaType;              /* Media Type      */
  246.    MMXWAV_HEADER   mmXWAVHeader;             /* header          */
  247.    } MMAUDIOHEADER;
  248.  
  249. typedef MMAUDIOHEADER *PMMAUDIOHEADER;
  250.  
  251. #define MMIO_MIDI_UNKNOWN          0x00000000L  /* Unknown midi content   */
  252. #define MMIO_MIDI_VOICE            0x00000001L  /* Limited Range          */
  253. #define MMIO_MIDI_MUSIC            0x00000002L  /* FM Radio or equivalent */
  254. #define MMIO_MIDI_HIFI             0x00000004L  /* High quality recording */
  255.  
  256. #define DLLNAME_SIZE CCHMAXPATH
  257. #define PROCNAME_SIZE 32
  258.  
  259. typedef struct _MMINIFILEINFO {               /* mminifileinfo     */
  260.    FOURCC      fccIOProc;                     /* IOProc identifier */
  261.    CHAR        szDLLName[DLLNAME_SIZE];       /* DLL name string   */
  262.    CHAR        szProcName[PROCNAME_SIZE];     /* Procedure name string */
  263.    DWORD       dwFlags;                       /* Reserved          */
  264.    } MMINIFILEINFO;
  265.  
  266. typedef MMINIFILEINFO *PMMINIFILEINFO;
  267.  
  268. /*
  269.  * Flags:
  270.  */
  271.  
  272. #define MMIO_CREATE     0x00000001L       /* Open */
  273. #define MMIO_CTOCFIRST  0x00000002L       /* Open */
  274. #define MMIO_READ       0x00000004L       /* Open */
  275. #define MMIO_WRITE      0x00000008L       /* Open */
  276. #define MMIO_READWRITE  0x00000010L       /* Open */
  277. #define MMIO_COMPAT     0x00000020L       /* Open */
  278. #define MMIO_EXCLUSIVE  0x00000040L       /* Open */
  279. #define MMIO_DENYWRITE  0x00000080L       /* Open */
  280. #define MMIO_DENYREAD   0x00000100L       /* Open */
  281. #define MMIO_DENYNONE   0x00000200L       /* Open */
  282. #define MMIO_ALLOCBUF   0x00000400L       /* Open */
  283. #define MMIO_DELETE     0x00000800L       /* Open */
  284.  
  285. #define MMIO_USE_TEMP   0x00001000L       /* Open/Close/Save */
  286.  
  287. #define MMIO_INSERTON   0x00000001L       /* Insert */
  288. #define MMIO_INSERTOFF  0x00000002L       /* Insert */
  289.  
  290. #define MMIO_RWMODE     0x00001000L       /* Open */
  291. #define MMIO_SHAREMODE  0x00002000L       /* Open */
  292.  
  293. #define MMIO_DIRTY      0x00004000L       /* Write */
  294.  
  295. #define MMIO_VERTBAR     0x00008000L       /* Open */
  296. #define MMIO_BUFSHARED   0x00010000L       /* Open */
  297. #define MMIO_APPEND      0x00020000L       /* Open */
  298. #define MMIO_NOIDENTIFY  0x00040000L       /* Open */
  299.  
  300.  
  301. #define MMIO_FINDFIRST   0x00000001L       /* CF Find Entry */
  302. #define MMIO_FINDNEXT    0x00000002L       /* CF Find Entry */
  303. #define MMIO_FINDUNUSED  0x00000004L       /* CF Find Entry */
  304. #define MMIO_FINDDELETED 0x00000008L       /* CF Find Entry */
  305.  
  306. #define MMIO_CHANGEDELETED 0x0001         /* CF Change Entry */
  307.  
  308. #define MMIO_FHOPEN      0x0001           /* Close */
  309.  
  310. #define MMIO_EMPTYBUF    0x0001           /* Flush */
  311.  
  312. #define MMIO_CREATERIFF  0x0001           /* CreateChunk */
  313. #define MMIO_CREATELIST  0x0002           /* CreateChunk */
  314. #define MMIO_FINDCHUNK   0x0004           /* Descend     */
  315. #define MMIO_FINDRIFF    0x0008           /* Descend     */
  316. #define MMIO_FINDLIST    0x0010           /* Descend     */
  317.  
  318. #define CTOC_HF_SEQUENTIAL 0x00000001L    /* CTOC dwHeaderFlags */
  319. #define CTOC_HF_MEDSUBTYPE 0x00000002L    /* CTOC dwHeaderFlags */
  320.  
  321. #define CTOC_EFU_UNUSED          0x00000000L /* CTOC extra usage code */
  322. #define CTOC_EFU_LASTMODTIME     0x00000001L /* CTOC extra usage code */
  323. #define CTOC_EFU_CODEPAGE        0x00000002L /* CTOC extra usage code */
  324. #define CTOC_EFU_LANGUAGE        0x00000003L /* CTOC extra usage code */
  325. #define CTOC_EFU_COMPRESSPARAM0  0x00000005L /* CTOC extra usage code */
  326. #define CTOC_EFU_COMPRESSPARAM1  0x00000006L /* CTOC extra usage code */
  327. #define CTOC_EFU_COMPRESSPARAM2  0x00000007L /* CTOC extra usage code */
  328. #define CTOC_EFU_COMPRESSPARAM3  0x00000008L /* CTOC extra usage code */
  329. #define CTOC_EFU_COMPRESSPARAM4  0x00000009L /* CTOC extra usage code */
  330. #define CTOC_EFU_COMPRESSPARAM5  0x0000000AL /* CTOC extra usage code */
  331. #define CTOC_EFU_COMPRESSPARAM6  0x0000000BL /* CTOC extra usage code */
  332. #define CTOC_EFU_COMPRESSPARAM7  0x0000000CL /* CTOC extra usage code */
  333. #define CTOC_EFU_COMPRESSPARAM8  0x0000000DL /* CTOC extra usage code */
  334. #define CTOC_EFU_COMPRESSPARAM9  0x0000000EL /* CTOC extra usage code */
  335. #define CTOC_CHARSET_STANDARD    0x00000000L /* CTOC charset value    */
  336.  
  337. #define MMIO_INSTALLPROC         0x00000001L /* Install IO Proc */
  338. #define MMIO_REMOVEPROC          0x00000002L /* Install IO Proc */
  339. #define MMIO_FINDPROC            0x00000004L /* Install IO Proc */
  340.  
  341. #define MMIO_MATCHFIRST          0x00000010L /* Ini File Handler */
  342. #define MMIO_MATCHNEXT           0x00000020L /* Ini File Handler */
  343. #define MMIO_MATCHFOURCC         0x00000040L /* Ini File Handler */
  344. #define MMIO_MATCHDLL            0x00000080L /* Ini File Handler */
  345. #define MMIO_MATCHPROCEDURENAME  0x00000100L /* Ini File Handler */
  346. #define MMIO_FULLPATH            0x00000200L /* Ini File Handler */
  347. #define MMIO_NOVERIFY            0x00000400L /* Ini File Handler */
  348.  
  349. #define MMIO_TOUPPER             0x0001      /* StringToFourcc */
  350.  
  351. #define MMIO_CF_ENTRY_EXISTS     0x00000001L /* Add CGRP element */
  352.  
  353. #define MMIO_FORCE_IDENTIFY_SS   0x00000001L /* Identify */        
  354. #define MMIO_FORCE_IDENTIFY_FF   0x00000002L /* Identify */
  355.  
  356. #define MMIO_NOTRANSLATE         0x00000000L /* Translation */
  357. #define MMIO_TRANSLATEDATA       0x00000001L /* Translation */
  358. #define MMIO_TRANSLATEHEADER     0x00000002L /* Translation */
  359.  
  360. #define MMIO_DEFAULTBUFFER  8192    /* two pages under OS/2 2.0 */
  361.  
  362. /*
  363.  * Messages :
  364.  */
  365.  
  366. #define MMIOM_START              0x0E00
  367. #define MMIOM_END                0x0EFF
  368.  
  369. #define MMIOM_GETCF              MMIOM_START + 1
  370. #define MMIOM_GETCFENTRY         MMIOM_START + 2
  371.  
  372. #define MMIOM_CLOSE              MMIOM_START + 3
  373. #define MMIOM_OPEN               MMIOM_START + 4
  374. #define MMIOM_READ               MMIOM_START + 5
  375. #define MMIOM_SEEK               MMIOM_START + 6
  376. #define MMIOM_WRITE              MMIOM_START + 7
  377.  
  378. #define MMIOM_IDENTIFYFILE       MMIOM_START + 8
  379. #define MMIOM_GETHEADER          MMIOM_START + 9
  380. #define MMIOM_SETHEADER          MMIOM_START + 10
  381. #define MMIOM_QUERYHEADERLENGTH  MMIOM_START + 11
  382. #define MMIOM_GETFORMATNAME      MMIOM_START + 12
  383. #define MMIOM_GETFORMATINFO      MMIOM_START + 13
  384. #define MMIOM_SEEKBYTIME         MMIOM_START + 14
  385. #define MMIOM_TEMPCHANGE         MMIOM_START + 15
  386. #define MMIOM_BEGININSERT        MMIOM_START + 16
  387. #define MMIOM_ENDINSERT          MMIOM_START + 17
  388. #define MMIOM_SAVE               MMIOM_START + 18
  389.  
  390. #define MMIOM_USER                0x0F00
  391. #define MMIOM_USER_END            0x0FFF
  392.  
  393. /*
  394.  * Include error codes for MMIO only.
  395.  */
  396.  
  397. #ifndef _MEERROR_H_
  398. #define INCL_MMIO_ERRORS
  399. #include <meerror.h>
  400. #endif
  401.  
  402. #define MMIO_SUCCESS                    0L
  403. #define MMIO_WARNING                    2L
  404. #define MMIO_ERROR                     -1L
  405. #define MMIOERR_UNSUPPORTED_MESSAGE    -2L
  406.  
  407. #define MMIO_CF_SUCCESS                 0L
  408. #define MMIO_CF_FAILURE                 1L
  409.  
  410. #define mmioFOURCC( ch0, ch1, ch2, ch3 )                         \
  411.                   ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
  412.                   ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
  413.  
  414. #define FOURCC_RIFF   mmioFOURCC( 'R', 'I', 'F', 'F' )
  415. #define FOURCC_LIST   mmioFOURCC( 'L', 'I', 'S', 'T' )
  416. #define FOURCC_MEM    mmioFOURCC( 'M', 'E', 'M', ' ' )
  417. #define FOURCC_DOS    mmioFOURCC( 'D', 'O', 'S', ' ' )
  418. #define FOURCC_BND    mmioFOURCC( 'B', 'N', 'D', ' ' )
  419. #define FOURCC_FREE   mmioFOURCC( 'F', 'R', 'E', 'E' )
  420. #define FOURCC_DEL    mmioFOURCC( 'D', 'E', 'L', ' ' )
  421. #define FOURCC_CTOC   mmioFOURCC( 'C', 'T', 'O', 'C' )
  422. #define FOURCC_CGRP   mmioFOURCC( 'C', 'G', 'R', 'P' )
  423. #define FOURCC_CF     mmioFOURCC( 'C', 'F', ' ', ' ' )
  424.                                                                           
  425. #define MMIO_NLS_CHARSET_INFO    8000   /* RCDATA Name ID for NLS          */
  426. #define MMIO_IOPROC_NAME_TABLE   8500   /* RCDATA Name ID for string table */
  427.  
  428. /*
  429.  * Numeric equivalents of fourcc's.  These are needed for the resource
  430.  * compiler.
  431.  */
  432.  
  433. #define HEX_FOURCC_DOS 0x20534f44L
  434. #define HEX_FOURCC_MEM 0x204d454dL
  435. #define HEX_FOURCC_BND 0x20444e42L
  436. #define HEX_FOURCC_CF  0x20204643L
  437.  
  438. /*
  439.  * Country codes (CC), languages (LC), and dialects (DC).
  440.  */
  441.  
  442. #define MMIO_DEFAULT_CODE_PAGE            437
  443.  
  444. #define MMIO_CC_NONE                      000
  445. #define MMIO_CC_USA                       001
  446. #define MMIO_CC_CANADA                    002
  447. #define MMIO_CC_LATIN_AMERICA             003
  448. #define MMIO_CC_GREECE                    030
  449. #define MMIO_CC_NETHERLANDS               031
  450. #define MMIO_CC_BELGIUM                   032
  451. #define MMIO_CC_FRANCE                    033
  452. #define MMIO_CC_SPAIN                     034
  453. #define MMIO_CC_ITALY                     039
  454. #define MMIO_CC_SWITZERLAND               041
  455. #define MMIO_CC_AUSTRIA                   043
  456. #define MMIO_CC_UNITED_KINGDOM            044
  457. #define MMIO_CC_DENMARK                   045
  458. #define MMIO_CC_SWEDEN                    046
  459. #define MMIO_CC_NORWAY                    047
  460. #define MMIO_CC_WEST_GERMANY              049
  461. #define MMIO_CC_MEXICO                    052
  462. #define MMIO_CC_BRAZIL                    055
  463. #define MMIO_CC_AUSTRALIA                 061
  464. #define MMIO_CC_NEW_ZEALAND               064
  465. #define MMIO_CC_JAPAN                     081
  466. #define MMIO_CC_KOREA                     082
  467. #define MMIO_CC_CHINA                     086
  468. #define MMIO_CC_TAIWAN                    088
  469. #define MMIO_CC_TURKEY                    090
  470. #define MMIO_CC_PORTUGAL                  351
  471. #define MMIO_CC_LUXEMBOURG                352
  472. #define MMIO_CC_ICELAND                   354
  473. #define MMIO_CC_FINLAND                   358
  474.  
  475. #define MMIO_LC_NONE                        0
  476. #define MMIO_DC_NONE                        0
  477. #define MMIO_LC_ARABIC                      1
  478. #define MMIO_DC_ARABIC                      1
  479. #define MMIO_LC_BULGARIAN                   2
  480. #define MMIO_DC_BULGARIAN                   1
  481. #define MMIO_LC_CATALAN                     3
  482. #define MMIO_DC_CATALAN                     1
  483. #define MMIO_LC_TRADITIONAL_CHINESE         4
  484. #define MMIO_DC_TRADITIONAL_CHINESE         1
  485. #define MMIO_LC_SIMPLE_CHINESE              4
  486. #define MMIO_DC_SIMPLE_CHINESE              2
  487. #define MMIO_LC_CZECH                       5
  488. #define MMIO_DC_CZECH                       1
  489. #define MMIO_LC_DANISH                      6
  490. #define MMIO_DC_DANISH                      1
  491. #define MMIO_LC_GERMAN                      7
  492. #define MMIO_DC_GERMAN                      1
  493. #define MMIO_LC_SWISS_GERMAN                7
  494. #define MMIO_DC_SWISS_GERMAN                2
  495. #define MMIO_LC_GREEK                       8
  496. #define MMIO_DC_GREEK                       1
  497. #define MMIO_LC_US_ENGLISH                  9
  498. #define MMIO_DC_US_ENGLISH                  1
  499. #define MMIO_LC_UK_ENGLISH                  9
  500. #define MMIO_DC_UK_ENGLISH                  2
  501. #define MMIO_LC_SPANISH                    10
  502. #define MMIO_DC_SPANISH                     1
  503. #define MMIO_LC_SPANISH_MEXICAN            10
  504. #define MMIO_DC_SPANISH_MEXICAN             2
  505. #define MMIO_LC_FINNISH                    11
  506. #define MMIO_DC_FINNISH                     1
  507. #define MMIO_LC_FRENCH                     12
  508. #define MMIO_DC_FRENCH                      1
  509. #define MMIO_LC_BELGIAN_FRENCH             12
  510. #define MMIO_DC_BELGIAN_FRENCH              2
  511. #define MMIO_LC_CANADIAN_FRENCH            12
  512. #define MMIO_DC_CANADIAN_FRENCH             3
  513. #define MMIO_LC_SWISS_FRENCH               12
  514. #define MMIO_DC_SWISS_FRENCH                4
  515. #define MMIO_LC_HEBREW                     13
  516. #define MMIO_DC_HEBREW                      1
  517. #define MMIO_LC_HUNGARIAN                  14
  518. #define MMIO_DC_HUNGARIAN                   1
  519. #define MMIO_LC_ICELANDIC                  15
  520. #define MMIO_DC_ICELANDIC                   1
  521. #define MMIO_LC_ITALIAN                    16
  522. #define MMIO_DC_ITALIAN                     1
  523. #define MMIO_LC_SWISS_ITALIAN              16
  524. #define MMIO_DC_SWISS_ITALIAN               2
  525. #define MMIO_LC_JAPANESE                   17
  526. #define MMIO_DC_JAPANESE                    1
  527. #define MMIO_LC_KOREAN                     18
  528. #define MMIO_DC_KOREAN                      1
  529. #define MMIO_LC_DUTCH                      19
  530. #define MMIO_DC_DUTCH                       1
  531. #define MMIO_LC_BELGIAN_DUTCH              19
  532. #define MMIO_DC_BELGIAN_DUTCH               2
  533. #define MMIO_LC_NORWEGIAN_BOKMAL           20
  534. #define MMIO_DC_NORWEGIAN_BOKMAL            1
  535. #define MMIO_LC_NORWEGIAN_NYNORSK          20
  536. #define MMIO_DC_NORWEGIAN_NYNORSK           2
  537. #define MMIO_LC_POLISH                     21
  538. #define MMIO_DC_POLISH                      1
  539. #define MMIO_LC_BRAZILIAN_PORTUGUESE       22
  540. #define MMIO_DC_BRAZILIAN_PORTUGUESE        1
  541. #define MMIO_LC_PORTUGUESE                 22
  542. #define MMIO_DC_PORTUGUESE                  2
  543. #define MMIO_LC_RHAETO_ROMANIC             23
  544. #define MMIO_DC_RHAETO_ROMANIC              1
  545. #define MMIO_LC_ROMANIAN                   24
  546. #define MMIO_DC_ROMANIAN                    1
  547. #define MMIO_LC_RUSSIAN                    25
  548. #define MMIO_DC_RUSSIAN                     1
  549. #define MMIO_LC_SERBO_CROATIAN_LATIN       26
  550. #define MMIO_DC_SERBO_CROATIAN_LATIN        1
  551. #define MMIO_LC_SERBO_CROATIAN_CYRILLIC    26
  552. #define MMIO_DC_SERBO_CROATIAN_CYRILLIC     2
  553. #define MMIO_LC_SLOVAK                     27
  554. #define MMIO_DC_SLOVAK                      1
  555. #define MMIO_LC_ALBANIAN                   28
  556. #define MMIO_DC_ALBANIAN                    1
  557. #define MMIO_LC_SWEDISH                    29
  558. #define MMIO_DC_SWEDISH                     1
  559. #define MMIO_LC_THAI                       30
  560. #define MMIO_DC_THAI                        1
  561. #define MMIO_LC_TURKISH                    31
  562. #define MMIO_DC_TURKISH                     1
  563. #define MMIO_LC_URDU                       32
  564. #define MMIO_DC_URDU                        1
  565. #define MMIO_LC_BAHASA                     33
  566. #define MMIO_DC_BAHASA                      1
  567.  
  568. /*
  569.  * Base function prototypes:
  570.  */
  571.  
  572. WORD APIENTRY mmioAdvance( HMMIO hmmio,
  573.                            PMMIOINFO pmmioinfo,
  574.                            WORD wFlags );
  575.  
  576. WORD APIENTRY mmioAscend( HMMIO hmmio,
  577.                           PMMCKINFO pckinfo,
  578.                           WORD wFlags );
  579.  
  580. WORD APIENTRY mmioClose( HMMIO hmmio,
  581.                          WORD wFlags );
  582.  
  583. WORD APIENTRY mmioCreateChunk( HMMIO hmmio,
  584.                                PMMCKINFO pckinfo,
  585.                                WORD wFlags );
  586.  
  587. WORD APIENTRY mmioDescend( HMMIO hmmio,
  588.                            PMMCKINFO pckinfo,
  589.                            PMMCKINFO pckinfoParent,
  590.                            WORD wFlags );
  591.  
  592. WORD APIENTRY mmioFlush( HMMIO hmmio,
  593.                          WORD wFlags );
  594.  
  595. WORD APIENTRY mmioGetInfo( HMMIO hmmio,
  596.                            PMMIOINFO pmmioinfo,
  597.                            WORD wFlags );
  598.  
  599. DWORD APIENTRY mmioGetLastError( HMMIO hmmio );
  600.  
  601. PMMIOPROC APIENTRY mmioInstallIOProc( FOURCC fccIOProc,
  602.                                       PMMIOPROC pIOProc,
  603.                                       DWORD dwflags );
  604.  
  605. LONG APIENTRY mmioIOProc( PMMIOINFO pmmioinfo,
  606.                           WORD wMsg,
  607.                           LONG lParam1,
  608.                           LONG lParam2 );
  609.  
  610. HMMIO APIENTRY mmioOpen( PSZ pszFileName,
  611.                          PMMIOINFO pmmioinfo,
  612.                          DWORD dwOpenFlags );
  613.  
  614. LONG APIENTRY mmioRead( HMMIO hmmio,
  615.                         PSZ pchBuffer,
  616.                         LONG cBytes );
  617.  
  618. LONG APIENTRY mmioSeek( HMMIO hmmio,
  619.                         LONG lOffset,
  620.                         LONG lOrigin );
  621.  
  622. LONG APIENTRY mmioSendMessage( HMMIO hmmio,
  623.                                WORD wMsg,
  624.                                LONG lParam1,
  625.                                LONG lParam2 );
  626.  
  627. WORD APIENTRY mmioSetBuffer( HMMIO hmmio,
  628.                              PSZ pchBuffer,
  629.                              LONG cBytes,
  630.                              WORD wFlags );
  631.  
  632. WORD APIENTRY mmioSetInfo( HMMIO hmmio,
  633.                            PMMIOINFO pmmioinfo,
  634.                            WORD wFlags );
  635.  
  636. FOURCC APIENTRY mmioStringToFOURCC( PSZ pszString,
  637.                                     WORD wFlags );
  638.  
  639. LONG APIENTRY mmioWrite( HMMIO hmmio,
  640.                          PSZ pchBuffer,
  641.                          LONG cBytes );
  642.  
  643. /*
  644.  * Compound File function prototypes:
  645.  */
  646.  
  647. HMMCF APIENTRY mmioCFOpen( PSZ pszFileName,
  648.                            PMMCFINFO pmmcfinfo,
  649.                            PMMIOINFO pmmioinfo,
  650.                            DWORD dwFlags );
  651.  
  652. DWORD APIENTRY mmioCFClose( HMMCF hmmcf,
  653.                             DWORD dwFlags );
  654.  
  655. DWORD APIENTRY mmioCFGetInfo( HMMCF hmmcf,
  656.                               PMMCFINFO pmmcfinfo,
  657.                               DWORD cBytes );
  658.  
  659. DWORD APIENTRY mmioCFSetInfo( HMMCF hmmcf,
  660.                               PMMCFINFO pmmcfinfo,
  661.                               DWORD cBytes );
  662.  
  663. DWORD APIENTRY mmioCFFindEntry( HMMCF hmmcf,
  664.                                 PMMCTOCENTRY pmmctocentry,
  665.                                 DWORD dwFlags );
  666.  
  667. DWORD APIENTRY mmioCFAddEntry( HMMCF hmmcf,
  668.                                PMMCTOCENTRY pmmctocentry,
  669.                                DWORD dwFlags );
  670.  
  671. DWORD APIENTRY mmioCFChangeEntry( HMMCF hmmcf,
  672.                                   PMMCTOCENTRY pmmctocentry,
  673.                                   DWORD dwFlags );
  674.  
  675. DWORD APIENTRY mmioCFDeleteEntry( HMMCF hmmcf,
  676.                                   PMMCTOCENTRY pmmctocentry,
  677.                                   DWORD dwFlags );
  678.  
  679. DWORD APIENTRY mmioCFAddElement( HMMCF hmmcf,
  680.                                  PSZ pszElementName,
  681.                                  FOURCC fccType,
  682.                                  PSZ pchBuffer,
  683.                                  LONG cchBytes,
  684.                                  DWORD dwFlags );
  685.  
  686. DWORD APIENTRY mmioCFCopy( HMMCF hmmcfSource,
  687.                            PSZ pszDestFileName,
  688.                            DWORD dwFlags );
  689.  
  690. /*
  691.  * Conversion Utility function prototypes:
  692.  */
  693.  
  694. DWORD APIENTRY mmioQueryFormatCount( PMMFORMATINFO pmmformatinfo,
  695.                                      PLONG plNumFormats,
  696.                                      DWORD dwReserved,
  697.                                      DWORD dwFlags );
  698.  
  699. DWORD APIENTRY mmioGetFormats( PMMFORMATINFO pmmformatinfo,
  700.                                LONG lNumFormats,
  701.                                PVOID pFormatInfoList,
  702.                                PLONG plFormatsRead,
  703.                                DWORD dwReserved,
  704.                                DWORD dwFlags );
  705.  
  706. DWORD APIENTRY mmioGetFormatName( PMMFORMATINFO pmmformatinfo,
  707.                                   PSZ pszFormatName,
  708.                                   PLONG plBytesRead,
  709.                                   DWORD dwReserved,
  710.                                   DWORD dwFlags );
  711.  
  712. DWORD APIENTRY mmioIdentifyFile( PSZ pszFileName,
  713.                                  PMMIOINFO pmmioinfo,
  714.                                  PMMFORMATINFO pmmformatinfo,
  715.                                  PFOURCC pfccStorageSystem,
  716.                                  DWORD dwReserved,
  717.                                  DWORD dwFlags );
  718.  
  719. DWORD APIENTRY mmioQueryHeaderLength( HMMIO hmmio,
  720.                                       PLONG plHeaderLength,
  721.                                       DWORD dwReserved,
  722.                                       DWORD dwFlags );
  723.  
  724. DWORD APIENTRY mmioGetHeader( HMMIO hmmio,
  725.                               PVOID pHeader,
  726.                               LONG lHeaderLength,
  727.                               PLONG plBytesRead,
  728.                               DWORD dwReserved,
  729.                               DWORD dwFlags );
  730.  
  731. DWORD APIENTRY mmioSetHeader( HMMIO hmmio,
  732.                               PVOID pHeader,
  733.                               LONG lHeaderLength,
  734.                               PLONG plBytesWritten,
  735.                               DWORD dwReserved,
  736.                               DWORD dwFlags );
  737.  
  738. DWORD APIENTRY mmioIniFileHandler( PMMINIFILEINFO pmminifileinfo,
  739.                                    DWORD dwFlags );
  740.  
  741. DWORD APIENTRY mmioIdentifyStorageSystem( PSZ pszFileName,
  742.                                           PMMIOINFO pmmioinfo,
  743.                                           PFOURCC pfccStorageSystem );
  744.  
  745. DWORD APIENTRY mmioDetermineSSIOProc( PSZ pszFileName,
  746.                                       PMMIOINFO pmmioinfo,
  747.                                       PFOURCC pfccStorageSystem,
  748.                                       PSZ pszParsedRemainder );
  749.  
  750. DWORD APIENTRY mmioQueryIOProcModuleHandle( PMMIOPROC pIOProc,
  751.                                             PHMODULE phmodIOProc );
  752.  
  753. #pragma pack()
  754.  
  755. #endif /* _MMIO_H_ */
  756.  
  757.