00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MAGICKWAND_MOGRIFY_PRIVATE_H
00019 #define MAGICKWAND_MOGRIFY_PRIVATE_H
00020
00021 #if defined(__cplusplus) || defined(c_plusplus)
00022 extern "C" {
00023 #endif
00024
00025 #define AppendImageStack(images) \
00026 { \
00027 (void) SyncImagesSettings(image_info,images,exception); \
00028 AppendImageToList(&image_stack[k].image,images); \
00029 image=image_stack[k].image; \
00030 }
00031 #define DestroyImageStack() \
00032 { \
00033 while (k > 0) \
00034 PopImageStack(); \
00035 image_stack[k].image=DestroyImageList(image_stack[k].image); \
00036 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
00037 image_info=image_stack[MaxImageStackDepth].image_info; \
00038 }
00039 #define FinalizeImageSettings(image_info,image,advance) \
00040 { \
00041 FireImageStack(MagickTrue,advance,MagickTrue); \
00042 if (image != (Image *) NULL) \
00043 (void) SyncImagesSettings(image_info,image,exception); \
00044 }
00045 #define FireImageStack(postfix,advance,fire) \
00046 if ((j <= i) && (i < (ssize_t) argc)) \
00047 { \
00048 DisableMSCWarning(4127) \
00049 if (image_stack[k].image == (Image *) NULL) \
00050 status&=MogrifyImageInfo(image_stack[k].image_info,(int) (i-j+1), \
00051 (const char **) (argv+j),exception); \
00052 else \
00053 if ((fire) != MagickFalse) \
00054 { \
00055 status&=MogrifyImages(image_stack[k].image_info,postfix,(int) \
00056 (i-j+1),(const char **) (argv+j),&image_stack[k].image, \
00057 exception); \
00058 image=image_stack[k].image; \
00059 if ((advance) != MagickFalse) \
00060 j=i+1; \
00061 pend=MagickFalse; \
00062 } \
00063 RestoreMSCWarning \
00064 }
00065 #define MaxImageStackDepth 128
00066 #define NewImageStack() \
00067 { \
00068 image_stack[MaxImageStackDepth].image_info=image_info; \
00069 image_stack[0].image_info=CloneImageInfo(image_info); \
00070 image_stack[0].image=NewImageList(); \
00071 image_info=image_stack[0].image_info; \
00072 image=image_stack[0].image; \
00073 }
00074 #define PushImageStack() \
00075 { \
00076 k++; \
00077 image_stack[k].image_info=CloneImageInfo(image_stack[k-1].image_info); \
00078 image_stack[k].image=NewImageList(); \
00079 image_info=image_stack[k].image_info; \
00080 image=image_stack[k].image; \
00081 }
00082 #define PopImageStack() \
00083 { \
00084 if (respect_parenthesis == MagickFalse) \
00085 { \
00086 image_stack[k-1].image_info=DestroyImageInfo(image_stack[k-1].image_info); \
00087 image_stack[k-1].image_info=CloneImageInfo(image_stack[k].image_info); \
00088 } \
00089 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
00090 AppendImageToList(&image_stack[k-1].image,image_stack[k].image); \
00091 k--; \
00092 image_info=image_stack[k].image_info; \
00093 image=image_stack[k].image; \
00094 }
00095 #define QuantumTick(i,span) ((MagickBooleanType) ((((i) & ((i)-1)) == 0) || \
00096 (((i) & 0xfff) == 0) || \
00097 ((MagickOffsetType) (i) == ((MagickOffsetType) (span)-1))))
00098 #define RemoveImageStack(images) \
00099 { \
00100 images=RemoveFirstImageFromList(&image_stack[k].image); \
00101 image=image_stack[k].image; \
00102 }
00103 #define RemoveAllImageStack() \
00104 { \
00105 if (image_stack[k].image != (Image *) NULL) \
00106 image_stack[k].image=DestroyImageList(image_stack[k].image); \
00107 }
00108 #define SetImageStack(image) \
00109 { \
00110 image_stack[k].image=(image); \
00111 }
00112
00113 typedef struct _ImageStack
00114 {
00115 ImageInfo
00116 *image_info;
00117
00118 Image
00119 *image;
00120 } ImageStack;
00121
00122 #if defined(__cplusplus) || defined(c_plusplus)
00123 }
00124 #endif
00125
00126 #endif