599 |
599 |
600 memset(&aliases, 0, sizeof(aliases)); |
600 memset(&aliases, 0, sizeof(aliases)); |
601 memset(&aliasstream, 0, sizeof(aliasstream)); |
601 memset(&aliasstream, 0, sizeof(aliasstream)); |
602 |
602 |
603 aliases[0] = aliasstream; |
603 aliases[0] = aliasstream; |
604 for (cmdptr = alias->cmdline, a_index = 0, astream_i = 0; *cmdptr != '\0'; *cmdptr++) { |
604 for (cmdptr = alias->cmdline, a_index = 0, astream_i = 0; *cmdptr != '\0'; cmdptr++) { |
605 if (a_index >= lengthof(aliases) || astream_i >= lengthof(aliasstream)) break; |
605 if (a_index >= lengthof(aliases) || astream_i >= lengthof(aliasstream)) break; |
606 |
606 |
607 switch (*cmdptr) { |
607 switch (*cmdptr) { |
608 case '\'': /* ' will double for "" */ |
608 case '\'': /* ' will double for "" */ |
609 aliasstream[astream_i++] = '"'; |
609 aliasstream[astream_i++] = '"'; |
610 break; |
610 break; |
611 case ';': /* Cmd seperator, start new command */ |
611 case ';': /* Cmd seperator, start new command */ |
612 aliasstream[astream_i] = '\0'; |
612 aliasstream[astream_i] = '\0'; |
613 aliases[++a_index] = &aliasstream[++astream_i]; |
613 aliases[++a_index] = &aliasstream[++astream_i]; |
614 *cmdptr++; |
614 cmdptr++; |
615 break; |
615 break; |
616 case '%': /* Some or all parameters */ |
616 case '%': /* Some or all parameters */ |
617 *cmdptr++; |
617 cmdptr++; |
618 switch (*cmdptr) { |
618 switch (*cmdptr) { |
619 case '+': { /* All parameters seperated: "[param 1]" "[param 2]" */ |
619 case '+': { /* All parameters seperated: "[param 1]" "[param 2]" */ |
620 for (i = 0; i != tokencount; i++) { |
620 for (i = 0; i != tokencount; i++) { |
621 aliasstream[astream_i++] = '"'; |
621 aliasstream[astream_i++] = '"'; |
622 astream_i += IConsoleCopyInParams(&aliasstream[astream_i], tokens[i], astream_i); |
622 astream_i += IConsoleCopyInParams(&aliasstream[astream_i], tokens[i], astream_i); |
1020 uint t_index, tstream_i; |
1020 uint t_index, tstream_i; |
1021 |
1021 |
1022 bool longtoken = false; |
1022 bool longtoken = false; |
1023 bool foundtoken = false; |
1023 bool foundtoken = false; |
1024 |
1024 |
1025 for (cmdptr = cmdstr; *cmdptr != '\0'; *cmdptr++) { |
1025 for (cmdptr = cmdstr; *cmdptr != '\0'; cmdptr++) { |
1026 if (!IsValidAsciiChar(*cmdptr)) { |
1026 if (!IsValidAsciiChar(*cmdptr)) { |
1027 IConsoleError("command contains malformed characters, aborting"); |
1027 IConsoleError("command contains malformed characters, aborting"); |
1028 IConsolePrintF(_icolour_err, "ERROR: command was: '%s'", cmdstr); |
1028 IConsolePrintF(_icolour_err, "ERROR: command was: '%s'", cmdstr); |
1029 return; |
1029 return; |
1030 } |
1030 } |
1038 |
1038 |
1039 /* 1. Split up commandline into tokens, seperated by spaces, commands |
1039 /* 1. Split up commandline into tokens, seperated by spaces, commands |
1040 * enclosed in "" are taken as one token. We can only go as far as the amount |
1040 * enclosed in "" are taken as one token. We can only go as far as the amount |
1041 * of characters in our stream or the max amount of tokens we can handle */ |
1041 * of characters in our stream or the max amount of tokens we can handle */ |
1042 tokens[0] = tokenstream; |
1042 tokens[0] = tokenstream; |
1043 for (cmdptr = cmdstr, t_index = 0, tstream_i = 0; *cmdptr != '\0'; *cmdptr++) { |
1043 for (cmdptr = cmdstr, t_index = 0, tstream_i = 0; *cmdptr != '\0'; cmdptr++) { |
1044 if (t_index >= lengthof(tokens) || tstream_i >= lengthof(tokenstream)) break; |
1044 if (t_index >= lengthof(tokens) || tstream_i >= lengthof(tokenstream)) break; |
1045 |
1045 |
1046 switch (*cmdptr) { |
1046 switch (*cmdptr) { |
1047 case ' ': /* Token seperator */ |
1047 case ' ': /* Token seperator */ |
1048 if (!foundtoken) break; |
1048 if (!foundtoken) break; |