From 3ee9ea059ebff57a4fc66b708c5dd3bfe1abbd65 Mon Sep 17 00:00:00 2001 From: Bukz Date: Wed, 18 May 2011 02:08:15 +0000 Subject: [PATCH] cleanup/testing new "testlist" command git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@6449 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/command.cpp | 101 ++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/source/src/command.cpp b/source/src/command.cpp index ba993101..dd44bea3 100644 --- a/source/src/command.cpp +++ b/source/src/command.cpp @@ -1124,80 +1124,78 @@ void addpunct(char *s, char *type = "0") } } -// Returns the current # of players -void curplayers(void) -{ - defformatstring(output)("%d", (multiplayer(false) ? (players.length() + 1) : players.length())); - result(output); -} +void curplayers(void) { intret(multiplayer(false) ? (players.length() + 1) : players.length()); } -void toLower(char *s) -{ - result(strcaps(s, false)); -} - -void toUpper(char *s) -{ - result(strcaps(s, true)); -} +void toLower(char *s) { result(strcaps(s, false)); } +void toUpper(char *s) { result(strcaps(s, true)); } void testchar(char *s, char *type) { int t = atoi(type); - switch(t) - { + switch(t) { case 1: - if(isalpha(s[0]) != 0) - intret(1); - else - intret(0); + if(isalpha(s[0]) != 0) { intret(1); return; } break; case 2: - if(isalnum(s[0]) != 0) - intret(1); - else - intret(0); + if(isalnum(s[0]) != 0) { intret(1); return; } break; case 3: - if(islower(s[0]) != 0) - intret(1); - else - intret(0); + if(islower(s[0]) != 0) { intret(1); return; } break; case 4: - if(isupper(s[0]) != 0) - intret(1); - else - intret(0); + if(isupper(s[0]) != 0) { intret(1); return; } break; case 5: - if(isprint(s[0]) != 0) - intret(1); - else - intret(0); + if(isprint(s[0]) != 0) { intret(1); return; } break; case 6: - if(ispunct(s[0]) != 0) - intret(1); - else - intret(0); + if(ispunct(s[0]) != 0) { intret(1); return; } break; case 7: - if(isspace(s[0]) != 0) - intret(1); - else - intret(0); + if(isspace(s[0]) != 0) { intret(1); return; } break; default: - if(isdigit(s[0]) != 0) - intret(1); - else - intret(0); + if(isdigit(s[0]) != 0) { intret(1); return; } break; } + intret(0); } -COMMAND(testchar, ARG_2STR); +// test a cubescript list for various conditions, default being - ensure that every element of the list +// is a number (supports ints and floats) +void testlist(char *list, char *type = "0") +{ + if(listlen(list)) { + int t = atoi(type); + + for(int ctr = 0; ctr < listlen(list); ctr++) { // loop through every element of the list + int periodCtr = 0; // counter for how many times a period (.) shows up in each element + char *curelement = indexlist(list, ctr); // the current element to examine + + for(unsigned int len = 0; len < strlen(curelement); len++) { // loop through the length (in chars) of the current element + char curchar = curelement[len]; // the current char of the current element to examine + + switch(t) { + case 1: // test for a list of alpha characters (a-z || A-Z are valid) + if(!isalpha(curchar)) { intret(0); return; } + break; + case 2: // test for a list of alhpa characters (a-z || A-Z || whitespace are valid) + if(!isalpha(curchar) && !isspace(curchar)) { intret(0); return; } + break; + //case 3: break; + default: // test for a list of valid numbers + bool notvalid = (isalpha(curchar) || isspace(curchar) || ispunct(curchar) && curchar != '.'); // determines if the char is valid or not + + if(curchar == '.') periodCtr++; // increment the periods counter + if(notvalid || periodCtr > 1) { intret(0); return; } // if the char is not valid or we have found more than 1 period in this element, it is an invalid list + break; + } + } + } + + intret(1); + } +} COMMANDN(c, colora, ARG_1STR); COMMANDN(loop, loopa, ARG_3STR); @@ -1216,7 +1214,8 @@ COMMAND(addpunct, ARG_2STR); COMMAND(curplayers, ARG_NONE); COMMANDN(tolower, toLower, ARG_1STR); COMMANDN(toupper, toUpper, ARG_1STR); - +COMMAND(testchar, ARG_2STR); +COMMAND(testlist, ARG_2STR); int add(int a, int b) { return a+b; } COMMANDN(+, add, ARG_2EXP); int mul(int a, int b) { return a*b; } COMMANDN(*, mul, ARG_2EXP);