1 //
2 // Chunks.cpp
3 //
4 // The following functions are to assemble a string for each chunk
5 // The function name "Info_????" denote which chunk it handles
6 //
7 // Comments marked @todo@ may, or maynot, be filled in at a later date !
8 //
9 //---------------------------------------------------------------------------
10 #include <vcl.h>
11 #pragma hdrstop
12 #include "Main.h"
13
14 # define xUSE_UNKNOWN // remove "x" to report of "UNKNOWN" - else ""
15
16 # define FFACTOR ((float)100000.0)
17
18 // NB We must use Octal for RichEdit's newlines - MicroSoft love Octal !
19 # define nl "\015\012"
20 # define TAB asTab
21
22 // Ps : If anyone reading this knows how to do this using token
23 // pasting please let me know ! (AP)
24
25 // ConCat newline to string
26 # define NL as = as + nl
27
28 // Integer ARGuement
29 # define IARG( _str_, _int_ )\
30 as = as + TAB + (_str_) + " " + String( _int_ )
31
32 // Bool ARGuement
33 # define BARG( _str_, _bool_ )\
34 if( WantsBool() )\
35 as = as + TAB + (_str_) + " " + ((_bool_) ? "true" : "false");\
36 else\
37 as = as + TAB + (_str_) + " " + IntToStr( _bool_ );
38
39 // Float ARGuement
40 # define FARG( _str_, _float_ )\
41 as = as + TAB + (_str_) + " " + String( _float_ )
42
43 // szText ARGuement
44 # define ZARG( _str_, _sz_ )\
45 as = as + TAB + (_str_) + " \"" + String( _sz_ ) + "\""
46
47 // Concat general strings
48 # define STR( _str_ ) as = as + _str_
49
50 // Concat Hex string
51 # define HEXSTR( _str_ ) as = as + IntToHex(_str_,2)
52
53 // Concat Macro Identifier to ARG
54 #define MI( _str_ ) as = as + TAB + _str_;
55
56 // Concat "(" Comment ")" to ARG
57 #define PCOM( _str_ )\
58 if( WantsComments() ) as = as + TAB + "(" + _str_ + ")";
59
60 // Concat "float(" Comment ")" to ARG
61 #define FPCOM( _str_ )\
62 if( WantsComments() ) as = as + TAB + "float(" + _str_ + ")";
63
64 //---------------------------------------------------------------------------
65 // Macro Identifiers - these, below, are used several times
66 // NB those used once have local #define's and #undef's
67 //---------------------------------------------------------------------------
68
69 # ifdef USE_UNKNOWN
70 # define UNKNOWN "UNKNOWN"
71 # else
72 # define UNKNOWN ""
73 # endif
74 // Does this need two to be more visible ?
75 # define ILLEGAL_VALUE ">> ILLEGAL VALUE << "
76
77 // IHDR, BASI, JHDR, PROM, sPLT
78 # define MI_BITDEPTH( _i_ )\
79 if( WantsMacroIds() )\
80 switch( (_i_) ) {\
81 case MNG_BITDEPTH_1 : MI( "MNG_BITDEPTH_1" ); break;\
82 case MNG_BITDEPTH_2 : MI( "MNG_BITDEPTH_2" ); break;\
83 case MNG_BITDEPTH_4 : MI( "MNG_BITDEPTH_4" ); break;\
84 case MNG_BITDEPTH_8 : MI( "MNG_BITDEPTH_8" ); break;\
85 case MNG_BITDEPTH_16 : MI( "MNG_BITDEPTH_16" ); break;\
86 default : MI(ILLEGAL_VALUE);\
87 }
88
89 // IHDR, BASI, PROM
90 # define MI_COLORTYPE( _i_ )\
91 if( WantsMacroIds() )\
92 switch( (_i_) ) {\
93 case MNG_COLORTYPE_GRAY : MI( "MNG_COLORTYPE_GRAY" ); break;\
94 case MNG_COLORTYPE_RGB : MI( "MNG_COLORTYPE_RGB" ); break;\
95 case MNG_COLORTYPE_INDEXED : MI( "MNG_COLORTYPE_INDEXED" ); break;\
96 case MNG_COLORTYPE_GRAYA : MI( "MNG_COLORTYPE_GRAYA" ); break;\
97 case MNG_COLORTYPE_RGBA : MI( "MNG_COLORTYPE_RGBA" ); break;\
98 default : MI(ILLEGAL_VALUE);\
99 }
100
101 // IHDR, zTXt, iTXt, iCCP, BASI, JHDR
102 # define MI_COMPRESSION_DEFLATE( _i_ )\
103 if( WantsMacroIds() ) {\
104 if( (_i_) == MNG_COMPRESSION_DEFLATE ) {\
105 MI( "MNG_COMPRESSION_DEFLATE" );\
106 } else {\
107 MI( ILLEGAL_VALUE );\
108 }\
109 }
110
111 // IHDR, BASI, JHDR
112 # define MI_FILTER( _i_ )\
113 if( WantsMacroIds() )\
114 switch( _i_ ) {\
115 case MNG_FILTER_ADAPTIVE : MI( "MNG_FILTER_ADAPTIVE" ); break;\
116 case MNG_FILTER_NO_ADAPTIVE : MI( "MNG_FILTER_NO_ADAPTIVE" ); break;\
117 case MNG_FILTER_DIFFERING : MI( "MNG_FILTER_DIFFERING" ); break;\
118 case MNG_FILTER_MASK : MI( "MNG_FILTER_MASK" ); break;\
119 default : MI(UNKNOWN);\
120 }
121 //NB MNG_FILTER_NO_DIFFERING == MNG_FILTER_ADAPTIVE
122
123 // IHDR, BASI, JHDR
124 #define MI_INTERLACE( _i_ )\
125 if( WantsMacroIds() ) {\
126 if( (_i_) == MNG_INTERLACE_NONE ) {\
127 MI( "MNG_INTERLACE_NONE" )\
128 } else if( (_i_) == MNG_INTERLACE_ADAM7 ) {\
129 MI( "MNG_INTERLACE_ADAM7" );\
130 } else { MI(ILLEGAL_VALUE);} \
131 }
132
133 // pHYs, pHYg
134 #define MI_UNITS( _i_ )\
135 if( WantsMacroIds() ) {\
136 if( (_i_) == MNG_UNIT_UNKNOWN ) {\
137 MI( "MNG_UNIT_UNKNOWN" )\
138 } else if( (_i_) == MNG_UNIT_METER ) {\
139 MI( "MNG_UNIT_METER" );\
140 } else { MI(UNKNOWN);} \
141 }
142
143 // CLON & MOVE
144 #define MI_LOCATION( _i_ )\
145 if( WantsMacroIds() ) {\
146 if( (_i_) == MNG_LOCATION_ABSOLUTE ) {\
147 MI( "MNG_LOCATION_ABSOLUTE" )\
148 } else if( (_i_) == MNG_LOCATION_RELATIVE ) {\
149 MI( "MNG_LOCATION_RELATIVE" );\
150 } else { MI(ILLEGAL_VALUE);} \
151 }
152
153 //---------------------------------------------------------------------------
Info_BACK(mng_handle hMNG,mng_handle hChunk,String & as)154 bool __fastcall TMainForm::Info_BACK( mng_handle hMNG, mng_handle hChunk, String &as )
155 {
156 // NB for BACKGROUND other values are only advisory
157 #define MI_BACKGROUND( _i_ )\
158 if( WantsMacroIds() ) {\
159 if( (_i_) == MNG_BACKGROUNDCOLOR_MANDATORY ) {\
160 MI( "MNG_BACKGROUNDCOLOR_MANDATORY" )\
161 } else if( (_i_) == MNG_BACKGROUNDIMAGE_MANDATORY ) {\
162 MI( "MNG_BACKGROUNDIMAGE_MANDATORY" );\
163 } \
164 }
165
166 # define MI_BACKGROUND_TILE( _i_ )\
167 if( WantsMacroIds() )\
168 switch( _i_ ) {\
169 case MNG_BACKGROUNDIMAGE_NOTILE : MI( "MNG_BACKGROUNDIMAGE_NOTILE" ); break;\
170 case MNG_BACKGROUNDIMAGE_TILE : MI( "MNG_BACKGROUNDIMAGE_TILE" ); break;\
171 default : MI(UNKNOWN);\
172 }
173 mng_uint16 iRed;
174 mng_uint16 iGreen;
175 mng_uint16 iBlue;
176 mng_uint8 iMandatory;
177 mng_uint16 iImageid;
178 mng_uint8 iTile;
179
180 if( mng_getchunk_back( hMNG, hChunk,
181 &iRed, &iGreen, &iBlue,
182 &iMandatory, &iImageid, &iTile ) != 0 )
183 return false;
184
185 IARG( "iRed", iRed );
186 NL; IARG( "iGreen",iGreen );
187 NL; IARG( "iBlue", iBlue );
188 NL; IARG( "iMandatory", iMandatory ); MI_BACKGROUND( iMandatory );
189 NL; IARG( "iImageid", iImageid );
190 NL; IARG( "iTile", iTile ); MI_BACKGROUND_TILE( iTile );
191
192 return true;
193 # undef MI_BACKGROUND
194 # undef MI_BACKGROUND_TILE
195 }
196 //---------------------------------------------------------------------------
Info_BASI(mng_handle hMNG,mng_handle hChunk,String & as)197 bool __fastcall TMainForm::Info_BASI( mng_handle hMNG, mng_handle hChunk, String &as )
198 {
199 #define MI_VIEWABLE( _i_ )\
200 if( WantsMacroIds() ) {\
201 if( (_i_) == MNG_NOTVIEWABLE ) {\
202 MI( "MNG_NOTVIEWABLE" )\
203 } else if( (_i_) == MNG_VIEWABLE ) {\
204 MI( "MNG_VIEWABLE" );\
205 } else { MI(UNKNOWN);} \
206 }
207 mng_uint32 iWidth;
208 mng_uint32 iHeight;
209 mng_uint8 iBitdepth;
210 mng_uint8 iColortype;
211 mng_uint8 iCompression;
212 mng_uint8 iFilter;
213 mng_uint8 iInterlace;
214 mng_uint16 iRed;
215 mng_uint16 iGreen;
216 mng_uint16 iBlue;
217 mng_uint16 iAlpha;
218 mng_uint8 iViewable;
219
220 if( mng_getchunk_basi( hMNG, hChunk,
221 &iWidth, &iHeight, &iBitdepth, &iColortype,
222 &iCompression, &iFilter, &iInterlace,
223 &iRed, &iGreen, &iBlue, &iAlpha,
224 &iViewable ) != 0 )
225 return false;
226
227 IARG( "iWidth", iWidth );
228 NL; IARG( "iHeight", iHeight );
229 NL; IARG( "iBitdepth", iBitdepth ); MI_BITDEPTH( iBitdepth );
230 NL; IARG( "iColortype", iColortype ); MI_COLORTYPE( iColortype );
231 NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression );
232 NL; IARG( "iFilter", iFilter ); MI_FILTER( iFilter );
233 NL; IARG( "iInterlace", iInterlace ); MI_INTERLACE( iInterlace );
234 NL; IARG( "iRed", iRed );
235 NL; IARG( "iGreen", iGreen );
236 NL; IARG( "iBlue", iBlue );
237 NL; IARG( "iAlpha", iAlpha );
238 NL; IARG( "iViewable", iViewable ); MI_VIEWABLE( iViewable );
239
240 return true;
241 # undef MI_VIEWABLE
242 }
243 //---------------------------------------------------------------------------
Info_CLIP(mng_handle hMNG,mng_handle hChunk,String & as)244 bool __fastcall TMainForm::Info_CLIP( mng_handle hMNG, mng_handle hChunk, String &as )
245 {
246 # define MI_CLIPPING( _i_ )\
247 if( WantsMacroIds() )\
248 switch( _i_ ) {\
249 case MNG_CLIPPING_ABSOLUTE : MI( "MNG_CLIPPING_ABSOLUTE" ); break;\
250 case MNG_CLIPPING_RELATIVE : MI( "MNG_CLIPPING_RELATIVE" ); break;\
251 default : MI(UNKNOWN);\
252 }
253
254 mng_uint16 iFirstid;
255 mng_uint16 iLastid;
256 mng_uint8 iCliptype;
257 mng_int32 iClipl;
258 mng_int32 iClipr;
259 mng_int32 iClipt;
260 mng_int32 iClipb;
261
262 if( mng_getchunk_clip( hMNG, hChunk,
263 &iFirstid, &iLastid,
264 &iCliptype, &iClipl, &iClipr, &iClipt, &iClipb ) != 0 )
265 return false;
266
267 IARG( "iFirstid", iFirstid );
268 NL; IARG( "iLastid", iLastid );
269 NL; IARG( "iCliptype", iCliptype ); MI_CLIPPING( iCliptype );
270 NL; IARG( "iClipl", iClipl );
271 NL; IARG( "iClipr", iClipr );
272 NL; IARG( "iClipt", iClipt );
273 NL; IARG( "iClipb", iClipb );
274
275 return true;
276 # undef MI_CLIPPING
277 }
278 //---------------------------------------------------------------------------
Info_CLON(mng_handle hMNG,mng_handle hChunk,String & as)279 bool __fastcall TMainForm::Info_CLON( mng_handle hMNG, mng_handle hChunk, String &as )
280 {
281 # define MI_CLONTYPE( _i_ )\
282 if( WantsMacroIds() )\
283 switch( (_i_) ) {\
284 case MNG_FULL_CLONE : MI( "MNG_FULL_CLONE" ); break;\
285 case MNG_PARTIAL_CLONE : MI( "MNG_PARTIAL_CLONE" ); break;\
286 case MNG_RENUMBER : MI( "MNG_RENUMBER" ); break;\
287 default : MI(UNKNOWN);\
288 }
289
290 #define MI_CLON_CONCRETE( _i_ )\
291 if( WantsMacroIds() ) {\
292 if( (_i_) == MNG_CONCRETE_ASPARENT ) {\
293 MI( "MNG_CONCRETE_ASPARENT" )\
294 } else if( (_i_) == MNG_CONCRETE_MAKEABSTRACT ) {\
295 MI( "MNG_CONCRETE_MAKEABSTRACT" );\
296 } else { MI(UNKNOWN);} \
297 }
298
299 mng_uint16 iSourceid;
300 mng_uint16 iCloneid;
301 mng_uint8 iClonetype;
302 mng_uint8 iDonotshow;
303 mng_uint8 iConcrete;
304 mng_bool bHasloca;
305 mng_uint8 iLocationtype;
306 mng_int32 iLocationx;
307 mng_int32 iLocationy;
308
309 if( mng_getchunk_clon( hMNG, hChunk,
310 &iSourceid, &iCloneid, &iClonetype, &iDonotshow,
311 &iConcrete, &bHasloca,
312 &iLocationtype, &iLocationx, &iLocationy ) != 0 )
313 return false;
314
315 IARG( "iSourceid", iSourceid );
316 NL; IARG( "iCloneid", iCloneid );
317 NL; IARG( "iClonetype", iClonetype ); MI_CLONTYPE( iClonetype );
318 NL; IARG( "iDonotshow", iDonotshow );
319 NL; IARG( "iConcrete", iConcrete ); MI_CLON_CONCRETE( iConcrete );
320 NL; BARG( "bHasloca", bHasloca );
321 NL; IARG( "iLocationtype", iLocationtype ); MI_LOCATION( iLocationtype );
322 NL; IARG( "iLocationx", iLocationx );
323 NL; IARG( "iLocationy", iLocationy );
324
325 return true;
326 # undef MI_CLONTYPE
327 # undef MI_CLON_CONCRETE
328 }
329 //---------------------------------------------------------------------------
Info_DBYK(mng_handle hMNG,mng_handle hChunk,String & as)330 bool __fastcall TMainForm::Info_DBYK( mng_handle hMNG, mng_handle hChunk, String &as )
331 {
332 # define MI_POLARITY( _i_ )\
333 if( WantsMacroIds() )\
334 switch( _i_ ) {\
335 case MNG_POLARITY_ONLY : MI( "MNG_POLARITY_ONLY" ); break;\
336 case MNG_POLARITY_ALLBUT : MI( "MNG_POLARITY_ALLBUT" ); break;\
337 default : MI(UNKNOWN);\
338 }
339 mng_chunkid iChunkname;
340 mng_uint8 iPolarity;
341 mng_uint32 iKeywordssize;
342 mng_pchar zKeywords;
343
344 if( mng_getchunk_dbyk( hMNG, hChunk,
345 &iChunkname, &iPolarity, &iKeywordssize, &zKeywords ) != 0 )
346 return false;
347
348 IARG( "iChunkname", iChunkname ); // show chunk name ? @todo@
349 NL; IARG( "iPolarity", iPolarity ); MI_POLARITY( iPolarity );
350 NL; IARG( "iKeywordssize", iKeywordssize );
351 NL; ZARG( "zKeywords", zKeywords );
352
353 return true;
354 # undef MI_POLARITY
355 }
356 //---------------------------------------------------------------------------
Info_DEFI(mng_handle hMNG,mng_handle hChunk,String & as)357 bool __fastcall TMainForm::Info_DEFI( mng_handle hMNG, mng_handle hChunk, String &as )
358 {
359 #define MI_DONOTSHOW( _i_ )\
360 if( WantsMacroIds() ) {\
361 if( (_i_) == MNG_DONOTSHOW_VISIBLE ) {\
362 MI( "MNG_DONOTSHOW_VISIBLE" )\
363 } else if( (_i_) == MNG_DONOTSHOW_NOTVISIBLE ) {\
364 MI( "MNG_DONOTSHOW_NOTVISIBLE" );\
365 }\
366 }
367
368 #define MI_DEFI_CONCRETE( _i_ )\
369 if( WantsMacroIds() ) {\
370 if( (_i_) == MNG_ABSTRACT ) {\
371 MI( "MNG_ABSTRACT" )\
372 } else if( (_i_) == MNG_CONCRETE ) {\
373 MI( "MNG_CONCRETE" );\
374 }\
375 }
376 mng_uint16 iObjectid;
377 mng_uint8 iDonotshow;
378 mng_uint8 iConcrete;
379 mng_bool bHasloca;
380 mng_int32 iXlocation;
381 mng_int32 iYlocation;
382 mng_bool bHasclip;
383 mng_int32 iLeftcb;
384 mng_int32 iRightcb;
385 mng_int32 iTopcb;
386 mng_int32 iBottomcb;
387
388 if( mng_getchunk_defi( hMNG, hChunk,
389 &iObjectid, &iDonotshow, &iConcrete,
390 &bHasloca, &iXlocation, &iYlocation,
391 &bHasclip, &iLeftcb, &iRightcb, &iTopcb, &iBottomcb ) != 0 )
392 return false;
393
394 IARG( "iObjectid", iObjectid );
395 NL; IARG( "iDonotshow", iDonotshow ); MI_DONOTSHOW( iDonotshow );
396 NL; IARG( "iConcrete", iConcrete ); MI_DEFI_CONCRETE( iConcrete );
397 NL; BARG( "bHasloca", bHasloca );
398 NL; IARG( "iXlocation", iXlocation );
399 NL; IARG( "iYlocation", iYlocation );
400 NL; BARG( "bHasclip", bHasclip );
401 NL; IARG( "iLeftcb", iLeftcb );
402 NL; IARG( "iRightcb", iRightcb );
403 NL; IARG( "iTopcb", iTopcb );
404 NL; IARG( "iBottomcb", iBottomcb );
405
406 return true;
407 # undef MI_DONOTSHOW
408 # undef MI_DEFI_CONCRETE
409 }
410 //---------------------------------------------------------------------------
Info_DHDR(mng_handle hMNG,mng_handle hChunk,String & as)411 bool __fastcall TMainForm::Info_DHDR( mng_handle hMNG, mng_handle hChunk, String &as )
412 {
413 # define MI_IMAGETYPE( _i_ )\
414 if( WantsMacroIds() )\
415 switch( _i_ ) {\
416 case MNG_IMAGETYPE_UNKNOWN : MI( "MNG_IMAGETYPE_UNKNOWN" ); break;\
417 case MNG_IMAGETYPE_PNG : MI( "MNG_IMAGETYPE_PNG" ); break;\
418 case MNG_IMAGETYPE_JNG : MI( "MNG_IMAGETYPE_JNG" ); break;\
419 default : MI(UNKNOWN);\
420 }
421
422 # define MI_DELTATYPE( _i_ )\
423 if( WantsMacroIds() )\
424 switch( _i_ ) {\
425 case MNG_DELTATYPE_REPLACE : MI( "MNG_DELTATYPE_REPLACE" ); break;\
426 case MNG_DELTATYPE_BLOCKPIXELADD : MI( "MNG_DELTATYPE_BLOCKPIXELADD" ); break;\
427 case MNG_DELTATYPE_BLOCKALPHAADD : MI( "MNG_DELTATYPE_BLOCKALPHAADD" ); break;\
428 case MNG_DELTATYPE_BLOCKCOLORADD : MI( "MNG_DELTATYPE_BLOCKCOLORADD" ); break;\
429 case MNG_DELTATYPE_BLOCKPIXELREPLACE : MI( "MNG_DELTATYPE_BLOCKPIXELREPLACE" ); break;\
430 case MNG_DELTATYPE_BLOCKALPHAREPLACE : MI( "MNG_DELTATYPE_BLOCKALPHAREPLACE" ); break;\
431 case MNG_DELTATYPE_BLOCKCOLORREPLACE : MI( "MNG_DELTATYPE_BLOCKCOLORREPLACE" ); break;\
432 case MNG_DELTATYPE_NOCHANGE : MI( "MNG_DELTATYPE_NOCHANGE" ); break;\
433 default : MI(UNKNOWN);\
434 }
435
436 mng_uint16 iObjectid;
437 mng_uint8 iImagetype;
438 mng_uint8 iDeltatype;
439 mng_uint32 iBlockwidth;
440 mng_uint32 iBlockheight;
441 mng_uint32 iBlockx;
442 mng_uint32 iBlocky;
443
444 if( mng_getchunk_dhdr( hMNG, hChunk,
445 &iObjectid, &iImagetype, &iDeltatype,
446 &iBlockwidth, &iBlockheight, &iBlockx, &iBlocky ) != 0 )
447 return false;
448
449 IARG( "iObjectid", iObjectid );
450 NL; IARG( "iImagetype", iImagetype ); MI_IMAGETYPE( iImagetype );
451 NL; IARG( "iDeltatype", iDeltatype ); MI_DELTATYPE( iDeltatype );
452 NL; IARG( "iBlockwidth", iBlockwidth );
453 NL; IARG( "iBlockheight", iBlockheight );
454 NL; IARG( "iBlockx", iBlockx );
455 NL; IARG( "iBlocky", iBlocky );
456
457 return true;
458 # undef MI_IMAGETYPE
459 # undef MI_DELTATYPE
460 }
461 //---------------------------------------------------------------------------
Info_DISC(mng_handle hMNG,mng_handle hChunk,String & as)462 bool __fastcall TMainForm::Info_DISC( mng_handle hMNG, mng_handle hChunk, String &as )
463 {
464 mng_uint32 iCount;
465 mng_uint16p pObjectids;
466
467 if( mng_getchunk_disc( hMNG, hChunk, &iCount, &pObjectids ) != 0 )
468 return false;
469
470 IARG( "iCount", iCount );
471 //pObjectids pObjectids
472
473 return true;
474 }
475 //---------------------------------------------------------------------------
Info_DROP(mng_handle hMNG,mng_handle hChunk,String & as)476 bool __fastcall TMainForm::Info_DROP( mng_handle hMNG, mng_handle hChunk, String &as )
477 {
478 mng_uint32 iCount;
479 mng_chunkidp pChunknames;
480
481 if( mng_getchunk_drop( hMNG, hChunk, &iCount, &pChunknames ) != 0 )
482 return false;
483
484 IARG( "iCount", iCount );
485 // pChunknamesp Chunknames // Iterate chunk names ? @todo@
486
487 return true;
488 }
489 //---------------------------------------------------------------------------
Info_ENDL(mng_handle hMNG,mng_handle hChunk,String & as)490 bool __fastcall TMainForm::Info_ENDL( mng_handle hMNG, mng_handle hChunk, String &as )
491 {
492 mng_uint8 iLevel;
493
494 if( mng_getchunk_endl( hMNG, hChunk, &iLevel ) != 0 )
495 return false;
496
497 IARG( "iLevel", iLevel );
498
499 return true;
500 }
501 //---------------------------------------------------------------------------
Info_FRAM(mng_handle hMNG,mng_handle hChunk,String & as)502 bool __fastcall TMainForm::Info_FRAM( mng_handle hMNG, mng_handle hChunk, String &as )
503 {
504 # define MI_BOUNDARY( _i_ )\
505 if( WantsMacroIds() )\
506 switch( _i_ ) {\
507 case MNG_BOUNDARY_ABSOLUTE : MI( "MNG_BOUNDARY_ABSOLUTE" ); break;\
508 case MNG_BOUNDARY_RELATIVE : MI( "MNG_BOUNDARY_RELATIVE" ); break;\
509 default : MI(UNKNOWN);\
510 }
511
512 # define MI_FRAMINGMODE( _i_ )\
513 if( WantsMacroIds() )\
514 switch( _i_ ) {\
515 case MNG_FRAMINGMODE_NOCHANGE : MI( "MNG_FRAMINGMODE_NOCHANGE" ); break;\
516 case MNG_FRAMINGMODE_1 : MI( "MNG_FRAMINGMODE_1" ); break;\
517 case MNG_FRAMINGMODE_2 : MI( "MNG_FRAMINGMODE_2" ); break;\
518 case MNG_FRAMINGMODE_3 : MI( "MNG_FRAMINGMODE_3" ); break;\
519 case MNG_FRAMINGMODE_4 : MI( "MNG_FRAMINGMODE_4" ); break;\
520 default : MI(UNKNOWN);\
521 }
522
523 # define MI_CHANGEDELAY( _i_ )\
524 if( WantsMacroIds() )\
525 switch( _i_ ) {\
526 case MNG_CHANGEDELAY_NO : MI( "MNG_CHANGEDELAY_NO" ); break;\
527 case MNG_CHANGEDELAY_NEXTSUBFRAME : MI( "MNG_CHANGEDELAY_NEXTSUBFRAME" ); break;\
528 case MNG_CHANGEDELAY_DEFAULT : MI( "MNG_CHANGEDELAY_DEFAULT" ); break;\
529 default : MI(UNKNOWN);\
530 }
531
532 # define MI_CHANGETIMOUT( _i_ )\
533 if( WantsMacroIds() )\
534 switch( _i_ ) {\
535 case MNG_CHANGETIMOUT_NO : MI( "MNG_CHANGETIMOUT_NO" ); break;\
536 case MNG_CHANGETIMOUT_DETERMINISTIC_1 : MI( "MNG_CHANGETIMOUT_DETERMINISTIC_1" ); break;\
537 case MNG_CHANGETIMOUT_DETERMINISTIC_2 : MI( "MNG_CHANGETIMOUT_DETERMINISTIC_2" ); break;\
538 case MNG_CHANGETIMOUT_DECODER_1 : MI( "MNG_CHANGETIMOUT_DECODER_1" ); break;\
539 case MNG_CHANGETIMOUT_DECODER_2 : MI( "MNG_CHANGETIMOUT_DECODER_2" ); break;\
540 case MNG_CHANGETIMOUT_USER_1 : MI( "MNG_CHANGETIMOUT_USER_1" ); break;\
541 case MNG_CHANGETIMOUT_USER_2 : MI( "MNG_CHANGETIMOUT_USER_2" ); break;\
542 case MNG_CHANGETIMOUT_EXTERNAL_1 : MI( "MNG_CHANGETIMOUT_EXTERNAL_1" ); break;\
543 case MNG_CHANGETIMOUT_EXTERNAL_2 : MI( " MNG_CHANGETIMOUT_EXTERNAL_2" ); break;\
544 default : MI(UNKNOWN);\
545 }
546
547 # define MI_CHANGECLIPPING( _i_ )\
548 if( WantsMacroIds() )\
549 switch( _i_ ) {\
550 case MNG_CHANGECLIPPING_NO : MI( "MNG_CHANGECLIPPING_NO" ); break;\
551 case MNG_CHANGECLIPPING_NEXTSUBFRAME : MI( "MNG_CHANGECLIPPING_NEXTSUBFRAME" ); break;\
552 case MNG_CHANGECLIPPING_DEFAULT : MI( "MNG_CHANGECLIPPING_DEFAULT" ); break;\
553 default : MI(UNKNOWN);\
554 }
555
556 # define MI_CHANGESYNCID( _i_ )\
557 if( WantsMacroIds() )\
558 switch( _i_ ) {\
559 case MNG_CHANGESYNCID_NO : MI( "MNG_CHANGESYNCID_NO" ); break;\
560 case MNG_CHANGESYNCID_NEXTSUBFRAME : MI( "MNG_CHANGESYNCID_NEXTSUBFRAME" ); break;\
561 case MNG_CHANGESYNCID_DEFAULT : MI( "MNG_CHANGESYNCID_DEFAULT" ); break;\
562 default : MI(UNKNOWN);\
563 }
564
565 mng_bool bEmpty;
566 mng_uint8 iMode;
567 mng_uint32 iNamesize;
568 mng_pchar zName;
569 mng_uint8 iChangedelay;
570 mng_uint8 iChangetimeout;
571 mng_uint8 iChangeclipping;
572 mng_uint8 iChangesyncid;
573 mng_uint32 iDelay;
574 mng_uint32 iTimeout;
575 mng_uint8 iBoundarytype;
576 mng_int32 iBoundaryl;
577 mng_int32 iBoundaryr;
578 mng_int32 iBoundaryt;
579 mng_int32 iBoundaryb;
580 mng_uint32 iCount;
581 mng_uint32p pSyncids;
582
583 if( mng_getchunk_fram( hMNG, hChunk,
584 &bEmpty, &iMode, &iNamesize, &zName,
585 &iChangedelay, &iChangetimeout, &iChangeclipping, &iChangesyncid,
586 &iDelay, &iTimeout,
587 &iBoundarytype, &iBoundaryl, &iBoundaryr,&iBoundaryt, &iBoundaryb,
588 &iCount, &pSyncids ) != 0 )
589 return false;
590
591 BARG( "bEmpty", bEmpty );
592 NL; IARG( "iMode", iMode ); MI_FRAMINGMODE( iMode );
593 NL; IARG( "iNamesize", iNamesize );
594 NL; ZARG( "zName", zName );
595 NL; IARG( "iChangedelay", iChangedelay ); MI_CHANGEDELAY( iChangedelay );
596 NL; IARG( "iChangetimeout", iChangetimeout ); MI_CHANGETIMOUT( iChangetimeout );
597 NL; IARG( "iChangeclipping", iChangeclipping ); MI_CHANGECLIPPING( iChangeclipping );
598 NL; IARG( "iChangesyncid", iChangesyncid ); MI_CHANGESYNCID( iChangesyncid );
599 NL; IARG( "iDelay", iDelay );
600 NL; IARG( "iTimeout", iTimeout );
601 NL; IARG( "iBoundarytype", iBoundarytype ); MI_BOUNDARY( iBoundarytype );
602 NL; IARG( "iBoundaryl", iBoundaryl );
603 NL; IARG( "iBoundaryr", iBoundaryr );
604 NL; IARG( "iBoundaryt", iBoundaryt );
605 NL; IARG( "iBoundaryb", iBoundaryb );
606 NL; IARG( "iCount", iCount );
607 //pSyncids pSyncids @todo@
608
609 return true;
610 # undef MI_BOUNDARY
611 # undef MI_FRAMINGMODE
612 # undef MI_CHANGEDELAY
613 # undef MI_CHANGETIMOUT
614 # undef MI_CHANGECLIPPING
615 # undef MI_CHANGESYNCID
616 }
617 //---------------------------------------------------------------------------
Info_IDAT(mng_handle hMNG,mng_handle hChunk,String & as)618 bool __fastcall TMainForm::Info_IDAT( mng_handle hMNG, mng_handle hChunk, String &as )
619 {
620 mng_uint32 iRawlen;
621 mng_ptr pRawdata;
622
623 if( mng_getchunk_idat( hMNG, hChunk, &iRawlen, &pRawdata ) != 0 )
624 return false;
625
626 IARG( "iRawlen", iRawlen );
627
628 if( WantsRawData() ) {
629 Byte *bp = (Byte*)pRawdata;
630
631 NL; STR( TAB + "Rawdata : " );
632 // show the first 16 bytes, as hex
633 for( int n = 0; n < 16; n +=1 )
634 HEXSTR( (int)bp[n] ) + " ";
635 }
636
637 return true;
638 }
639 //---------------------------------------------------------------------------
Info_IEND(mng_handle hMNG,mng_handle hChunk,String & as)640 bool __fastcall TMainForm::Info_IEND( mng_handle hMNG, mng_handle hChunk, String &as )
641 {
642 NL + TAB; STR( "End of Image." );
643 return true;
644 }
645 //---------------------------------------------------------------------------
Info_IHDR(mng_handle hMNG,mng_handle hChunk,String & as)646 bool __fastcall TMainForm::Info_IHDR(
647 mng_handle hMNG, mng_handle hChunk, String &as )
648 {
649 mng_uint32 iWidth;
650 mng_uint32 iHeight;
651 mng_uint8 iBitdepth;
652 mng_uint8 iColortype;
653 mng_uint8 iCompression;
654 mng_uint8 iFilter;
655 mng_uint8 iInterlace;
656
657 if( mng_getchunk_ihdr( hMNG, hChunk, &iWidth, &iHeight, &iBitdepth,
658 &iColortype, &iCompression, &iFilter, &iInterlace ) != 0 )
659 return false;
660
661 IARG( "iWidth", iWidth );
662 NL; IARG( "iHeight", iHeight );
663 NL; IARG( "iBitdepth", iBitdepth ); MI_BITDEPTH( iBitdepth );
664 NL; IARG( "iColortype", iColortype ); MI_COLORTYPE( iColortype );
665 NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression );
666 NL; IARG( "iFilter", iFilter ); MI_FILTER( iFilter );
667 NL; IARG( "iInterlace", iInterlace ); MI_INTERLACE( iInterlace );
668
669 if( WantsComments() )
670 {
671 NL; NL + TAB;
672 switch( iColortype ) {
673 case MNG_COLORTYPE_GRAY :
674 switch( iBitdepth ) {
675 case 1 : case 2 : case 4 : case 8 : case 16 :
676 STR( "Each pixel value is a greyscale level -" );
677 } // inner switch
678 break;
679 case MNG_COLORTYPE_RGB :
680 switch( iBitdepth ) {
681 case 8 : case 16 :
682 STR( "Each pixel value is an R,G,B series -" );
683 } // inner switch
684 break;
685 case MNG_COLORTYPE_INDEXED :
686 switch( iBitdepth ) {
687 case 1 : case 2 : case 4 : case 8 :
688 STR( "Each pixel value is a palette index -" );
689 } // inner switch
690 break;
691 case MNG_COLORTYPE_GRAYA :
692 switch( iBitdepth ) {
693 case 8 : case 16 :
694 STR( "Each pixel value is a greyscale level, "\
695 "followed by an Alpha channel level -" );
696 } // inner switch
697 break;
698 case MNG_COLORTYPE_RGBA :
699 switch( iBitdepth ){
700 case 8 : case 16:
701 STR( "Each pixel value is an R,G,B "\
702 "series, followed by an Alpha channel level -" );
703 } // inner switch
704 break;
705 }
706 STR( " " + String(iBitdepth) + " bits per pixel." );
707 }
708
709 return true;
710 }
711 //---------------------------------------------------------------------------
Info_JDAT(mng_handle hMNG,mng_handle hChunk,String & as)712 bool __fastcall TMainForm::Info_JDAT( mng_handle hMNG, mng_handle hChunk, String &as )
713 {
714 mng_uint32 iRawlen;
715 mng_ptr pRawdata = NULL;
716
717 if( mng_getchunk_jdat( hMNG, hChunk, &iRawlen, &pRawdata ) != 0 )
718 return false;
719
720 IARG( "iRawlen", iRawlen );
721
722 if( WantsRawData() ) {
723 Byte *bp = (Byte*)pRawdata;
724
725 NL; STR( TAB + "Rawdata : " );
726 // show the first 16 bytes, as hex
727 for( int n = 0; n < 16; n +=1 )
728 HEXSTR( (int)bp[n] ) + " ";
729 }
730
731 return true;
732 }
733 //---------------------------------------------------------------------------
Info_JHDR(mng_handle hMNG,mng_handle hChunk,String & as)734 bool __fastcall TMainForm::Info_JHDR( mng_handle hMNG, mng_handle hChunk, String &as )
735 {
736 # define MI_JPEG_COLORTYPE( _i_ )\
737 if( WantsMacroIds() ) {\
738 switch( _i_ ){\
739 case MNG_COLORTYPE_JPEGGRAY : MI( "MNG_COLORTYPE_JPEGGRAY");break;\
740 case MNG_COLORTYPE_JPEGCOLOR : MI( "MNG_COLORTYPE_JPEGCOLOR");break;\
741 case MNG_COLORTYPE_JPEGGRAYA : MI( "MNG_COLORTYPE_JPEGGRAYA");break;\
742 case MNG_COLORTYPE_JPEGCOLORA : MI( "MNG_COLORTYPE_JPEGCOLORA");break;\
743 default : MI(UNKNOWN);\
744 }\
745 }
746
747 # define MI_JPEG_BITDEPTH( _i_ )\
748 if( WantsMacroIds() ) {\
749 switch( _i_ ){\
750 case MNG_BITDEPTH_JPEG8 : MI("MNG_BITDEPTH_JPEG8");break;\
751 case MNG_BITDEPTH_JPEG12 : MI("MNG_BITDEPTH_JPEG12");break;\
752 case MNG_BITDEPTH_JPEG8AND12 : MI("MNG_BITDEPTH_JPEG8AND12");break;\
753 default : MI(UNKNOWN);\
754 }\
755 }
756
757 # define MI_JPEGCOMPRESSION( _i_ )\
758 if( WantsMacroIds() ) {\
759 if( iImagecompression == MNG_COMPRESSION_BASELINEJPEG ) {\
760 MI( "MNG_COMPRESSION_BASELINEJPEG" );\
761 } else { MI(ILLEGAL_VALUE); };\
762 }
763
764 # define MI_JPEGINTERLACE( _i_ )\
765 if( WantsMacroIds() ) {\
766 if( iImageinterlace == MNG_INTERLACE_SEQUENTIAL ) {\
767 MI( "MNG_INTERLACE_SEQUENTIAL");\
768 } else {\
769 MI( "MNG_INTERLACE_PROGRESSIVE" );\
770 }\
771 }
772
773 // NB alpha bitdepth is not png bitdepth because it can be 0 (zero)
774 # define MI_ALPHABITDEPTH( _i_ )\
775 if( WantsMacroIds() )\
776 switch( (_i_) ) {\
777 case MNG_BITDEPTH_1 : MI( "MNG_BITDEPTH_1" ); break;\
778 case MNG_BITDEPTH_2 : MI( "MNG_BITDEPTH_2" ); break;\
779 case MNG_BITDEPTH_4 : MI( "MNG_BITDEPTH_4" ); break;\
780 case MNG_BITDEPTH_8 : MI( "MNG_BITDEPTH_8" ); break;\
781 case MNG_BITDEPTH_16 : MI( "MNG_BITDEPTH_16" ); break;\
782 case 0 : break;\
783 default : MI(ILLEGAL_VALUE);\
784 }
785
786 mng_uint32 iWidth;
787 mng_uint32 iHeight;
788 mng_uint8 iColortype;
789 mng_uint8 iImagesampledepth;
790 mng_uint8 iImagecompression;
791 mng_uint8 iImageinterlace;
792 mng_uint8 iAlphasampledepth;
793 mng_uint8 iAlphacompression;
794 mng_uint8 iAlphafilter;
795 mng_uint8 iAlphainterlace;
796
797 if( mng_getchunk_jhdr( hMNG, hChunk,
798 &iWidth, &iHeight, &iColortype, &iImagesampledepth,
799 &iImagecompression, &iImageinterlace,
800 &iAlphasampledepth, &iAlphacompression,
801 &iAlphafilter, &iAlphainterlace ) != 0 )
802 return false;
803
804 IARG( "iWidth", iWidth );
805 NL; IARG( "iHeight", iHeight );
806 NL; IARG( "iColortype", iColortype ); MI_JPEG_COLORTYPE( iColortype );
807 NL; IARG( "iImagesampledepth", iImagesampledepth ); MI_JPEG_BITDEPTH( iImagesampledepth );
808 NL; IARG( "iImagecompression", iImagecompression ); MI_JPEGCOMPRESSION( iImagecompression );
809 NL; IARG( "iImageinterlace", iImageinterlace ); MI_JPEGINTERLACE( iImageinterlace );
810 NL; IARG( "iAlphasampledepth", iAlphasampledepth ); MI_ALPHABITDEPTH( iAlphasampledepth );
811 NL; IARG( "iAlphacompression", iAlphacompression ); MI_COMPRESSION_DEFLATE( iAlphacompression );
812 NL; IARG( "iAlphafilter", iAlphafilter ); MI_FILTER( iAlphafilter );
813 NL; IARG( "iAlphainterlace", iAlphainterlace ); MI_INTERLACE( iAlphainterlace );
814
815 return true;
816 # undef MI_JPEG_COLORTYPE
817 # undef MI_JPEG_BITDEPTH
818 # undef MI_JPEGCOMPRESSION
819 # undef MI_JPEGINTERLACE
820 # undef MI_ALPHABITDEPTH
821 }
822 //---------------------------------------------------------------------------
Info_LOOP(mng_handle hMNG,mng_handle hChunk,String & as)823 bool __fastcall TMainForm::Info_LOOP( mng_handle hMNG, mng_handle hChunk, String &as )
824 {
825 # define MI_TERMINATION( _i_ )\
826 if( WantsMacroIds() )\
827 switch( (_i_) ) {\
828 case MNG_TERMINATION_DECODER_NC :\
829 MI( "MNG_TERMINATION_DECODER_NC" ); break;\
830 case MNG_TERMINATION_USER_NC :\
831 MI( "MNG_TERMINATION_USER_NC" ); break;\
832 case MNG_TERMINATION_EXTERNAL_NC :\
833 MI( "MNG_TERMINATION_EXTERNAL_NC" ); break;\
834 case MNG_TERMINATION_DETERMINISTIC_NC :\
835 MI( "MNG_TERMINATION_DETERMINISTIC_NC" ); break;\
836 case MNG_TERMINATION_DECODER_C :\
837 MI( "MNG_TERMINATION_DECODER_C" ); break;\
838 case MNG_TERMINATION_USER_C :\
839 MI( "MNG_TERMINATION_USER_C" ); break;\
840 case MNG_TERMINATION_EXTERNAL_C :\
841 MI( "MNG_TERMINATION_EXTERNAL_C" ); break;\
842 case MNG_TERMINATION_DETERMINISTIC_C :\
843 MI( "MNG_TERMINATION_DETERMINISTIC_C" ); break;\
844 default : MI(UNKNOWN);\
845 }
846 mng_uint8 iLevel;
847 mng_uint32 iRepeat;
848 mng_uint8 iTermination;
849 mng_uint32 iItermin;
850 mng_uint32 iItermax;
851 mng_uint32 iCount;
852 mng_uint32p pSignals;
853
854 if( mng_getchunk_loop( hMNG, hChunk,
855 &iLevel, &iRepeat, &iTermination,
856 &iItermin, &iItermax, &iCount, &pSignals ) != 0 )
857 return false;
858
859 IARG( "iLevel", iLevel );
860 NL; IARG( "iRepeat", iRepeat );
861 NL; IARG( "iTermination", iTermination ); MI_TERMINATION( iTermination );
862 NL; IARG( "iItermin", iItermin );
863 NL; IARG( "iItermax", iItermax );
864 NL; IARG( "iCount", iCount );
865 //pSignals pSignals //@todo@
866
867 return true;
868 # undef MI_TERMINATION
869 }
870 //---------------------------------------------------------------------------
871 /*
872 bool __fastcall TMainForm::Info_M?GN( mng_handle hMNG, mng_handle hChunk, String &as )
873 {
874 mng_uint16 iFirstid;
875 mng_uint16 iLastid;
876 mng_uint16 iMethodX;
877 mng_uint16 iMX;
878 mng_uint16 iMY;
879 mng_uint16 iML;
880 mng_uint16 iMR;
881 mng_uint16 iMT;
882 mng_uint16 iMB;
883 mng_uint16 iMethodY;
884
885 if( mng_getchunk_magn( hMNG, hChunk,
886 &iFirstid, &iLastid,
887 &iMethodX, &iMX, &iMY, &iML, &iMR, &iMT, &iMB,
888 &iMethodY ) != 0 )
889 return false;
890
891 IARG( "iFirstid", iFirstid );
892 NL; IARG( "iLastid", iLastid );
893 NL; IARG( "iMethodX", iMethodX );
894 NL; IARG( "iMX", iMX );
895 NL; IARG( "iMY", iMY );
896 NL; IARG( "iML", iML );
897 NL; IARG( "iMR", iMR );
898 NL; IARG( "iMT", iMT );
899 NL; IARG( "iMB", iMB );
900 NL; IARG( "iMethodY", iMethodY );
901
902 return true;
903 }
904 */
905 //---------------------------------------------------------------------------
Info_MEND(mng_handle hMNG,mng_handle hChunk,String & as)906 bool __fastcall TMainForm::Info_MEND( mng_handle hMNG, mng_handle hChunk, String &as )
907 {
908 NL + TAB; STR( "End of Multiply Network Graphic." );
909 return true;
910 }
911 //---------------------------------------------------------------------------
Info_MHDR(mng_handle hMNG,mng_handle hChunk,String & as)912 bool __fastcall TMainForm::Info_MHDR( mng_handle hMNG, mng_handle hChunk, String &as )
913 {
914 // NB "iSimplicity" is a bit field
915 # define MI_SIMPLICITY( _i_ )\
916 if( WantsMacroIds() ) {\
917 if( (_i_) & MNG_SIMPLICITY_VALID )\
918 MI( "MNG_SIMPLICITY_VALID" );\
919 if( (_i_) & MNG_SIMPLICITY_SIMPLEFEATURES )\
920 MI( "MNG_SIMPLICITY_SIMPLEFEATURES" );\
921 if( (_i_) & MNG_SIMPLICITY_COMPLEXFEATURES )\
922 MI( "MNG_SIMPLICITY_COMPLEXFEATURES" );\
923 if( (_i_) & MNG_SIMPLICITY_TRANSPARENCY )\
924 MI( "MNG_SIMPLICITY_TRANSPARENCY" );\
925 if( (_i_) & MNG_SIMPLICITY_JNG )\
926 MI( "MNG_SIMPLICITY_JNG" );\
927 if( (_i_) & MNG_SIMPLICITY_DELTAPNG )\
928 MI( "MNG_SIMPLICITY_DELTAPNG" );\
929 }
930
931 mng_uint32 iWidth;
932 mng_uint32 iHeight;
933 mng_uint32 iTicks;
934 mng_uint32 iLayercount;
935 mng_uint32 iFramecount;
936 mng_uint32 iPlaytime;
937 mng_uint32 iSimplicity;
938
939 if( mng_getchunk_mhdr( hMNG, hChunk,
940 &iWidth, &iHeight, &iTicks,
941 &iLayercount, &iFramecount, &iPlaytime,
942 &iSimplicity ) != 0 )
943 return false;
944
945 IARG( "iWidth", iWidth );
946 NL; IARG( "iHeight", iHeight );
947 NL; IARG( "iTicks", iTicks );
948 NL; IARG( "iLayercount", iLayercount );
949 NL; IARG( "iFramecount", iFramecount );
950 NL; IARG( "iPlaytime", iPlaytime );
951 NL; IARG( "iSimplicity", iSimplicity ); MI_SIMPLICITY( iSimplicity );
952
953 return true;
954 # undef MI_SIMPLICITY
955 }
956 //---------------------------------------------------------------------------
Info_MOVE(mng_handle hMNG,mng_handle hChunk,String & as)957 bool __fastcall TMainForm::Info_MOVE( mng_handle hMNG, mng_handle hChunk, String &as )
958 {
959 mng_uint16 iFirstid;
960 mng_uint16 iLastid;
961 mng_uint8 iMovetype;
962 mng_int32 iMovex;
963 mng_int32 iMovey;
964
965 if( mng_getchunk_move( hMNG, hChunk,
966 &iFirstid, &iLastid, &iMovetype, &iMovex, &iMovey ) != 0 )
967 return false;
968
969 IARG( "iFirstid", iFirstid );
970 NL; IARG( "iLastid", iLastid );
971 NL; IARG( "iMovetype", iMovetype ); MI_LOCATION( iMovetype );
972 NL; IARG( "iMovex", iMovex );
973 NL; IARG( "iMovey", iMovey );
974
975 return true;
976 }
977 //---------------------------------------------------------------------------
Info_ORDR(mng_handle hMNG,mng_handle hChunk,String & as)978 bool __fastcall TMainForm::Info_ORDR( mng_handle hMNG, mng_handle hChunk, String &as )
979 {
980 mng_uint32 iCount;
981
982 if( mng_getchunk_ordr( hMNG, hChunk, &iCount ) != 0 )
983 return false;
984
985 IARG( "iCount", iCount );
986
987 return true;
988 }
989 //---------------------------------------------------------------------------
Info_PAST(mng_handle hMNG,mng_handle hChunk,String & as)990 bool __fastcall TMainForm::Info_PAST( mng_handle hMNG, mng_handle hChunk, String &as )
991 {
992 // PAST
993 # define MI_TARGET( _i_ )\
994 if( WantsMacroIds() )\
995 switch( _i_ ) {\
996 case MNG_TARGET_ABSOLUTE : MI( "MNG_TARGET_ABSOLUTE" ); break;\
997 case MNG_TARGET_RELATIVE_SAMEPAST : MI( "MNG_TARGET_RELATIVE_SAMEPAST" ); break;\
998 case MNG_TARGET_RELATIVE_PREVPAST : MI( "MNG_TARGET_RELATIVE_PREVPAST" ); break;\
999 default : MI(UNKNOWN);\
1000 }
1001
1002 // COMPOSITE, ORIENTATION, OFFSET & BOUNDARY depend upon "iCount"
1003 mng_uint16 iDestid;
1004 mng_uint8 iTargettype;
1005 mng_int32 iTargetx;
1006 mng_int32 iTargety;
1007 mng_uint32 iCount;
1008
1009 if( mng_getchunk_past( hMNG, hChunk,
1010 &iDestid, &iTargettype, &iTargetx, &iTargety, &iCount ) != 0 )
1011 return false;
1012
1013 IARG( "iDestid", iDestid );
1014 NL; IARG( "iTargettype", iTargettype ); MI_TARGET( iTargettype );
1015 NL; IARG( "iTargetx", iTargetx );
1016 NL; IARG( "iTargety", iTargety );
1017 NL; IARG( "iCount", iCount );
1018
1019 return true;
1020 # undef MI_TARGET
1021 }
1022 //---------------------------------------------------------------------------
Info_PLTE(mng_handle hMNG,mng_handle hChunk,String & as)1023 bool __fastcall TMainForm::Info_PLTE( mng_handle hMNG, mng_handle hChunk, String &as )
1024 {
1025 mng_uint32 iCount;
1026 mng_palette8 aPalette;
1027 mng_uint32 iPalEntry;
1028
1029 if( mng_getchunk_plte( hMNG, hChunk, &iCount, &aPalette ) != 0 )
1030 return false;
1031
1032 IARG( "iCount", iCount );
1033
1034 if( WantsPaletteEntries() )
1035 {
1036 iPalEntry = 0;
1037 do{
1038 if( WantsRgbOrder() )
1039 {
1040 as = as + nl +
1041 TAB + "Palette entry [" + PadInt( iPalEntry ) + "]" +
1042 TAB + "R(" + PadInt( aPalette[ iPalEntry ].iRed ) + ") " +
1043 TAB + "G(" + PadInt( aPalette[ iPalEntry ].iGreen ) + ") " +
1044 TAB + "B(" + PadInt( aPalette[ iPalEntry ].iBlue ) + ")";
1045 }
1046 else
1047 {
1048 as = as + nl +
1049 TAB + "Palette entry [" + PadInt( iPalEntry ) + "]" +
1050 TAB + "B(" + PadInt( aPalette[ iPalEntry ].iBlue ) + ") " +
1051 TAB + "G(" + PadInt( aPalette[ iPalEntry ].iGreen ) + ") " +
1052 TAB + "R(" + PadInt( aPalette[ iPalEntry ].iRed ) + ")";
1053
1054 };
1055 iPalEntry += 1;
1056 } while( iPalEntry < iCount );
1057 }
1058
1059 return true;
1060 }
1061 //---------------------------------------------------------------------------
Info_PPLT(mng_handle hMNG,mng_handle hChunk,String & as)1062 bool __fastcall TMainForm::Info_PPLT( mng_handle hMNG, mng_handle hChunk, String &as )
1063 {
1064 /*
1065 # define MI_DELTATYPE( _i_ )\
1066 if( WantsMacroIds() )\
1067 switch( _i_ ) {\
1068 case MNG_DELTATYPE_REPLACERGB : MI( "MNG_DELTATYPE_REPLACERGB" ); break;\
1069 case MNG_DELTATYPE_DELTARGB : MI( "MNG_DELTATYPE_DELTARGB" ); break;\
1070 case MNG_DELTATYPE_REPLACEALPHA : MI( "MNG_DELTATYPE_REPLACEALPHA" ); break;\
1071 case MNG_DELTATYPE_DELTAALPHA : MI( "MNG_DELTATYPE_DELTAALPHA" ); break;\
1072 case MNG_DELTATYPE_REPLACERGBA : MI( "MNG_DELTATYPE_REPLACERGBA" ); break;\
1073 case MNG_DELTATYPE_DELTARGBA : MI( "MNG_DELTATYPE_DELTARGBA" ); break;\
1074 default : MI(UNKNOWN);\
1075 }
1076 */
1077 mng_uint32 iCount;
1078
1079 if( mng_getchunk_pplt( hMNG, hChunk, &iCount ) != 0 )
1080 return false;
1081
1082 IARG( "iCount", iCount );
1083
1084 return true;
1085 }
1086 //---------------------------------------------------------------------------
Info_PROM(mng_handle hMNG,mng_handle hChunk,String & as)1087 bool __fastcall TMainForm::Info_PROM( mng_handle hMNG, mng_handle hChunk, String &as )
1088 {
1089 # define MI_FILLMETHOD( _i_ )\
1090 if( WantsMacroIds() )\
1091 switch( _i_ ) {\
1092 case MNG_FILLMETHOD_LEFTBITREPLICATE : MI( "MNG_FILLMETHOD_LEFTBITREPLICATE" ); break;\
1093 case MNG_FILLMETHOD_ZEROFILL : MI( "MNG_FILLMETHOD_ZEROFILL" ); break;\
1094 default : MI(UNKNOWN);\
1095 }
1096 mng_uint8 iColortype;
1097 mng_uint8 iSampledepth;
1098 mng_uint8 iFilltype;
1099
1100 if( mng_getchunk_prom( hMNG, hChunk,
1101 &iColortype, &iSampledepth, &iFilltype ) != 0 )
1102 return false;
1103
1104 IARG( "iColortype", iColortype ); MI_COLORTYPE( iColortype );
1105 NL; IARG( "iSampledepth", iSampledepth ); MI_BITDEPTH( iSampledepth );
1106 NL; IARG( "iFilltype", iFilltype ); MI_FILLMETHOD( iFilltype );
1107
1108 return true;
1109 # undef MI_FILLMETHOD
1110 }
1111 //---------------------------------------------------------------------------
Info_SAVE(mng_handle hMNG,mng_handle hChunk,String & as)1112 bool __fastcall TMainForm::Info_SAVE( mng_handle hMNG, mng_handle hChunk, String &as )
1113 {
1114 # define MI_SAVEOFFSET( _i_ )\
1115 if( WantsMacroIds() )\
1116 switch( _i_ ) {\
1117 case MNG_SAVEOFFSET_4BYTE : MI( "MNG_SAVEOFFSET_4BYTE" ); break;\
1118 case MNG_SAVEOFFSET_8BYTE : MI( "MNG_SAVEOFFSET_8BYTE" ); break;\
1119 default : MI(UNKNOWN);\
1120 }
1121
1122 /*
1123 # define MI_SAVEENTRY( _i_ )\
1124 if( WantsMacroIds() )\
1125 switch( _i_ ) {\
1126 case MNG_SAVEENTRY_SEGMENTFULL : MI( "MNG_SAVEENTRY_SEGMENTFULL" ); break;\
1127 case MNG_SAVEENTRY_SEGMENT : MI( "MNG_SAVEENTRY_SEGMENT" ); break;\
1128 case MNG_SAVEENTRY_SUBFRAME : MI( "MNG_SAVEENTRY_SUBFRAME" ); break;\
1129 case MNG_SAVEENTRY_EXPORTEDIMAGE : MI( "MNG_SAVEENTRY_EXPORTEDIMAGE" ); break;\
1130 default : MI(UNKNOWN);\
1131 }
1132 */
1133 mng_bool bEmpty;
1134 mng_uint8 iOffsettype;
1135 mng_uint32 iCount;
1136
1137 if( mng_getchunk_save( hMNG, hChunk,
1138 &bEmpty, &iOffsettype, &iCount ) != 0 )
1139 return false;
1140
1141 BARG( "bEmpty", bEmpty );
1142 NL; IARG( "iOffsettype", iOffsettype ); MI_SAVEOFFSET( iOffsettype );
1143 NL; IARG( "iCount", iCount );
1144
1145 return true;
1146 # undef MI_SAVEOFFSET
1147 }
1148 //---------------------------------------------------------------------------
Info_SEEK(mng_handle hMNG,mng_handle hChunk,String & as)1149 bool __fastcall TMainForm::Info_SEEK( mng_handle hMNG, mng_handle hChunk, String &as )
1150 {
1151 mng_uint32 iNamesize;
1152 mng_pchar zName;
1153
1154 if( mng_getchunk_seek( hMNG, hChunk, &iNamesize, &zName ) != 0 )
1155 return false;
1156
1157 IARG( "iNamesize", iNamesize );
1158 NL; ZARG( "zName", zName );
1159
1160 return true;
1161 }
1162 //---------------------------------------------------------------------------
Info_SHOW(mng_handle hMNG,mng_handle hChunk,String & as)1163 bool __fastcall TMainForm::Info_SHOW( mng_handle hMNG, mng_handle hChunk, String &as )
1164 {
1165 # define MI_SHOWMODE( _i_ )\
1166 if( WantsMacroIds() )\
1167 switch( _i_ ) {\
1168 case MNG_SHOWMODE_0 : MI( "MNG_SHOWMODE_0" ); break;\
1169 case MNG_SHOWMODE_1 : MI( "MNG_SHOWMODE_1" ); break;\
1170 case MNG_SHOWMODE_2 : MI( "MNG_SHOWMODE_2" ); break;\
1171 case MNG_SHOWMODE_3 : MI( "MNG_SHOWMODE_3" ); break;\
1172 case MNG_SHOWMODE_4 : MI( "MNG_SHOWMODE_4" ); break;\
1173 case MNG_SHOWMODE_5 : MI( "MNG_SHOWMODE_5" ); break;\
1174 case MNG_SHOWMODE_6 : MI( "MNG_SHOWMODE_6" ); break;\
1175 case MNG_SHOWMODE_7 : MI( "MNG_SHOWMODE_7" ); break;\
1176 default : MI(UNKNOWN);\
1177 }
1178 mng_bool bEmpty;
1179 mng_uint16 iFirstid;
1180 mng_uint16 iLastid;
1181 mng_uint8 iMode;
1182
1183 if( mng_getchunk_show( hMNG, hChunk,
1184 &bEmpty, &iFirstid, &iLastid, &iMode ) != 0 )
1185 return false;
1186
1187 BARG( "bEmpty", bEmpty );
1188 NL; IARG( "iFirstid", iFirstid );
1189 NL; IARG( "iLastid", iLastid );
1190 NL; IARG( "iMode", iMode ); MI_SHOWMODE( iMode );
1191
1192 return true;
1193 # undef MI_SHOWMODE
1194 }
1195 //---------------------------------------------------------------------------
Info_TERM(mng_handle hMNG,mng_handle hChunk,String & as)1196 bool __fastcall TMainForm::Info_TERM( mng_handle hMNG, mng_handle hChunk, String &as )
1197 {
1198 # define MI_TERMACTION( _i_ )\
1199 if( WantsMacroIds() )\
1200 switch( _i_ ) {\
1201 case MNG_TERMACTION_LASTFRAME : MI( "MNG_TERMACTION_LASTFRAME" ); break;\
1202 case MNG_TERMACTION_CLEAR : MI( "MNG_TERMACTION_CLEAR" ); break;\
1203 case MNG_TERMACTION_FIRSTFRAME : MI( "MNG_TERMACTION_FIRSTFRAME" ); break;\
1204 case MNG_TERMACTION_REPEAT : MI( "MNG_TERMACTION_REPEAT" ); break;\
1205 default : MI(UNKNOWN);\
1206 }
1207
1208 # define MI_ITERACTION( _i_ )\
1209 if( WantsMacroIds() )\
1210 switch( _i_ ) {\
1211 case MNG_ITERACTION_LASTFRAME : MI( "MNG_ITERACTION_LASTFRAME" ); break;\
1212 case MNG_ITERACTION_CLEAR : MI( "MNG_ITERACTION_CLEAR" ); break;\
1213 case MNG_ITERACTION_FIRSTFRAME : MI( "MNG_ITERACTION_FIRSTFRAME" ); break;\
1214 default : MI(UNKNOWN);\
1215 }
1216
1217 mng_uint8 iTermaction;
1218 mng_uint8 iIteraction;
1219 mng_uint32 iDelay;
1220 mng_uint32 iItermax;
1221
1222 if( mng_getchunk_term( hMNG, hChunk,
1223 &iTermaction, &iIteraction, &iDelay, &iItermax ) != 0 )
1224 return false;
1225
1226 IARG( "iTermaction", iTermaction ); MI_TERMACTION( iTermaction );
1227 NL; IARG( "iIteraction", iIteraction ); MI_ITERACTION( iIteraction );
1228 NL; IARG( "iDelay", iDelay );
1229 NL; IARG( "iItermax", iItermax );
1230
1231 return true;
1232 # undef MI_TERMACTION
1233 # undef MI_ITERACTION
1234 }
1235 //---------------------------------------------------------------------------
Info_bKGD(mng_handle hMNG,mng_handle hChunk,String & as)1236 bool __fastcall TMainForm::Info_bKGD( mng_handle hMNG, mng_handle hChunk, String &as )
1237 {
1238 mng_bool bEmpty;
1239 mng_uint8 iType;
1240 mng_uint8 iIndex;
1241 mng_uint16 iGray;
1242 mng_uint16 iRed;
1243 mng_uint16 iGreen;
1244 mng_uint16 iBlue;
1245
1246 if( mng_getchunk_bkgd( hMNG, hChunk,
1247 &bEmpty, &iType, &iIndex, &iGray,
1248 &iRed, &iGreen, &iBlue ) != 0 )
1249 return false;
1250
1251 BARG( "bEmpty", bEmpty );
1252 NL; IARG( "iType", iType );
1253 NL; IARG( "iIndex", iIndex );
1254 NL; IARG( "iGray", iGray );
1255 NL; IARG( "iRed", iRed );
1256 NL; IARG( "iGreen", iGreen );
1257 NL; IARG( "iBlue", iBlue );
1258
1259 return true;
1260 }
1261 //---------------------------------------------------------------------------
Info_cHRM(mng_handle hMNG,mng_handle hChunk,String & as)1262 bool __fastcall TMainForm::Info_cHRM( mng_handle hMNG, mng_handle hChunk, String &as )
1263 {
1264 mng_bool bEmpty;
1265 mng_uint32 iWhitepointx;
1266 mng_uint32 iWhitepointy;
1267 mng_uint32 iRedx;
1268 mng_uint32 iRedy;
1269 mng_uint32 iGreenx;
1270 mng_uint32 iGreeny;
1271 mng_uint32 iBluex;
1272 mng_uint32 iBluey;
1273
1274 if( mng_getchunk_chrm( hMNG, hChunk,
1275 &bEmpty, &iWhitepointx, &iWhitepointy,
1276 &iRedx, &iRedy,
1277 &iGreenx,&iGreeny,
1278 &iBluex, &iBluey ) != 0 )
1279 return false;
1280
1281 BARG( "bEmpty", bEmpty );
1282 NL; FARG( "iWhitepointx", iWhitepointx );
1283 FPCOM( String( (float)(iWhitepointx /FFACTOR) ) );
1284 NL; FARG( "iWhitepointy", iWhitepointy );
1285 FPCOM( String( (float)(iWhitepointy /FFACTOR) ) );
1286
1287 NL; FARG( "iRedx", iRedx );
1288 FPCOM( String( (float)(iRedx /FFACTOR) ) );
1289 NL; FARG( "iRedy", iRedy );
1290 FPCOM( String( (float)(iRedy /FFACTOR) ) );
1291
1292 NL; FARG( "iGreenx", iGreenx );
1293 FPCOM( String( (float)(iGreenx /FFACTOR) ) );
1294 NL; FARG( "iGreeny", iGreeny );
1295 FPCOM( String( (float)(iGreeny /FFACTOR) ) );
1296
1297 NL; FARG( "iBluex", iBluex );
1298 FPCOM( String( (float)(iBluex /FFACTOR) ) );
1299 NL; FARG( "iBluey", iBluey );
1300 FPCOM( String( (float)(iBluey /FFACTOR) ) );
1301
1302 return true;
1303 }
1304 //---------------------------------------------------------------------------
Info_eXPI(mng_handle hMNG,mng_handle hChunk,String & as)1305 bool __fastcall TMainForm::Info_eXPI( mng_handle hMNG, mng_handle hChunk, String &as )
1306 {
1307 mng_uint16 iSnapshotid;
1308 mng_uint32 iNamesize;
1309 mng_pchar zName;
1310
1311 if( mng_getchunk_expi( hMNG, hChunk,
1312 &iSnapshotid, &iNamesize, &zName ) != 0 )
1313 return false;
1314
1315 IARG( "iSnapshotid", iSnapshotid );
1316 NL; IARG( "iNamesize", iNamesize );
1317 NL; ZARG( "zName", zName );
1318
1319 return true;
1320 }
1321 //---------------------------------------------------------------------------
Info_fPRI(mng_handle hMNG,mng_handle hChunk,String & as)1322 bool __fastcall TMainForm::Info_fPRI( mng_handle hMNG, mng_handle hChunk, String &as )
1323 {
1324 # define MI_PRIORITY( _i_ )\
1325 if( WantsMacroIds() )\
1326 switch( _i_ ) {\
1327 case MNG_PRIORITY_ABSOLUTE : MI( "MNG_PRIORITY_ABSOLUTE" ); break;\
1328 case MNG_PRIORITY_RELATIVE : MI( "MNG_PRIORITY_RELATIVE" ); break;\
1329 default : MI(UNKNOWN);\
1330 }
1331 mng_uint8 iDeltatype;
1332 mng_uint8 iPriority;
1333
1334 if( mng_getchunk_fpri( hMNG, hChunk, &iDeltatype, &iPriority ) != 0 )
1335 return false;
1336
1337 IARG( "iDeltatype", iDeltatype ); MI_PRIORITY( iDeltatype );
1338 NL; IARG( "iPriority", iPriority );
1339
1340 return true;
1341 # undef MI_PRIORITY
1342 }
1343 //---------------------------------------------------------------------------
Info_gAMA(mng_handle hMNG,mng_handle hChunk,String & as)1344 bool __fastcall TMainForm::Info_gAMA( mng_handle hMNG, mng_handle hChunk, String &as )
1345 {
1346 mng_bool bEmpty;
1347 mng_uint32 iGamma;
1348
1349 if( mng_getchunk_gama( hMNG, hChunk, &bEmpty, &iGamma ) != 0 )
1350 return false;
1351
1352 BARG( "bEmpty", bEmpty );
1353 NL; FARG( "iGamma", iGamma );
1354 FPCOM( String( (float)(iGamma /FFACTOR) ) );
1355
1356 return true;
1357 }
1358 //---------------------------------------------------------------------------
Info_hIST(mng_handle hMNG,mng_handle hChunk,String & as)1359 bool __fastcall TMainForm::Info_hIST( mng_handle hMNG, mng_handle hChunk, String &as )
1360 {
1361 mng_uint32 iEntrycount;
1362 mng_uint16arr aEntries;
1363
1364 if( mng_getchunk_hist( hMNG, hChunk, &iEntrycount, &aEntries ) != 0 )
1365 return false;
1366
1367
1368 IARG( "iEntrycount", iEntrycount );
1369 //aEntries aEntries @todo@
1370
1371 return true;
1372 }
1373 //---------------------------------------------------------------------------
Info_iCCP(mng_handle hMNG,mng_handle hChunk,String & as)1374 bool __fastcall TMainForm::Info_iCCP( mng_handle hMNG, mng_handle hChunk, String &as )
1375 {
1376 mng_bool bEmpty;
1377 mng_uint32 iNamesize;
1378 mng_pchar zName;
1379 mng_uint8 iCompression;
1380 mng_uint32 iProfilesize;
1381 mng_ptr pProfile;
1382
1383 if( mng_getchunk_iccp( hMNG, hChunk,
1384 &bEmpty, &iNamesize, &zName, &iCompression,
1385 &iProfilesize,&pProfile ) != 0 )
1386 return false;
1387
1388 BARG( "bEmpty", bEmpty );
1389 NL; IARG( "iNamesize", iNamesize );
1390 NL; ZARG( "Name", zName );
1391 NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression );
1392 NL; IARG( "iProfilesize", iProfilesize );
1393 // "pProfile " + String( pProfile );
1394
1395 return true;
1396 }
1397 //---------------------------------------------------------------------------
Info_iTXt(mng_handle hMNG,mng_handle hChunk,String & as)1398 bool __fastcall TMainForm::Info_iTXt( mng_handle hMNG, mng_handle hChunk, String &as )
1399 {
1400 #define MI_ITXT_FLAG( _i_ )\
1401 if( WantsMacroIds() ) {\
1402 if( (_i_) == MNG_FLAG_UNCOMPRESSED ) {\
1403 MI( "MNG_FLAG_UNCOMPRESSED" )\
1404 } else if( (_i_) == MNG_FLAG_COMPRESSED ) {\
1405 MI( "MNG_FLAG_COMPRESSED" );\
1406 }\
1407 }
1408 mng_uint32 iKeywordsize;
1409 mng_pchar zKeyword;
1410 mng_uint8 iCompressionflag;
1411 mng_uint8 iCompressionmethod;
1412 mng_uint32 iLanguagesize;
1413 mng_pchar zLanguage;
1414 mng_uint32 iTranslationsize;
1415 mng_pchar zTranslation;
1416 mng_uint32 iTextsize;
1417 mng_pchar zText;
1418
1419 if( mng_getchunk_itxt( hMNG, hChunk,
1420 &iKeywordsize, &zKeyword,
1421 &iCompressionflag, &iCompressionmethod,
1422 &iLanguagesize, &zLanguage,
1423 &iTranslationsize, &zTranslation,
1424 &iTextsize, &zText ) != 0 )
1425 return false;
1426
1427 IARG( "iKeywordsize", iKeywordsize );
1428 NL; ZARG( "zKeyword", zKeyword );
1429 NL; IARG( "iCompressionflag", iCompressionflag ); MI_ITXT_FLAG( iCompressionflag );
1430 NL; IARG( "iCompressionmethod", iCompressionmethod ); MI_COMPRESSION_DEFLATE( iCompressionflag );
1431 NL; IARG( "iLanguagesize", iLanguagesize );
1432 NL; ZARG( "zLanguage", zLanguage );
1433 NL; IARG( "iTranslationsize", iTranslationsize );
1434 NL; ZARG( "zTranslation", zTranslation );
1435 NL; IARG( "iTextsize", iTextsize );
1436 NL; ZARG( "zText", zText );
1437
1438 return true;
1439 # undef MI_ITXT_FLAG
1440 }
1441 //---------------------------------------------------------------------------
Info_nEED(mng_handle hMNG,mng_handle hChunk,String & as)1442 bool __fastcall TMainForm::Info_nEED( mng_handle hMNG, mng_handle hChunk, String &as )
1443 {
1444 mng_uint32 iKeywordssize;
1445 mng_pchar zKeywords;
1446
1447 if( mng_getchunk_need( hMNG, hChunk, &iKeywordssize, &zKeywords ) != 0)
1448 return false;
1449
1450 IARG( "iKeywordssize", iKeywordssize );
1451 NL; IARG( "zKeywords", zKeywords );
1452
1453 return true;
1454 }
1455 //---------------------------------------------------------------------------
Info_pHYg(mng_handle hMNG,mng_handle hChunk,String & as)1456 bool __fastcall TMainForm::Info_pHYg( mng_handle hMNG, mng_handle hChunk, String &as )
1457 {
1458 mng_bool bEmpty;
1459 mng_uint32 iSizex;
1460 mng_uint32 iSizey;
1461 mng_uint8 iUnit;
1462
1463 if( mng_getchunk_phyg( hMNG, hChunk,
1464 &bEmpty, &iSizex, &iSizey, &iUnit ) != 0 )
1465 return false;
1466
1467 BARG( "bEmpty", bEmpty );
1468 NL; IARG( "iSizex", iSizex );
1469 NL; IARG( "iSizey", iSizey );
1470 NL; IARG( "iUnit", iUnit ); MI_UNITS( iUnit );
1471
1472 if( iUnit ) {
1473 PCOM("X/Y pixels per unit" );
1474 } else {
1475 if( iSizex == iSizey ) {
1476 PCOM( "Square pixels" );
1477 }
1478 }
1479
1480 return true;
1481 }
1482 //---------------------------------------------------------------------------
Info_pHYs(mng_handle hMNG,mng_handle hChunk,String & as)1483 bool __fastcall TMainForm::Info_pHYs( mng_handle hMNG, mng_handle hChunk, String &as )
1484 {
1485 mng_bool bEmpty;
1486 mng_uint32 iSizex;
1487 mng_uint32 iSizey;
1488 mng_uint8 iUnit;
1489
1490 if( mng_getchunk_phys( hMNG, hChunk,
1491 &bEmpty, &iSizex, &iSizey, &iUnit ) != 0 )
1492 return false;
1493
1494 BARG( "bEmpty", bEmpty );
1495 NL; IARG( "iSizex", iSizex );
1496 NL; IARG( "iSizey", iSizey );
1497 NL; IARG( "iUnit", iUnit ); MI_UNITS( iUnit );
1498
1499 if( iUnit ) {
1500 PCOM("X/Y pixels per unit" );
1501 } else {
1502 if( iSizex == iSizey ) {
1503 PCOM( "Square pixels" );
1504 }
1505 }
1506 return true;
1507 }
1508 //---------------------------------------------------------------------------
Info_sBIT(mng_handle hMNG,mng_handle hChunk,String & as)1509 bool __fastcall TMainForm::Info_sBIT( mng_handle hMNG, mng_handle hChunk, String &as )
1510 { // tested with cs3* cs5* cs8*
1511 mng_bool bEmpty;
1512 mng_uint8 iType;
1513 mng_uint8arr4 aBits;
1514
1515 if( mng_getchunk_sbit( hMNG, hChunk, &bEmpty, &iType, &aBits ) != 0 )
1516 return false;
1517
1518 BARG( "bEmpty", bEmpty );
1519 NL; IARG( "iType", iType );
1520 //aBits aBits @todo@
1521
1522 return true;
1523 }
1524 //---------------------------------------------------------------------------
Info_sPLT(mng_handle hMNG,mng_handle hChunk,String & as)1525 bool __fastcall TMainForm::Info_sPLT( mng_handle hMNG, mng_handle hChunk, String &as )
1526 {
1527 mng_bool bEmpty;
1528 mng_uint32 iNamesize;
1529 mng_pchar zName;
1530 mng_uint8 iSampledepth;
1531 mng_uint32 iEntrycount;
1532 mng_ptr pEntries;
1533
1534 if( mng_getchunk_splt( hMNG, hChunk,
1535 &bEmpty, &iNamesize, &zName,
1536 &iSampledepth, &iEntrycount, &pEntries ) != 0 )
1537 return false;
1538
1539 BARG( "bEmpty", bEmpty );
1540 NL; IARG( "iNamesize", iNamesize );
1541 NL; ZARG( "zName", zName );
1542 NL; IARG( "iSampledepth", iSampledepth ); MI_BITDEPTH( iSampledepth );
1543 NL; IARG( "iEntrycount", iEntrycount );
1544 //pEntries pEntries @todo@
1545
1546 return true;
1547 }
1548 //---------------------------------------------------------------------------
Info_sRGB(mng_handle hMNG,mng_handle hChunk,String & as)1549 bool __fastcall TMainForm::Info_sRGB( mng_handle hMNG, mng_handle hChunk, String &as )
1550 {
1551 # define MI_RENDERINGINTENT( _i_ )\
1552 if( WantsMacroIds() ) {\
1553 switch( (_i_) ) {\
1554 case MNG_INTENT_PERCEPTUAL :\
1555 MI( "MNG_INTENT_PERCEPTUAL" ); break;\
1556 case MNG_INTENT_RELATIVECOLORIMETRIC :\
1557 MI( "MNG_INTENT_RELATIVECOLORIMETRIC" );break;\
1558 case MNG_INTENT_SATURATION :\
1559 MI( "MNG_INTENT_SATURATION" ); break;\
1560 case MNG_INTENT_ABSOLUTECOLORIMETRIC :\
1561 MI( "MNG_INTENT_ABSOLUTECOLORIMETRIC" );break;\
1562 }\
1563 }
1564 mng_bool bEmpty;
1565 mng_uint8 iRenderingintent;
1566
1567 if( mng_getchunk_srgb( hMNG, hChunk,&bEmpty, &iRenderingintent ) != 0)
1568 return false;
1569
1570 BARG( "bEmpty", bEmpty );
1571 NL; IARG( "iRenderingintent", iRenderingintent );
1572 MI_RENDERINGINTENT( iRenderingintent );
1573
1574 return true;
1575 # undef MI_RENDERINGINTENT
1576 }
1577 //---------------------------------------------------------------------------
Info_tEXt(mng_handle hMNG,mng_handle hChunk,String & as)1578 bool __fastcall TMainForm::Info_tEXt( mng_handle hMNG, mng_handle hChunk, String &as )
1579 {
1580 mng_uint32 iKeywordsize;
1581 mng_pchar zKeyword;
1582 mng_uint32 iTextsize;
1583 mng_pchar zText;
1584
1585 if( mng_getchunk_text( hMNG, hChunk,
1586 &iKeywordsize, &zKeyword, &iTextsize, &zText ) != 0 )
1587 return false;
1588
1589 IARG( "iKeywordsize", iKeywordsize );
1590 NL; ZARG( "zKeyword", zKeyword );
1591 NL; IARG( "iTextsize", iTextsize );
1592 NL; ZARG( "zText", zText );
1593
1594 return true;
1595 }
1596 //---------------------------------------------------------------------------
Info_tIME(mng_handle hMNG,mng_handle hChunk,String & as)1597 bool __fastcall TMainForm::Info_tIME( mng_handle hMNG, mng_handle hChunk, String &as )
1598 {
1599 mng_uint16 iYear;
1600 mng_uint8 iMonth;
1601 mng_uint8 iDay;
1602 mng_uint8 iHour;
1603 mng_uint8 iMinute;
1604 mng_uint8 iSecond;
1605
1606 if( mng_getchunk_time( hMNG, hChunk,
1607 &iYear, &iMonth, &iDay, &iHour, &iMinute, &iSecond ) != 0 )
1608 return false;
1609
1610 IARG( "iYear", iYear );
1611 NL; IARG( "iMonth", iMonth );
1612 NL; IARG( "iDay", iDay );
1613 NL; IARG( "iHour", iHour );
1614 NL; IARG( "iMinute", iMinute );
1615 NL; IARG( "iSecond", iSecond );
1616 // Do not do help line here - may confuse international readers !
1617
1618 return true;
1619 }
1620 //---------------------------------------------------------------------------
Info_tRNS(mng_handle hMNG,mng_handle hChunk,String & as)1621 bool __fastcall TMainForm::Info_tRNS( mng_handle hMNG, mng_handle hChunk, String &as )
1622 {
1623 mng_bool bEmpty;
1624 mng_bool bGlobal;
1625 mng_uint8 iType;
1626 mng_uint32 iCount;
1627 mng_uint8arr aAlphas;
1628 mng_uint16 iGray;
1629 mng_uint16 iRed;
1630 mng_uint16 iGreen;
1631 mng_uint16 iBlue;
1632 mng_uint32 iRawlen;
1633 mng_uint8arr aRawdata;
1634
1635 if( mng_getchunk_trns( hMNG, hChunk,
1636 &bEmpty, &bGlobal, &iType, &iCount,
1637 &aAlphas,
1638 &iGray, &iRed, &iGreen, &iBlue,
1639 &iRawlen,
1640 &aRawdata ) != 0 )
1641 return false;
1642
1643 BARG( "bEmpty", bEmpty );
1644 NL; BARG( "bGlobal", bGlobal );
1645 NL; IARG( "iType", iType );
1646 NL; IARG( "iCount", iCount );
1647 //aAlphas aAlphas @todo@
1648 NL; IARG( "iGray", iGray );
1649 NL; IARG( "iRed", iRed );
1650 NL; IARG( "iGreen", iGreen );
1651 NL; IARG( "iBlue", iBlue );
1652 NL; IARG( "iRawlen", iRawlen );
1653 //aRawdata aRawdata @todo@
1654
1655 return true;
1656 }
1657 //---------------------------------------------------------------------------
Info_zTXt(mng_handle hMNG,mng_handle hChunk,String & as)1658 bool __fastcall TMainForm::Info_zTXt( mng_handle hMNG, mng_handle hChunk, String &as )
1659 {
1660 mng_uint32 iKeywordsize;
1661 mng_pchar zKeyword;
1662 mng_uint8 iCompression;
1663 mng_uint32 iTextsize;
1664 mng_pchar zText;
1665
1666 if( mng_getchunk_ztxt( hMNG, hChunk,
1667 &iKeywordsize, &zKeyword, &iCompression, &iTextsize, &zText ) != 0 )
1668 return false;
1669
1670 IARG( "iKeywordsize", iKeywordsize );
1671 NL; ZARG( "zKeyword", zKeyword );
1672 NL; IARG( "iCompression", iCompression ); MI_COMPRESSION_DEFLATE( iCompression );
1673 NL; IARG( "iTextsize", iTextsize );
1674 NL; ZARG( "zText", zText );
1675
1676 return true;
1677 }
1678 //---------------------------------------------------------------------------
Info_Unknown(mng_handle hMNG,mng_handle hChunk,String & as)1679 bool __fastcall TMainForm::Info_Unknown( mng_handle hMNG, mng_handle hChunk, String &as )
1680 {
1681 NL + TAB; STR( "Unknown Chunk" );
1682 NL + TAB; STR( nl + TAB + "(See help tab for a list of unsupported chunks)!" );
1683
1684 return true;
1685 }
1686 //---------------------------------------------------------------------------
1687
1688
1689
1690