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); \
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 { \
00044 InheritException(exception,&(image)->exception); \
00045 (void) SyncImagesSettings(image_info,image); \
00046 } \
00047 }
00048 #define FireImageStack(postfix,advance,fire) \
00049 if ((j <= i) && (i < (ssize_t) argc)) \
00050 { \
00051 DisableMSCWarning(4127) \
00052 if (image_stack[k].image == (Image *) NULL) \
00053 status&=MogrifyImageInfo(image_stack[k].image_info,(int) (i-j+1), \
00054 (const char **) (argv+j),exception); \
00055 else \
00056 if ((fire) != MagickFalse) \
00057 { \
00058 status&=MogrifyImages(image_stack[k].image_info,postfix,(int) \
00059 (i-j+1),(const char **) (argv+j),&image_stack[k].image, \
00060 exception); \
00061 image=image_stack[k].image; \
00062 if ((advance) != MagickFalse) \
00063 j=i+1; \
00064 pend=MagickFalse; \
00065 } \
00066 RestoreMSCWarning \
00067 }
00068 #define MaxImageStackDepth 128
00069 #define NewImageStack() \
00070 { \
00071 image_stack[MaxImageStackDepth].image_info=image_info; \
00072 image_stack[0].image_info=CloneImageInfo(image_info); \
00073 image_stack[0].image=NewImageList(); \
00074 image_info=image_stack[0].image_info; \
00075 image=image_stack[0].image; \
00076 }
00077 #define PushImageStack() \
00078 { \
00079 k++; \
00080 image_stack[k].image_info=CloneImageInfo(image_stack[k-1].image_info); \
00081 image_stack[k].image=NewImageList(); \
00082 image_info=image_stack[k].image_info; \
00083 image=image_stack[k].image; \
00084 }
00085 #define PopImageStack() \
00086 { \
00087 if (respect_parenthesis == MagickFalse) \
00088 { \
00089 image_stack[k-1].image_info=DestroyImageInfo(image_stack[k-1].image_info); \
00090 image_stack[k-1].image_info=CloneImageInfo(image_stack[k].image_info); \
00091 } \
00092 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
00093 AppendImageToList(&image_stack[k-1].image,image_stack[k].image); \
00094 k--; \
00095 image_info=image_stack[k].image_info; \
00096 image=image_stack[k].image; \
00097 }
00098 #define QuantumTick(i,span) ((MagickBooleanType) ((((i) & ((i)-1)) == 0) || \
00099 (((i) & 0xfff) == 0) || \
00100 ((MagickOffsetType) (i) == ((MagickOffsetType) (span)-1))))
00101 #define RemoveImageStack(images) \
00102 { \
00103 images=RemoveFirstImageFromList(&image_stack[k].image); \
00104 image=image_stack[k].image; \
00105 }
00106 #define RemoveAllImageStack() \
00107 { \
00108 if (image_stack[k].image != (Image *) NULL) \
00109 image_stack[k].image=DestroyImageList(image_stack[k].image); \
00110 }
00111 #define SetImageStack(image) \
00112 { \
00113 image_stack[k].image=(image); \
00114 }
00115
00116 typedef struct _ImageStack
00117 {
00118 ImageInfo
00119 *image_info;
00120
00121 Image
00122 *image;
00123 } ImageStack;
00124
00125 #if defined(__cplusplus) || defined(c_plusplus)
00126 }
00127 #endif
00128
00129 #endif