Provide local-echo option.

Can be switched on with -e on the command line.
Can be toggled with Ctrl t e while program is running.
This commit is contained in:
Henner Zeller 2018-06-23 12:24:41 -07:00
parent 08fd18e803
commit dabd2130a9
6 changed files with 38 additions and 1 deletions

View file

@ -33,6 +33,10 @@ _tio()
COMPREPLY=( $(compgen -W "5 6 7 8" -- ${cur}) )
return 0
;;
-h | --local-echo)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
-f | --flow)
COMPREPLY=( $(compgen -W "hard soft none" -- ${cur}) )
return 0

View file

@ -39,6 +39,7 @@ struct option_t
int output_delay;
bool no_autoconnect;
bool log;
bool local_echo;
const char *log_filename;
const char *map;
};

View file

@ -25,6 +25,7 @@
#define KEY_QUESTION 0x3f
#define KEY_B 0x62
#define KEY_C 0x63
#define KEY_E 0x65
#define KEY_H 0x68
#define KEY_L 0x6C
#define KEY_Q 0x71

View file

@ -45,6 +45,7 @@ struct option_t option =
0, // No output delay
false, // No autoconnect
false, // No log
false, // No local echo
"", // Log filename
"" // Map string
};
@ -61,6 +62,7 @@ void print_help(char *argv[])
printf(" -p, --parity odd|even|none Parity (default: none)\n");
printf(" -o, --output-delay <ms> Output delay (default: 0)\n");
printf(" -n, --no-autoconnect Disable automatic connect\n");
printf(" -e, --local-echo Do local echo\n");
printf(" -l, --log <filename> Log to file\n");
printf(" -m, --map <flags> Map special characters\n");
printf(" -v, --version Display version\n");
@ -108,6 +110,7 @@ void parse_options(int argc, char *argv[])
{"stopbits", required_argument, 0, 's'},
{"parity", required_argument, 0, 'p'},
{"output-delay", required_argument, 0, 'o'},
{"local-echo", no_argument, 0, 'e'},
{"no-autoconnect", no_argument, 0, 'n'},
{"log", required_argument, 0, 'l'},
{"map", required_argument, 0, 'm'},
@ -120,7 +123,7 @@ void parse_options(int argc, char *argv[])
int option_index = 0;
/* Parse argument using getopt_long */
c = getopt_long(argc, argv, "b:d:f:s:p:o:nl:m:vh", long_options, &option_index);
c = getopt_long(argc, argv, "b:d:f:s:p:o:nl:m:vhe", long_options, &option_index);
/* Detect the end of the options */
if (c == -1)
@ -146,6 +149,10 @@ void parse_options(int argc, char *argv[])
option.databits = string_to_long(optarg);
break;
case 'e':
option.local_echo = true;
break;
case 'f':
option.flow = optarg;
break;

View file

@ -100,6 +100,7 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
tio_printf(" ctrl-t ? List available key commands");
tio_printf(" ctrl-t b Send break");
tio_printf(" ctrl-t c Show configuration");
tio_printf(" ctrl-t e Toggle local echo mode");
tio_printf(" ctrl-t h Toggle hexadecimal mode");
tio_printf(" ctrl-t l Clear screen");
tio_printf(" ctrl-t q Quit");
@ -119,6 +120,7 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
tio_printf(" Flow: %s", option.flow);
tio_printf(" Stopbits: %d", option.stopbits);
tio_printf(" Parity: %s", option.parity);
tio_printf(" Local Echo: %s", option.local_echo ? "yes":"no");
tio_printf(" Output delay: %d", option.output_delay);
if (option.map[0] != 0)
tio_printf(" Map flags: %s", option.map);
@ -126,6 +128,10 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
tio_printf(" Log file: %s", option.log_filename);
break;
case KEY_E:
option.local_echo = !option.local_echo;
break;
case KEY_H:
/* Toggle hexadecimal printing mode */
if (print_mode == NORMAL)
@ -511,6 +517,15 @@ void tty_restore(void)
tty_disconnect();
}
static void optional_local_echo(char c)
{
if (!option.local_echo)
return;
print(c);
if (option.log)
log_write(c);
}
int tty_connect(void)
{
fd_set rdfs; /* Read file descriptor set */
@ -657,6 +672,7 @@ int tty_connect(void)
if ((output_char == '\n') && (map_onlcrnl)) {
char r = '\r';
optional_local_echo(r);
status = write(fd, &r, 1);
if (status < 0)
warning_printf("Could not write to tty device");
@ -666,6 +682,7 @@ int tty_connect(void)
}
/* Send output to tty device */
optional_local_echo(output_char);
status = write(fd, &output_char, 1);
if (status < 0)
warning_printf("Could not write to tty device");