added possibility for default values (dynamic parameter binding)
authorpk910 <philipp@zoelle1.de>
Tue, 20 Dec 2011 20:36:12 +0000 (21:36 +0100)
committerpk910 <philipp@zoelle1.de>
Tue, 20 Dec 2011 20:49:04 +0000 (21:49 +0100)
src/modcmd.c

index 50f71c86c138c4fea960643a6c3e8ef2908eeb03..9846db20115da854a7f7f0861214ac840762bee2 100644 (file)
@@ -253,13 +253,23 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s
                 int args_pos = 0;
                 char *uargs[MAXNUMPARAMS];
                 int uargc = 0;
-                char *b;
+                char *b, *c;
                 int i;
                 int allargs, argi;
                 for(i = 0; i < cbind->paramcount; i++) {
                     b = cbind->parameters[i];
                     if(b[0] == '%') {
                         b++;
+                        c = b;
+                        while(*c && *c != ' ') {
+                            if(*c == '|') break;
+                            c++;
+                        }
+                        if(!*c || *c == ' ') c = NULL;
+                        else {
+                            *c = '\0';
+                            c++;
+                        }
                         if(b[strlen(b)-1] == '-') {
                             allargs = strlen(b)-1;
                             b[allargs] = '\0';
@@ -297,6 +307,9 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s
                             } else if((cbind->func->flags & CMDFLAG_EMPTY_ARGS)) {
                                 uargs[uargc++] = args_buffer + args_pos;
                                 args_buffer[args_pos++] = '\0';
+                            } else if(c) {
+                                uargs[uargc++] = args_buffer + args_pos;
+                                args_pos += sprintf(args_buffer + args_pos, "%s", c) + 1;
                             }
                         } else if(!strcmp(b, "c")) {
                             uargs[uargc++] = args_buffer + args_pos;
@@ -305,6 +318,7 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s
                             uargs[uargc++] = args_buffer + args_pos;
                             args_pos += sprintf(args_buffer + args_pos, "%s", user->nick) + 1;
                         }
+                        if(c) c[-1] = '|'; //reset \0 to |
                     } else {
                         uargs[uargc++] = args_buffer + args_pos;
                         args_pos += sprintf(args_buffer + args_pos, "%s", b) + 1;