1 /* 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3 % % 4 % % 5 % SSS CCC RRRR III PPPP TTTTT TTTTT OOO K K EEEE N N % 6 % S C R R I P P T T O O K K E NN N % 7 % SSS C RRRR I PPPP T T O O KK EEE N N N % 8 % S C R R I P T T O O K K E N NN % 9 % SSSS CCC R RR III P T T OOO K K EEEE N N % 10 % % 11 % TTTTT EEEEE SSSSS TTTTT % 12 % T E SS T % 13 % T EEE SSS T % 14 % T E SS T % 15 % T EEEEE SSSSS T % 16 % % 17 % Perform "Magick" on Images via the Command Line Interface % 18 % % 19 % Dragon Computing % 20 % Anthony Thyssen % 21 % January 2012 % 22 % % 23 % % 24 % Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 25 % dedicated to making software imaging solutions freely available. % 26 % % 27 % You may not use this file except in compliance with the License. You may % 28 % obtain a copy of the License at % 29 % % 30 % http://www.imagemagick.org/script/license.php % 31 % % 32 % Unless required by applicable law or agreed to in writing, software % 33 % distributed under the License is distributed on an "AS IS" BASIS, % 34 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 35 % See the License for the specific language governing permissions and % 36 % limitations under the License. % 37 % % 38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 39 % 40 % Test the raw tokanization of the ScriptToken Subroutines 41 % 42 % This actually uses very little of the magic core functions 43 % and in fact creates a completely stand-alone program by substituting 44 % required MagickCore with direct system equivelents. 45 % 46 % Build 47 % cc script-token-test.c -o script-token-test 48 % 49 % For testing see script-token-test.sh 50 % 51 */ 52 53 /* System Replacement for MagickWand includes */ 54 #include <stdio.h> 55 #include <string.h> 56 #include <stdlib.h> 57 #include <assert.h> 58 #include <errno.h> 59 60 /* Defines to replace MagickWand / MagickCore defintions */ 61 #define MagickPathExtent 4096 62 #define MagickFalse 0 63 #define MagickTrue 1 64 #define MagickBooleanType int 65 66 #define AcquireMagickMemory(s) malloc(s) 67 #define RelinquishMagickMemory(p) (free(p),NULL) 68 #define ResizeMagickMemory(p,s) realloc(p,s) 69 #define ResetMagickMemory(p,b,s) memset(p,b,s) 70 #define StringToLong(s) strtol(s,(char **) NULL,10) 71 #define LocaleCompare(p,q) strcasecmp(p,q) 72 #define LocaleNCompare(p,q,l) strncasecmp(p,q,l) 73 #define WandSignature 0xabacadabUL 74 #define fopen_utf8(p,q) fopen(p,q) 75 #define WandExport 76 77 /* Include the actual code for ScriptToken functions */ 78 #define SCRIPT_TOKEN_TESTING 1 /* Prevent MagickWand Includes */ 79 #include "../script-token.h" 80 #include "../script-token.c" 81 82 /* Test program to report what tokens it finds in given input file/stream */ 83 84 int main(int argc, char *argv[]) 85 { 86 ScriptTokenInfo 87 *token_info; 88 89 token_info = AcquireScriptTokenInfo( (argc>1) ? argv[1] : "-" ); 90 if (token_info == (ScriptTokenInfo *) NULL) { 91 printf("Script Open Failure : %s\n", strerror(errno)); 92 return(1); 93 } 94 95 while (1) { 96 if( GetScriptToken(token_info) == MagickFalse ) 97 break; 98 99 if( strlen(token_info->token) > INITAL_TOKEN_LENGTH-1 ) { 100 token_info->token[INITAL_TOKEN_LENGTH-4] = '.'; 101 token_info->token[INITAL_TOKEN_LENGTH-3] = '.'; 102 token_info->token[INITAL_TOKEN_LENGTH-2] = '.'; 103 token_info->token[INITAL_TOKEN_LENGTH-1] = '\0'; 104 } 105 printf("l=%d, c=%d, stat=%d, len=%d, token=\"%s\"\n", 106 token_info->token_line, token_info->token_column, 107 token_info->status, token_info->length, token_info->token); 108 } 109 110 switch( token_info->status ) { 111 case TokenStatusOK: 112 break; 113 case TokenStatusEOF: 114 printf("EOF Found\n"); 115 break; 116 case TokenStatusBadQuotes: 117 /* Ensure last token has a sane length for error report */ 118 if( strlen(token_info->token) > INITAL_TOKEN_LENGTH-1 ) { 119 token_info->token[INITAL_TOKEN_LENGTH-4] = '.'; 120 token_info->token[INITAL_TOKEN_LENGTH-3] = '.'; 121 token_info->token[INITAL_TOKEN_LENGTH-2] = '.'; 122 token_info->token[INITAL_TOKEN_LENGTH-1] = '\0'; 123 } 124 printf("Bad Quotes l=%d, c=%d token=\"%s\"\n", 125 token_info->token_line,token_info->token_column, token_info->token); 126 break; 127 case TokenStatusMemoryFailed: /* token is invalid */ 128 printf("Out of Memory l=%d, c=%d\n", 129 token_info->token_line,token_info->token_column); 130 break; 131 case TokenStatusBinary: /* token is invalid */ 132 printf("Binary Char at l=%d, c=%d\n", 133 token_info->curr_line,token_info->curr_column); 134 break; 135 } 136 137 /* Clean up */ 138 token_info = DestroyScriptTokenInfo(token_info); 139 140 return(0); 141 } 142