From b9799ca597a49b88a63d1c10c870c5670dab0cce Mon Sep 17 00:00:00 2001 From: "psyc://psyced.org/~lynX" <@> Date: Sat, 16 Apr 2011 13:49:47 +0200 Subject: [PATCH] match: intermediate version --- src/Makefile | 5 +++++ src/match.c | 46 +++++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/Makefile b/src/Makefile index 9337223..0403868 100644 --- a/src/Makefile +++ b/src/Makefile @@ -11,3 +11,8 @@ diet: lib: ${CC} -static -c -Os parser.c -lc -o libpsyc.o -DDEBUG -I../include ar rcs libpsyc.a libpsyc.o + +match: match.c + ${CC} -o $@ -DTEST $< + +it: match diff --git a/src/match.c b/src/match.c index 07de201..c7dc6b2 100644 --- a/src/match.c +++ b/src/match.c @@ -1,37 +1,36 @@ #include #include -int main(int argc, char **argv) { - char *sho, *lon, *s, *l, *se, *le; - int slen, llen; +#ifdef TEST +# define PT(args) printf args; +#else +# define PT(args) +#endif - if (argc != 3) { - printf("Usage: %s \n\nExample: %s _failure_delivery _failure_unsuccessful_delivery_death\n", argv[0], argv[0]); - return -1; - } - sho = argv[1]; - lon = argv[2]; +int psycmatch(char* sho, char* lon) { + char *s, *l, *se, *le; + int slen, llen; if (!(slen = strlen(sho)) || *sho != '_' || !(llen = strlen(lon)) || *lon != '_') { - printf("Please use long format keywords (compact ones would be faster, I know..)\n"); + PT(("Please use long format keywords (compact ones would be faster, I know..)\n")) return -2; } if (slen > llen) { - printf("The long string is shorter than the short one.\n"); + PT(("The long string is shorter than the short one.\n")) return -3; } if (slen == llen) { if (!strcmp(sho, lon)) { - printf("Identical arguments.\n"); + PT(("Identical arguments.\n")) return 0; } - printf("Same length but different.\nNo match, but they could be related or have a common type.\n"); + PT(("Same length but different.\nNo match, but they could be related or have a common type.\n")) return -4; } - printf("*start short '%s' long '%s'\n", sho, lon); + PT(("*start short '%s' long '%s'\n", sho, lon)) se = sho+slen; le = lon+llen; @@ -39,10 +38,10 @@ int main(int argc, char **argv) { sho++; lon++; while(s = strchr(sho, '_')) { *s = 0; - printf("sho goes '%c' and lon goes '%c'\n", *sho, *lon); + PT(("sho goes '%c' and lon goes '%c'\n", *sho, *lon)) while(l = strchr(lon, '_')) { *l = 0; - printf("strcmp short '%s' long '%s'\n", sho, lon); + PT(("strcmp short '%s' long '%s'\n", sho, lon)) if (!strcmp(sho, lon)) goto foundone; if (l == le) goto failed; *l = '_'; @@ -50,17 +49,26 @@ int main(int argc, char **argv) { } goto failed; foundone: - printf("found: short '%s' long '%s'\n", sho, lon); + PT(("found: short '%s' long '%s'\n", sho, lon)) if (s == se) goto success; *l = *s = '_'; sho = ++s; lon = ++l; } success: - printf("Yes, they match!\n"); return 0; failed: - printf("No, they don't!\n"); + PT(("No, they don't match.\n")) return 1; } +#ifdef TEST +int main(int argc, char **argv) { + if (argc != 3) { + printf("Usage: %s \n\nExample: %s _failure_delivery _failure_unsuccessful_delivery_death\n", argv[0], argv[0]); + return -1; + } + if (psycmatch(argv[1], argv[2]) == 0) + printf("Yes, they match!\n"); +} +#endif