1 /* 2 Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization 3 dedicated to making software imaging solutions freely available. 4 5 You may not use this file except in compliance with the License. You may 6 obtain a copy of the License at 7 8 https://imagemagick.org/script/license.php 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 16 ImageMagick pixel wand API. 17 */ 18 #ifndef MAGICKWAND_WANDCLI_PRIVATE_H 19 #define MAGICKWAND_WANDCLI_PRIVATE_H 20 21 #if defined(__cplusplus) || defined(c_plusplus) 22 extern "C" { 23 #endif 24 25 #define CLIWandException(severity,tag,option) \ 26 (void) CLIThrowException(cli_wand,GetMagickModule(),severity,tag, \ 27 "`%s'",option) 28 29 #define CLIWandExceptionArg(severity,tag,option,arg) \ 30 (void) CLIThrowException(cli_wand,GetMagickModule(),severity,tag, \ 31 "'%s' '%s'",option, arg) 32 33 #define CLIWandWarnReplaced(message) \ 34 if ( (cli_wand->process_flags & ProcessWarnDeprecated) != 0 ) \ 35 (void) CLIThrowException(cli_wand,GetMagickModule(),OptionWarning, \ 36 "ReplacedOption", "'%s', use \"%s\"",option,message) 37 38 #define CLIWandExceptionFile(severity,tag,context) \ 39 { char *message=GetExceptionMessage(errno); \ 40 (void) CLIThrowException(cli_wand,GetMagickModule(),severity,tag, \ 41 "'%s': %s",context,message); \ 42 message=DestroyString(message); \ 43 } 44 45 #define CLIWandExceptionBreak(severity,tag,option) \ 46 { CLIWandException(severity,tag,option); break; } 47 48 #define CLIWandExceptionReturn(severity,tag,option) \ 49 { CLIWandException(severity,tag,option); return; } 50 51 #define CLIWandExceptArgBreak(severity,tag,option,arg) \ 52 { CLIWandExceptionArg(severity,tag,option,arg); break; } 53 54 #define CLIWandExceptArgReturn(severity,tag,option,arg) \ 55 { CLIWandExceptionArg(severity,tag,option,arg); return; } 56 57 58 59 /* Define how options should be processed */ 60 typedef enum 61 { 62 /* General Option Handling */ 63 ProcessImplictRead = 0x0001, /* Non-options are image reads. 64 If not set then skip implied read 65 without producing an error. 66 For use with "mogrify" handling */ 67 ProcessInterpretProperities = 0x0010, /* allow general escapes in args */ 68 69 /* Special Option Handling */ 70 ProcessExitOption = 0x0100, /* allow '-exit' use */ 71 ProcessScriptOption = 0x0200, /* allow '-script' use */ 72 ProcessReadOption = 0x0400, /* allow '-read' use */ 73 ProcessWarnDeprecated = 0x0800, /* warn about deprecated options */ 74 75 /* Option Processing Flags */ 76 ProcessOneOptionOnly = 0x4000, /* Process one option only */ 77 ProcessImplictWrite = 0x8000, /* Last arg is an implict write */ 78 79 /* Flag Groups for specific Situations */ 80 MagickCommandOptionFlags = 0x8FFF, /* Magick Command Flags */ 81 ConvertCommandOptionFlags = 0x800F, /* Convert Command Flags */ 82 MagickScriptArgsFlags = 0x000F, /* Script CLI Process Args Flags */ 83 } ProcessOptionFlags; 84 85 86 /* Define a generic stack linked list, for pushing and popping 87 user defined ImageInfo settings, and Image lists. 88 See '(' ')' and '-clone' CLI options. 89 */ 90 typedef struct _Stack 91 { 92 struct _Stack *next; 93 void *data; 94 } Stack; 95 96 /* Note this defines an extension to the normal MagickWand 97 Which adds extra elements specific to the Shell API interface 98 while still allowing the Wand to be passed to MagickWand API 99 for specific operations. 100 */ 101 struct _MagickCLI /* CLI interface version of MagickWand */ 102 { 103 struct _MagickWand /* This must be the first structure */ 104 wand; /* The Image List and Global Option Settings */ 105 106 QuantizeInfo 107 *quantize_info; /* for CLI API usage, not used by MagickWand API */ 108 109 DrawInfo 110 *draw_info; /* for CLI API usage, not used by MagickWand API */ 111 112 ProcessOptionFlags 113 process_flags; /* When handling CLI, what options do we process? */ 114 115 const OptionInfo 116 *command; /* The option entry that is being processed */ 117 118 Stack 119 *image_list_stack, /* Stacks of Image Lists and Image Info settings */ 120 *image_info_stack; 121 122 const char /* Location of option being processed for exception */ 123 *location, /* location format string for exception reports */ 124 *filename; /* "CLI", "unknown", or the script filename */ 125 126 size_t 127 line, /* location of current option from source */ 128 column; /* note: line also used for cli argument count */ 129 130 size_t 131 signature; 132 }; 133 134 135 136 #if defined(__cplusplus) || defined(c_plusplus) 137 } 138 #endif 139 140 #endif 141