From 4c39a0bb9c1462c38cb04ed0435ea1357352e188 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 22 Mar 2009 05:17:52 +0000 Subject: prepare for use as library function --- telejet.c | 155 +++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 83 insertions(+), 72 deletions(-) diff --git a/telejet.c b/telejet.c index f383de6..8eee01a 100644 --- a/telejet.c +++ b/telejet.c @@ -45,7 +45,6 @@ enum {NONE, SOFT, HARD, QUERY}; int compose(char *buf, int addr, char cmd, char *data, int dlen); int chkresponse(char *buf, int *addr, char *data, int *dlen); -void usage(); int talk(int fd, char *buf, int wlen, int rlen); int prstr(char *data, int len); int main(int argc, char **argv); @@ -112,16 +111,6 @@ chkresponse(char *buf, int *addr, char *data, int *dlen) return 0; } -void -usage() -{ - extern char *__progname; - - fprintf(stderr, "usage: %s [-hsq] [addr]\n", __progname); - - exit(1); -} - int talk(int fd, char *buf, int wlen, int rlen) { @@ -183,38 +172,53 @@ prstr(char *data, int len) } int -main(int argc, char **argv) +opendev(char *dev) { - char buf[256]; - int len, ret, fd, c; - char data[256]; - int addr = 0xffffff; - int type = SOFT; - int eval = 1; + struct termios raw; + int fd; - while ((c = getopt(argc, argv, "f:shq")) != -1) - switch (c) { - case 'f': - device = strdup(optarg); - break; - case 's': - type = SOFT; - break; - case 'h': - type = HARD; - break; - case 'q': - type = QUERY; - break; - } + fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY); + if (fd == -1) + err(1, "%s", dev); + + tcgetattr(fd, &tio); + memcpy(&raw, &tio, sizeof(struct termios)); - argc -= optind; - argv += optind; + cfsetspeed(&raw, B2400); + cfmakeraw(&raw); +#if 1 + raw.c_cc[VMIN] = minlen; /* at least 10 bytes */ + raw.c_cc[VTIME] = 2; /* 200 ms */ +#endif + + if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) + err(1, "can't set raw mode"); + + return fd; +} + +int +closedev(int fd) +{ + if (tcsetattr(fd, TCSAFLUSH, &tio) < 0) + err(1, "can't restore from raw mode"); + close(fd); - if (argc) - addr = strtol(*argv, NULL, 0x10); + return 0; +} + +int +telejet(char *tj, int type) +{ + char buf[256], data[256]; + int fd, len, ret; + int eval = -1; + int addr = 0xffffff; + + if (tj) + addr = strtol(tj, NULL, 0x10); else if (type != QUERY) - usage(); + return -1; #if debug printf("addr: 0x%x\n", addr); @@ -223,22 +227,23 @@ main(int argc, char **argv) fd = opendev("/dev/ttyS0"); switch (type) { + case QUERY: + len = compose(buf, addr, 'V', NULL, 0); + break; + case HARD: + /* push the button */ + len = compose(buf, addr, 'R', NULL, 0); + break; case SOFT: + default: /* escape from x11 to console 1 */ len = compose(buf, addr, 'D', caf, sizeof(caf)); talk(fd, buf, len, sizeof(buf)); /* send tree finger */ len = compose(buf, addr, 'D', cad, sizeof(cad)); break; - case HARD: - /* push the button */ - len = compose(buf, addr, 'R', NULL, 0); - break; - case QUERY: - /* push the button */ - len = compose(buf, addr, 'V', NULL, 0); - break; } + ret = talk(fd, buf, len, sizeof(buf)); closedev(fd); @@ -262,38 +267,44 @@ main(int argc, char **argv) return eval; } -int -opendev(char *dev) +#if 1 +void +usage() { - struct termios raw; - int fd; + extern char *__progname; - fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - err(1, "%s", dev); - - tcgetattr(fd, &tio); - memcpy(&raw, &tio, sizeof(struct termios)); + fprintf(stderr, "usage: %s [-hsq] [addr]\n", __progname); - cfsetspeed(&raw, B2400); - cfmakeraw(&raw); -#if 1 - raw.c_cc[VMIN] = minlen; /* at least 10 bytes */ - raw.c_cc[VTIME] = 2; /* 200 ms */ -#endif - - if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) - err(1, "can't set raw mode"); - - return fd; + exit(1); } int -closedev(int fd) +main(int argc, char **argv) { - if (tcsetattr(fd, TCSAFLUSH, &tio) < 0) - err(1, "can't restore from raw mode"); - close(fd); + int c, type = SOFT; - return 0; + while ((c = getopt(argc, argv, "f:shq")) != -1) + switch (c) { + case 'f': + device = strdup(optarg); + break; + case 's': + type = SOFT; + break; + case 'h': + type = HARD; + break; + case 'q': + type = QUERY; + break; + } + + argc -= optind; + argv += optind; + + if (!argc || type != QUERY) + usage(); + + return telejet(*argv, type); } +#endif -- cgit v1.2.3