/*
|
|
*
|
|
* PRU Debug Program - command input function
|
|
* (c) Copyright 2011, 2013 by Arctica Technologies
|
|
* Written by Steven Anderson
|
|
*
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/mman.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <errno.h>
|
|
#include <termios.h>
|
|
#include <sys/ioctl.h>
|
|
|
|
#include "prudbg.h"
|
|
|
|
int cmd_input(char *prompt, char *cmd, char *cmdargs, unsigned int *argptrs, unsigned int *numargs)
|
|
{
|
|
unsigned int i, j, full_len, on_zero;
|
|
char c, last_char;
|
|
char buf[MAX_COMMAND_LINE];
|
|
|
|
// print prompt
|
|
printf("%s", prompt);
|
|
|
|
// collect command until space or return
|
|
i = 0;
|
|
do {
|
|
c = getchar();
|
|
|
|
// check for backspace
|
|
if (c == 0x08 || c == 0x7F) {
|
|
if (i != 0) {
|
|
putchar(0x08);
|
|
putchar(' ');
|
|
putchar(0x08);
|
|
i--;
|
|
}
|
|
// just a normal character
|
|
} else {
|
|
buf[i] = c;
|
|
printf("%c", buf[i]);
|
|
if (i < (MAX_COMMAND_LINE - 1)) i++;
|
|
}
|
|
|
|
} while (c != '\n');
|
|
buf[i-1] = 0;
|
|
|
|
// replace spaces and return with zeros
|
|
full_len = strlen(buf);
|
|
for (i=0; i<full_len; i++) if (buf[i] == ' ') buf[i] = 0;
|
|
|
|
// copy command (first word) to cmd argument and shift to upper case
|
|
for (i=0; i<(strlen(buf)+1); i++) cmd[i] = toupper(buf[i]);
|
|
|
|
// build index array and count number of arguments
|
|
for (i=strlen(cmd), on_zero=TRUE, numargs[0]=0; i<full_len; i++) {
|
|
if (on_zero) {
|
|
if (buf[i] != 0) {
|
|
on_zero = FALSE;
|
|
argptrs[numargs[0]++] = i;
|
|
}
|
|
} else {
|
|
if (buf[i] == 0) on_zero = TRUE;
|
|
}
|
|
}
|
|
|
|
for (i=0; i<full_len+1; i++) cmdargs[i] = buf[i];
|
|
|
|
return 0;
|
|
}
|
|
|