add :, delimiters to parse_input()

remove replace_blanks_with_single_space()
This commit is contained in:
onyx-and-iris 2024-07-08 17:29:23 +01:00
parent 48bb15e8f2
commit c95ff0e163
3 changed files with 8 additions and 53 deletions

View File

@ -9,7 +9,6 @@
#define __UTIL_H__ #define __UTIL_H__
void remove_last_part_of_path(char *fullpath); void remove_last_part_of_path(char *fullpath);
int replace_blanks_with_single_space(char *s, size_t len);
char *kind_as_string(char *s, int kind, int n); char *kind_as_string(char *s, int kind, int n);
char *version_as_string(char *s, long v, int n); char *version_as_string(char *s, long v, int n);

View File

@ -31,47 +31,6 @@ void remove_last_part_of_path(char *fullpath)
} }
} }
/**
* @brief Replaces multiple spaces and tabs with single spaces
*
* @param s The string to be reduced
* @param len Current length of the string
* @return int New length of the string
*/
int replace_blanks_with_single_space(char *s, size_t len)
{
int j = 0;
int count = 0;
if (len == 1 && isblank(s[0]))
{
s[0] = '\0';
return len;
}
if (len < 2)
return len;
for (int i = 0; s[i] != '\0'; i++)
{
if (isblank(s[i]))
{
count++;
}
else
{
if (count >= 1)
{
count = 0;
s[j++] = ' ';
}
s[j++] = s[i];
}
}
s[j] = '\0';
return j;
}
/** /**
* @brief Converts Voicemeeter's kind into a string. * @brief Converts Voicemeeter's kind into a string.
* *

View File

@ -50,7 +50,7 @@ static bool vflag = false;
void help(void); void help(void);
enum kind set_kind(char *kval); enum kind set_kind(char *kval);
void interactive(PT_VMR vmr); void interactive(PT_VMR vmr);
void parse_input(PT_VMR vmr, char *input, int len); void parse_input(PT_VMR vmr, char *input);
void parse_command(PT_VMR vmr, char *command); void parse_command(PT_VMR vmr, char *command);
void get(PT_VMR vmr, char *command, struct result *res); void get(PT_VMR vmr, char *command, struct result *res);
@ -160,7 +160,7 @@ int main(int argc, char *argv[])
{ {
for (int i = optind; i < argc; i++) for (int i = optind; i < argc; i++)
{ {
parse_input(vmr, argv[i], strlen(argv[i])); parse_input(vmr, argv[i]);
} }
} }
@ -240,16 +240,15 @@ enum kind set_kind(char *kval)
void interactive(PT_VMR vmr) void interactive(PT_VMR vmr)
{ {
char input[MAX_LINE]; char input[MAX_LINE];
size_t len;
printf(">> "); printf(">> ");
while (fgets(input, MAX_LINE, stdin) != NULL) while (fgets(input, MAX_LINE, stdin) != NULL)
{ {
input[strcspn(input, "\n")] = 0; input[strcspn(input, "\n")] = 0;
if ((len = strlen(input)) == 1 && toupper(input[0]) == 'Q') if (strlen(input) == 1 && toupper(input[0]) == 'Q')
break; break;
parse_input(vmr, input, len); parse_input(vmr, input);
memset(input, 0, MAX_LINE); /* reset input buffer */ memset(input, 0, MAX_LINE); /* reset input buffer */
printf(">> "); printf(">> ");
@ -262,18 +261,16 @@ void interactive(PT_VMR vmr)
* *
* @param vmr Pointer to the iVMR interface * @param vmr Pointer to the iVMR interface
* @param input Each input line, from stdin or CLI args * @param input Each input line, from stdin or CLI args
* @param len The length of the input line
*/ */
void parse_input(PT_VMR vmr, char *input, int len) void parse_input(PT_VMR vmr, char *input)
{ {
char *token; char *token, *p;
replace_blanks_with_single_space(input, len); token = strtok_r(input, " \t;,", &p);
token = strtok(input, " ");
while (token != NULL) while (token != NULL)
{ {
parse_command(vmr, token); parse_command(vmr, token);
token = strtok(NULL, " "); token = strtok_r(NULL, " \t;,", &p);
} }
} }