aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2009-03-22 05:17:52 +0000
committerDimitri Sokolyuk <demon@dim13.org>2009-03-22 05:17:52 +0000
commit4c39a0bb9c1462c38cb04ed0435ea1357352e188 (patch)
treede9da337130bbbc68c838c5d9a03a481f8a753cc
parente46e8c3881dc72865577872556563ea7069924da (diff)
prepare for use as library function
-rw-r--r--telejet.c155
1 files 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