/* jollity irc client for plan 9 by sean caron (scaron@umich.edu) */ #include "main.h" /* user input parser */ // return codes// -1: input was null string// -2: strtok error trying to parse command// -3: strtok error parsing slash from command// otherwise returns number of parameters parsed for command int parse_user_input(char *string, struct command *cmd) { int i; char *temp; /* catch null string */ if (strlen(string) == 1) { return -1; } /* first word will be the command */ temp = strtok(string, " "); if ( temp == 0 ) { return -2; } else { cmd->command = realloc( cmd->command, sizeof(char)*(strlen(temp)+1) ); if ( cmd->command == 0 ) { exits("REALLOC"); } strcpy(cmd->command, temp); } /* subsequent words will be taken as parameters of the command */ while (1) { if ( cmd->n_params > 0 ) { cmd->parameters = realloc(cmd->parameters, (sizeof(char *)*(cmd->n_params+1))); if ( cmd->parameters == 0 ) { threadexitsall("REALLOC"); } } temp = strtok(0, " "); if ( temp == 0 ) { break; } else { *(cmd->parameters+cmd->n_params) = malloc(sizeof(char)*(strlen(temp)+1)); if ( *(cmd->parameters+cmd->n_params) == 0 ) { threadexitsall("MALLOC"); } strcpy( *(cmd->parameters+cmd->n_params), temp); cmd->n_params = cmd->n_params + 1; } } for ( i = 0; i < cmd->n_params; i++ ) { stripnl( *(cmd->parameters+i) ); } temp = strtok(cmd->command, "/"); if ( temp == 0 ) { return -3; } else { strcpy(cmd->command, strtok(cmd->command, "/")); } return cmd->n_params;}
/* jollity irc client for plan 9 by sean caron (scaron@umich.edu) */
#include "main.h"
/* user input parser */
// return codes
// -1: input was null string
// -2: strtok error trying to parse command
// -3: strtok error parsing slash from command
// otherwise returns number of parameters parsed for command
int parse_user_input(char *string, struct command *cmd) {
int i;
char *temp;
/* catch null string */
if (strlen(string) == 1) {
return -1;
}
/* first word will be the command */
temp = strtok(string, " ");
if ( temp == 0 ) {
return -2;
}
else {
cmd->command = realloc( cmd->command, sizeof(char)*(strlen(temp)+1) );
if ( cmd->command == 0 ) {
exits("REALLOC");
}
strcpy(cmd->command, temp);
}
/* subsequent words will be taken as parameters of the command */
while (1) {
if ( cmd->n_params > 0 ) {
cmd->parameters = realloc(cmd->parameters, (sizeof(char *)*(cmd->n_params+1)));
if ( cmd->parameters == 0 ) {
threadexitsall("REALLOC");
}
}
temp = strtok(0, " ");
if ( temp == 0 ) {
break;
}
else {
*(cmd->parameters+cmd->n_params) = malloc(sizeof(char)*(strlen(temp)+1));
if ( *(cmd->parameters+cmd->n_params) == 0 ) {
threadexitsall("MALLOC");
}
strcpy( *(cmd->parameters+cmd->n_params), temp);
cmd->n_params = cmd->n_params + 1;
}
}
for ( i = 0; i < cmd->n_params; i++ ) {
stripnl( *(cmd->parameters+i) );
}
temp = strtok(cmd->command, "/");
if ( temp == 0 ) {
return -3;
}
else {
strcpy(cmd->command, strtok(cmd->command, "/"));
}
return cmd->n_params;
}