mirror of
https://github.com/tio/tio.git
synced 2026-05-01 23:07:58 +02:00
Merge branch 'tio:master' into colorfree
This commit is contained in:
commit
e83b5e9f40
9 changed files with 77 additions and 163 deletions
1
AUTHORS
1
AUTHORS
|
|
@ -29,5 +29,6 @@ Björn Stenberg <bjorn@haxx.se>
|
||||||
Henner Zeller <h.zeller@acm.org>
|
Henner Zeller <h.zeller@acm.org>
|
||||||
Henrik Brix Andersen <henrik@brixandersen.dk>
|
Henrik Brix Andersen <henrik@brixandersen.dk>
|
||||||
Mariusz Midor <dexlab@o2.pl>
|
Mariusz Midor <dexlab@o2.pl>
|
||||||
|
attila-v <attila_v@index.hu>
|
||||||
|
|
||||||
Thanks to everyone who has contributed to this project.
|
Thanks to everyone who has contributed to this project.
|
||||||
|
|
|
||||||
109
README
109
README
|
|
@ -1,109 +0,0 @@
|
||||||
=== tio - a simple TTY terminal I/O application ===
|
|
||||||
|
|
||||||
|
|
||||||
1. Introduction
|
|
||||||
|
|
||||||
tio is a simple TTY terminal application which features a straightforward
|
|
||||||
commandline interface to easily connect to TTY devices for basic
|
|
||||||
input/output.
|
|
||||||
|
|
||||||
It was created because the author needed a simple no-nonsense TTY terminal
|
|
||||||
application to easily connect to various terminal TTY devices.
|
|
||||||
|
|
||||||
|
|
||||||
2. Usage
|
|
||||||
|
|
||||||
The commandline interface is straightforward as reflected in the output
|
|
||||||
from 'tio --help':
|
|
||||||
|
|
||||||
|
|
||||||
Usage: tio [<options>] <tty device>
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-b, --baudrate <bps> Baud rate (default: 115200)
|
|
||||||
-d, --databits 5|6|7|8 Data bits (default: 8)
|
|
||||||
-f, --flow hard|soft|none Flow control (default: none)
|
|
||||||
-s, --stopbits 1|2 Stop bits (default: 1)
|
|
||||||
-p, --parity even|odd|none Parity (default: none)
|
|
||||||
-o, --output-delay <ms> Output delay (default: 0)
|
|
||||||
-n, --no-autoconnect Disable automatic connect
|
|
||||||
-l, --log <filename> Log to file
|
|
||||||
-m, --map <flags> Map special characters
|
|
||||||
-v, --version Display version
|
|
||||||
-h, --help Display help
|
|
||||||
|
|
||||||
In session, press ctrl-t q to quit.
|
|
||||||
|
|
||||||
|
|
||||||
The only option which requires a bit of elaboration is perhaps the
|
|
||||||
--no-autoconnect option.
|
|
||||||
|
|
||||||
By default tio automatically connects to the provided device if present.
|
|
||||||
If the device is not present, it will wait for it to appear and then
|
|
||||||
connect. If the connection is lost (eg. device is unplugged), it will wait
|
|
||||||
for the device to reappear and then reconnect. However, if the
|
|
||||||
--no-autoconnect option is provided, tio will exit if the device is not
|
|
||||||
present or an established connection is lost.
|
|
||||||
|
|
||||||
Tio features full bash autocompletion support.
|
|
||||||
|
|
||||||
Tio also supports various key commands. Press ctrl-t ? to list the
|
|
||||||
available key commands.
|
|
||||||
|
|
||||||
See the tio man page for more details.
|
|
||||||
|
|
||||||
|
|
||||||
3. Installation
|
|
||||||
|
|
||||||
The latest release version is available at https://tio.github.io
|
|
||||||
|
|
||||||
|
|
||||||
3.1 Installation using release tarball
|
|
||||||
|
|
||||||
Install steps:
|
|
||||||
|
|
||||||
$ ./configure
|
|
||||||
$ make
|
|
||||||
$ make install
|
|
||||||
|
|
||||||
See INSTALL file for more installation details.
|
|
||||||
|
|
||||||
|
|
||||||
3.2 Installation using package
|
|
||||||
|
|
||||||
Tio comes prepackaged for various GNU/Linux distributions. Visit
|
|
||||||
https://tio.github.io for package installation details.
|
|
||||||
|
|
||||||
|
|
||||||
4. Contributing
|
|
||||||
|
|
||||||
Tio is open source. All contributions (bug fixes, doc, ideas, etc.) are
|
|
||||||
welcome. Visit the tio GitHub page to access latest source code, create
|
|
||||||
pull requests, add issues etc..
|
|
||||||
|
|
||||||
GitHub: https://github.com/tio/tio
|
|
||||||
|
|
||||||
Also, if you find this free open source software useful please consider
|
|
||||||
making a donation: https://www.paypal.me/lundmar
|
|
||||||
|
|
||||||
|
|
||||||
5. Support
|
|
||||||
|
|
||||||
Submit bug reports via GitHub: https://github.com/tio/tio/issues
|
|
||||||
|
|
||||||
|
|
||||||
6. Website
|
|
||||||
|
|
||||||
Visit https://tio.github.io
|
|
||||||
|
|
||||||
|
|
||||||
7. License
|
|
||||||
|
|
||||||
Tio is GPLv2+. See COPYING file for license details.
|
|
||||||
|
|
||||||
|
|
||||||
8. Authors
|
|
||||||
|
|
||||||
Created by Martin Lund <martin.lund@keep-it-simple.com>
|
|
||||||
|
|
||||||
See the AUTHORS file for full list of authors.
|
|
||||||
46
README.md
46
README.md
|
|
@ -1,24 +1,20 @@
|
||||||
# tio - a simple TTY terminal I/O application
|
# tio - a simple TTY terminal I/O tool
|
||||||
|
|
||||||
[](https://travis-ci.org/tio/tio)
|
[](https://travis-ci.org/tio/tio)
|
||||||
[](https://build.snapcraft.io/user/tio/tio.snapcraft)
|
|
||||||
|
|
||||||
## 1. Introduction
|
## 1. Introduction
|
||||||
|
|
||||||
tio is a simple TTY terminal application which features a straightforward
|
tio is a simple TTY terminal tool which features a straightforward command-line
|
||||||
commandline interface to easily connect to TTY devices for basic input/output.
|
interface to easily connect to TTY devices for basic I/O operations.
|
||||||
|
|
||||||
It was created because the author needed a simple no-nonsense TTY terminal
|
|
||||||
application to easily connect to various terminal TTY devices.
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://tio.github.io/images/tio-demo.gif">
|
<img src="images/tio-demo.gif">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
## 2. Usage
|
## 2. Usage
|
||||||
|
|
||||||
The commandline interface is straightforward as reflected in the output from
|
The command-line interface is straightforward as reflected in the output from
|
||||||
'tio --help':
|
'tio --help':
|
||||||
```
|
```
|
||||||
Usage: tio [<options>] <tty-device>
|
Usage: tio [<options>] <tty-device>
|
||||||
|
|
@ -32,6 +28,7 @@ The commandline interface is straightforward as reflected in the output from
|
||||||
-o, --output-delay <ms> Output delay (default: 0)
|
-o, --output-delay <ms> Output delay (default: 0)
|
||||||
-n, --no-autoconnect Disable automatic connect
|
-n, --no-autoconnect Disable automatic connect
|
||||||
-e, --local-echo Do local echo
|
-e, --local-echo Do local echo
|
||||||
|
-t, --timestamp Timestamp lines
|
||||||
-l, --log <filename> Log to file
|
-l, --log <filename> Log to file
|
||||||
-m, --map <flags> Map special characters
|
-m, --map <flags> Map special characters
|
||||||
-v, --version Display version
|
-v, --version Display version
|
||||||
|
|
@ -62,9 +59,23 @@ See the tio man page for more details.
|
||||||
|
|
||||||
## 3. Installation
|
## 3. Installation
|
||||||
|
|
||||||
The latest release version is available at https://tio.github.io
|
### 3.1 Installation using package manager
|
||||||
|
tio comes prepackaged for various GNU/Linux distributions. Please consult your package manager tool to find and install tio.
|
||||||
|
|
||||||
### 3.1 Installation using release tarball
|
### 3.2 Installation using snap
|
||||||
|
|
||||||
|
Install latest stable version:
|
||||||
|
```
|
||||||
|
$ snap install tio
|
||||||
|
```
|
||||||
|
Install bleeding edge:
|
||||||
|
```
|
||||||
|
$ snap install tio --edge
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 Installation from source
|
||||||
|
|
||||||
|
The latest source releases can be found [here](https://github.com/tio/tio/releases).
|
||||||
|
|
||||||
Install steps:
|
Install steps:
|
||||||
```
|
```
|
||||||
|
|
@ -74,11 +85,6 @@ Install steps:
|
||||||
```
|
```
|
||||||
See INSTALL file for more installation details.
|
See INSTALL file for more installation details.
|
||||||
|
|
||||||
### 3.2 Installation using package
|
|
||||||
|
|
||||||
Tio comes prepackaged for various GNU/Linux distributions. Visit
|
|
||||||
https://tio.github.io for package installation details.
|
|
||||||
|
|
||||||
|
|
||||||
## 4. Contributing
|
## 4. Contributing
|
||||||
|
|
||||||
|
|
@ -89,9 +95,9 @@ requests, add issues etc..
|
||||||
GitHub: https://github.com/tio/tio
|
GitHub: https://github.com/tio/tio
|
||||||
|
|
||||||
Also, if you find this free open source software useful please consider making
|
Also, if you find this free open source software useful please consider making
|
||||||
a donation:
|
a donation of your choice:
|
||||||
|
|
||||||
[](https://www.paypal.me/lundmar)
|
[](https://www.paypal.me/lundmar)
|
||||||
|
|
||||||
|
|
||||||
## 5. Support
|
## 5. Support
|
||||||
|
|
@ -101,7 +107,7 @@ Submit bug reports via GitHub: https://github.com/tio/tio/issues
|
||||||
|
|
||||||
## 6. Website
|
## 6. Website
|
||||||
|
|
||||||
Visit https://tio.github.io
|
Visit [tio.github.io](https://tio.github.io)
|
||||||
|
|
||||||
|
|
||||||
## 7. License
|
## 7. License
|
||||||
|
|
@ -113,4 +119,4 @@ Tio is GPLv2+. See COPYING file for license details.
|
||||||
|
|
||||||
Created by Martin Lund \<martin.lund@keep-it-simple.com>
|
Created by Martin Lund \<martin.lund@keep-it-simple.com>
|
||||||
|
|
||||||
See the AUTHORS file for full list of authors.
|
See the AUTHORS file for full list of contributors.
|
||||||
|
|
|
||||||
BIN
images/paypal.png
Normal file
BIN
images/paypal.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
images/tio-demo.gif
Normal file
BIN
images/tio-demo.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 571 KiB |
|
|
@ -56,6 +56,11 @@ option is provided, tio will exit if the device is not present or an established
|
||||||
|
|
||||||
Enable local echo.
|
Enable local echo.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-t ", " \-\-timestamp
|
||||||
|
|
||||||
|
Timestamp lines.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BR \-l ", " "\-\-log " \fI<filename>
|
.BR \-l ", " "\-\-log " \fI<filename>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,19 +36,19 @@
|
||||||
/* Default options */
|
/* Default options */
|
||||||
struct option_t option =
|
struct option_t option =
|
||||||
{
|
{
|
||||||
"", // Device name
|
.tty_device = "",
|
||||||
115200, // Baudrate
|
.baudrate = 115200,
|
||||||
8, // Databits
|
.databits = 8,
|
||||||
"none", // Flow
|
.flow = "none",
|
||||||
1, // Stopbits
|
.stopbits = 1,
|
||||||
"none", // Parity
|
.parity = "none",
|
||||||
0, // No output delay
|
.output_delay = 0,
|
||||||
false, // No autoconnect
|
.no_autoconnect = false,
|
||||||
false, // No log
|
.log = false,
|
||||||
false, // No local echo
|
.local_echo = false,
|
||||||
false, // No timestamp
|
.timestamp = false,
|
||||||
"", // Log filename
|
.log_filename = "",
|
||||||
"" // Map string
|
.map = ""
|
||||||
};
|
};
|
||||||
|
|
||||||
void print_help(char *argv[])
|
void print_help(char *argv[])
|
||||||
|
|
@ -64,7 +64,7 @@ void print_help(char *argv[])
|
||||||
printf(" -o, --output-delay <ms> Output delay (default: 0)\n");
|
printf(" -o, --output-delay <ms> Output delay (default: 0)\n");
|
||||||
printf(" -n, --no-autoconnect Disable automatic connect\n");
|
printf(" -n, --no-autoconnect Disable automatic connect\n");
|
||||||
printf(" -e, --local-echo Do local echo\n");
|
printf(" -e, --local-echo Do local echo\n");
|
||||||
printf(" -t, --timestamp Prefix each new line with a timestamp\n");
|
printf(" -t, --timestamp Timestamp lines\n");
|
||||||
printf(" -l, --log <filename> Log to file\n");
|
printf(" -l, --log <filename> Log to file\n");
|
||||||
printf(" -m, --map <flags> Map special characters\n");
|
printf(" -m, --map <flags> Map special characters\n");
|
||||||
printf(" -v, --version Display version\n");
|
printf(" -v, --version Display version\n");
|
||||||
|
|
|
||||||
21
src/time.c
21
src/time.c
|
|
@ -22,27 +22,36 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include "tio/error.h"
|
#include "tio/error.h"
|
||||||
#include "tio/print.h"
|
#include "tio/print.h"
|
||||||
|
|
||||||
|
// "YYYY-MM-DDThh:mm:ss.sss" (ISO-8601 format).
|
||||||
|
#define TIME_STRING_SIZE 24
|
||||||
|
|
||||||
char * current_time(void)
|
char * current_time(void)
|
||||||
{
|
{
|
||||||
static char time_string[20];
|
static char time_string[TIME_STRING_SIZE];
|
||||||
time_t t;
|
|
||||||
struct tm *tmp;
|
struct tm *tmp;
|
||||||
|
|
||||||
t = time(NULL);
|
struct timeval tv;
|
||||||
tmp = localtime(&t);
|
gettimeofday(&tv,NULL);
|
||||||
|
|
||||||
|
tmp = localtime(&tv.tv_sec);
|
||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
{
|
{
|
||||||
error_printf("Retrieving local time failed");
|
error_printf("Retrieving local time failed");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
strftime(time_string, sizeof(time_string), "%H:%M:%S", tmp);
|
size_t len = strftime(time_string, sizeof(time_string), "%Y-%m-%dT%H:%M:%S", tmp);
|
||||||
|
if (len) {
|
||||||
|
len = snprintf(time_string + len, TIME_STRING_SIZE - len, ".%03ld", (long)tv.tv_usec / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
return time_string;
|
return (len >= 0) && (len < TIME_STRING_SIZE) ? time_string : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void delay(long ms)
|
void delay(long ms)
|
||||||
|
|
|
||||||
30
src/tty.c
30
src/tty.c
|
|
@ -619,7 +619,7 @@ int tty_connect(void)
|
||||||
static char previous_char = 0;
|
static char previous_char = 0;
|
||||||
static bool first = true;
|
static bool first = true;
|
||||||
int status;
|
int status;
|
||||||
time_t next_timestamp = 0;
|
bool next_timestamp = false;
|
||||||
char* now = NULL;
|
char* now = NULL;
|
||||||
|
|
||||||
/* Open tty device */
|
/* Open tty device */
|
||||||
|
|
@ -658,7 +658,7 @@ int tty_connect(void)
|
||||||
tainted = false;
|
tainted = false;
|
||||||
|
|
||||||
if (option.timestamp)
|
if (option.timestamp)
|
||||||
next_timestamp = time(NULL);
|
next_timestamp = true;
|
||||||
|
|
||||||
/* Save current port settings */
|
/* Save current port settings */
|
||||||
if (tcgetattr(fd, &tio_old) < 0)
|
if (tcgetattr(fd, &tio_old) < 0)
|
||||||
|
|
@ -715,19 +715,21 @@ int tty_connect(void)
|
||||||
if (next_timestamp && input_char != '\n' && input_char != '\r')
|
if (next_timestamp && input_char != '\n' && input_char != '\r')
|
||||||
{
|
{
|
||||||
now = current_time();
|
now = current_time();
|
||||||
fprintf(stdout, ANSI_COLOR_GRAY "[%s] " ANSI_COLOR_RESET, now);
|
if (now) {
|
||||||
if (option.log)
|
fprintf(stdout, ANSI_COLOR_GRAY "[%s] " ANSI_COLOR_RESET, now);
|
||||||
{
|
if (option.log)
|
||||||
log_write('[');
|
|
||||||
while (*now != '\0')
|
|
||||||
{
|
{
|
||||||
log_write(*now);
|
log_write('[');
|
||||||
++now;
|
while (*now != '\0')
|
||||||
|
{
|
||||||
|
log_write(*now);
|
||||||
|
++now;
|
||||||
|
}
|
||||||
|
log_write(']');
|
||||||
|
log_write(' ');
|
||||||
}
|
}
|
||||||
log_write(']');
|
next_timestamp = false;
|
||||||
log_write(' ');
|
|
||||||
}
|
}
|
||||||
next_timestamp = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map input character */
|
/* Map input character */
|
||||||
|
|
@ -736,7 +738,7 @@ int tty_connect(void)
|
||||||
print('\r');
|
print('\r');
|
||||||
print('\n');
|
print('\n');
|
||||||
if (option.timestamp)
|
if (option.timestamp)
|
||||||
next_timestamp = time(NULL);
|
next_timestamp = true;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
/* Print received tty character to stdout */
|
/* Print received tty character to stdout */
|
||||||
|
|
@ -751,7 +753,7 @@ int tty_connect(void)
|
||||||
tainted = true;
|
tainted = true;
|
||||||
|
|
||||||
if (input_char == '\n' && option.timestamp)
|
if (input_char == '\n' && option.timestamp)
|
||||||
next_timestamp = time(NULL);
|
next_timestamp = true;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
/* Error reading - device is likely unplugged */
|
/* Error reading - device is likely unplugged */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue