console.c
changeset 1819 b352924c4a27
parent 1805 1dba0eb4cb47
child 1827 94529cbdec60
equal deleted inserted replaced
1818:56af6f0d6123 1819:b352924c4a27
   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;