summaryrefslogtreecommitdiff
path: root/console.c
diff options
context:
space:
mode:
authorHåkon Nessjøen <haakon.nessjoen@gmail.com>2010-10-01 00:44:09 +0200
committerHåkon Nessjøen <haakon.nessjoen@gmail.com>2010-10-01 00:44:09 +0200
commit046c16b0778d6b4112a32b61c274871dc6a0b43b (patch)
tree3714fc19009919d0ef74b6b81edbb5caa98fef6c /console.c
parentc56e309956da3d41420db1c5d41ccf245c594e45 (diff)
downloadMAC-Telnet-046c16b0778d6b4112a32b61c274871dc6a0b43b.tar.gz
MAC-Telnet-046c16b0778d6b4112a32b61c274871dc6a0b43b.zip
Milestone 1: First fully functional (proof of concept) version.
Diffstat (limited to 'console.c')
-rw-r--r--console.c57
1 files changed, 55 insertions, 2 deletions
diff --git a/console.c b/console.c
index 2ac2068..3592eb6 100644
--- a/console.c
+++ b/console.c
@@ -1,14 +1,67 @@
+/*
+ Mac-Telnet - Connect to RouterOS routers via MAC address
+ Copyright (C) 2010, Håkon Nessjøen <haakon.nessjoen@gmail.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
#include <sys/ioctl.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
+#include <termios.h>
+#include <unistd.h>
+
+struct termios origTerm;
+
+int rawTerm() {
+ struct termios new;
+
+ if (tcgetattr(STDIN_FILENO, &origTerm) < 0) {
+ perror("tcgetattr");
+ return -1;
+ }
+
+ memcpy(&new, &origTerm, sizeof(struct termios) );
+
+ /* raw mode, from tcsetattr man page */
+ new.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
+ new.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
+ new.c_cflag &= ~(CSIZE|PARENB);
+ new.c_cflag |= CS8;
+
+ if (tcsetattr(STDIN_FILENO, TCSANOW, &new) < 0) {
+ perror("tcsetattr");
+ return -1;
+ }
+ return 0;
+}
+
+int resetTerm() {
+ if (tcsetattr(STDIN_FILENO, TCSANOW, &origTerm) < 0) {
+ perror("tcsetattr");
+ return -1;
+ }
+ return 0;
+}
int getTerminalSize(unsigned short *width, unsigned short *height) {
struct winsize ws;
- if (ioctl(0,TIOCGWINSZ,&ws) != 0) {
- fprintf(stderr,"TIOCGWINSZ:%s\n",strerror(errno));
+ if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) != 0) {
+ perror("TIOCGWINSZ");
return -1;
}