source: branches/v2.9/JPGPROC/source/iotest.c

Last change on this file was 2, checked in by stevenhl, 8 years ago

Import sources from cwmm-full.zip dated 2005-03-21

File size: 7.6 KB
Line 
1/*
2 * Copyright (c) Chris Wohlgemuth 2002
3 * All rights reserved.
4 *
5 * http://www.geocities.com/SiliconValley/Sector/5785/
6 * http://www.os2world.com/cdwriting
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. The authors name may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 */
32#define INCL_DOSERRORS
33#define INCL_DOSMODULEMGR
34#define INCL_DOSPROCESS
35#define INCL_DOSSEMAPHORES
36#define INCL_DOSMEMMGR
37#define INCL_GPI
38#define INCL_GPICONTROL
39#define INCL_GPILCIDS
40#define INCL_GPIMETAFILES
41#define INCL_GPIPRIMITIVES
42#define INCL_GPIREGIONS
43#define INCL_PM
44#define INCL_WIN
45#define INCL_WINDIALOGS
46#define INCL_WINERRORS
47#define INCL_WINFRAMEMGR
48#define INCL_WINHELP
49#define INCL_WINMENUS
50#define INCL_WINMESSAGEMGR
51#define INCL_WINMLE
52#define INCL_WINPOINTERS
53#define INCL_WINSTDDLGS
54#define INCL_WINSTDFILE
55#define INCL_WINSTDSLIDER
56#define INCL_WINSWITCHLIST
57#define INCL_WINSYS
58#define INCL_WINTIMER
59#define INCL_WINWINDOWMGR
60
61#include <os2.h>
62#include <stdio.h>
63#include <string.h>
64#include <malloc.h>
65#include "mmioos2.h"
66
67char pszFileName[]="";
68
69int main()
70{
71 HBITMAP hbm;
72 MMIOINFO mmioinfo;
73 MMFORMATINFO mmFormatInfo;
74 HMMIO hmmio;
75 ULONG ulImageHeaderLength;
76 MMIMAGEHEADER mmImgHdr;
77 ULONG ulBytesRead;
78 ULONG dwNumRowBytes;
79 PBYTE pRowBuffer;
80 ULONG dwRowCount;
81 SIZEL ImageSize;
82 ULONG dwHeight, dwWidth;
83 SHORT wBitCount;
84 FOURCC fccStorageSystem;
85 ULONG dwPadBytes;
86 ULONG dwRowBits;
87 ULONG ulReturnCode;
88 ULONG dwReturnCode;
89 HBITMAP hbReturnCode;
90 LONG lReturnCode;
91 FOURCC fccIOProc;
92
93#if 0
94 CHAR szBuffer[ sizeof( FOURCC ) + MAX_FILENAME_SIZE + 4 ];
95 LONG lNumIOProcs;
96 MMFORMATINFO mmFormatInfo;
97 PMMFORMATINFO pmmFormatInfoArray;
98 PSZ pszFourccString;
99 ULONG ulReturnCode;
100 LONG lFormatsRead;
101 LONG index;
102 LONG lBytesRead;
103#endif
104
105 printf("in Main\n");
106 ulReturnCode = mmioIdentifyFile ( pszFileName,
107 0L,
108 &mmFormatInfo,
109 &fccStorageSystem,
110 0L,
111 0L);
112
113 /*
114 * If this file was NOT identified, then this function won't
115 * work, so return an error by indicating an empty bitmap.
116 */
117
118 if ( ulReturnCode == MMIO_ERROR )
119 {
120 printf("Can't identify file...\n");
121 return (0L);
122 }
123
124 /*
125 * If mmioIdentifyFile did not find a custom-written IO proc which
126 * can understand the image file, then it will return the DOS IO Proc
127 * info because the image file IS a DOS file.
128 */
129
130 if( mmFormatInfo.fccIOProc == FOURCC_DOS )
131 {
132
133 printf("Image file could not be interpreted by any permanently or temporarily installed IO procedures.\n");
134 return ( 0L );
135 }
136
137 /*
138 * Ensure this is an IMAGE IOproc, and that it can read
139 * translated data
140 */
141
142 if ( (mmFormatInfo.ulMediaType != MMIO_MEDIATYPE_IMAGE) ||
143 ((mmFormatInfo.ulFlags & MMIO_CANREADTRANSLATED) == 0) )
144 {
145 printf("No IMAGE IO Procedures exist which can translate the data in the image file specified.");
146 return (0L);
147 }
148 else
149 {
150 fccIOProc = mmFormatInfo.fccIOProc;
151 }
152
153 /* Clear out and initialize mminfo structure */
154
155 memset ( &mmioinfo,
156 0L,
157 sizeof ( MMIOINFO ) );
158
159 mmioinfo.fccIOProc = fccIOProc;
160 mmioinfo.ulTranslate = MMIO_TRANSLATEHEADER | MMIO_TRANSLATEDATA;
161
162 hmmio = mmioOpen ( (PSZ) pszFileName,
163 &mmioinfo,
164 MMIO_READ | MMIO_DENYWRITE | MMIO_NOIDENTIFY );
165
166 if ( ! hmmio )
167 {
168 /* If file could not be opened, return with error */
169 printf("File can't be opened!\n");
170 return (0L);
171 }
172
173 dwReturnCode = mmioQueryHeaderLength ( hmmio,
174 (PLONG)&ulImageHeaderLength,
175 0L,
176 0L);
177
178 if ( ulImageHeaderLength != sizeof ( MMIMAGEHEADER ) )
179 {
180 /* We have a problem.....possibly incompatible versions */
181 printf("Error in mmioQueryHeaderLength ()\n");
182 ulReturnCode = mmioClose (hmmio, 0L);
183 return (0L);
184 }
185
186 ulReturnCode = mmioGetHeader ( hmmio,
187 &mmImgHdr,
188 (LONG) sizeof ( MMIMAGEHEADER ),
189 (PLONG)&ulBytesRead,
190 0L,
191 0L);
192
193 if ( ulReturnCode != MMIO_SUCCESS )
194 {
195 /* Header unavailable */
196 printf("Can't get header!\n");
197 ulReturnCode = mmioClose (hmmio, 0L);
198
199 return (0L);
200 }
201
202 /*
203 * Determine the number of bytes required, per row.
204 * PLANES MUST ALWAYS BE = 1
205 */
206
207 dwHeight = mmImgHdr.mmXDIBHeader.BMPInfoHeader2.cy;
208 dwWidth = mmImgHdr.mmXDIBHeader.BMPInfoHeader2.cx;
209 wBitCount = mmImgHdr.mmXDIBHeader.BMPInfoHeader2.cBitCount;
210 dwRowBits = dwWidth * mmImgHdr.mmXDIBHeader.BMPInfoHeader2.cBitCount;
211 dwNumRowBytes = dwRowBits >> 3;
212
213 /*
214 * Account for odd bits used in 1bpp or 4bpp images that are
215 * NOT on byte boundaries.
216 */
217
218 if ( dwRowBits % 8 )
219 {
220 dwNumRowBytes++;
221 }
222
223 /*
224 * Ensure the row length in bytes accounts for byte padding.
225 * All bitmap data rows must are aligned on LONG/4-BYTE boundaries.
226 * The data FROM an IOProc should always appear in this form.
227 */
228
229 dwPadBytes = ( dwNumRowBytes % 4 );
230
231 if ( dwPadBytes )
232 {
233 dwNumRowBytes += 4 - dwPadBytes;
234 }
235
236 /* Allocate space for ONE row of pels */
237
238 if ( DosAllocMem( (PPVOID)&pRowBuffer,
239 (ULONG)dwNumRowBytes,
240 fALLOC))
241 {
242 ulReturnCode = mmioClose (hmmio, 0L);
243
244 printf("No memory!!\n");
245 return(0L);
246 }
247
248
249 printf("Done\n");
250 return 0;
251}
252
253
254
255
256
Note: See TracBrowser for help on using the repository browser.