1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
/* compile with
*
* gcc -g -Wall token.c `pkg-config vips --cflags --libs`
*
* run with eg.:
*
* $ ./a.out '"wdfw"df,wdw,dw' 3 wdfw df,wdw,dw
*
*/
#include <vips/vips.h>
char *token_names[] = {
"",
"left",
"right",
"string",
"equals",
"comma",
};
int
main(int argc, char **argv)
{
if (VIPS_INIT(argv[0]))
vips_error_exit(NULL);
if (argc != 5)
vips_error_exit("usage: %s string-to-parse token token-string residual",
argv[0]);
const char *p = argv[1];
printf("argv[1]:\n");
for (int i = 0; i < strlen(p); i++)
printf("\t\t%2d) %02x %c\n", i, p[i], p[i]);
VipsToken token;
char buf[256];
p = vips__token_get(p, &token, buf, 256);
printf("vips__token_get:\n");
printf("\ttoken = %d (%s)\n", token, token_names[token]);
if (token == VIPS_TOKEN_STRING) {
printf("\tbuf = <%s>\n", buf);
for (int i = 0; i < strlen(buf); i++)
printf("\t\t%2d) 0x%02x %c\n", i, buf[i], buf[i]);
}
printf("\tresidual = <%s>\n", p);
if (token != atoi(argv[2]))
vips_error_exit("token mismatch");
if (token == VIPS_TOKEN_STRING &&
!g_str_equal(buf, argv[3]))
vips_error_exit("parsed string mismatch");
if (!g_str_equal(p, argv[4]))
vips_error_exit("residual mismatch");
return 0;
}
|