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