Brad Parker
11 years ago
2 changed files with 238 additions and 0 deletions
@ -0,0 +1,214 @@ |
|||||
|
#include <iostream> |
||||
|
#include <stdio.h> |
||||
|
#include <curses.h> |
||||
|
#include <QCoreApplication> |
||||
|
#include <interface.h> |
||||
|
#include <QStringList> |
||||
|
#include <QHash> |
||||
|
|
||||
|
void red(WINDOW *window) { |
||||
|
wattron(window, COLOR_PAIR(1)); |
||||
|
} |
||||
|
|
||||
|
void cyan(WINDOW *window) { |
||||
|
wattron(window, COLOR_PAIR(5)); |
||||
|
} |
||||
|
|
||||
|
void green(WINDOW *window) { |
||||
|
wattron(window, COLOR_PAIR(2)); |
||||
|
} |
||||
|
|
||||
|
void magenta(WINDOW *window) { |
||||
|
wattron(window, COLOR_PAIR(6)); |
||||
|
} |
||||
|
|
||||
|
void interfaceMenu(WINDOW *window); |
||||
|
void interfaceSelect(WINDOW *window, QString interface); |
||||
|
|
||||
|
void mainmenu(WINDOW *window) { |
||||
|
wclear(window); |
||||
|
|
||||
|
cyan(window); |
||||
|
box(window, 0 , 0); |
||||
|
|
||||
|
red(window); |
||||
|
mvwaddstr(window, 1, 2, "System Configuration:"); |
||||
|
|
||||
|
green(window); |
||||
|
mvwaddstr(window, 3, 2, "1. Interfaces"); |
||||
|
|
||||
|
mvwaddstr(window, 4, 2, "2. ARP"); |
||||
|
|
||||
|
mvwaddstr(window, 5, 2, "3. Wireless"); |
||||
|
|
||||
|
cyan(window); |
||||
|
mvwaddstr(window, 7, 2, "0. Quit"); |
||||
|
|
||||
|
magenta(window); |
||||
|
mvwaddstr(window, 9, 2, "Enter selection: "); |
||||
|
|
||||
|
wrefresh(window); |
||||
|
|
||||
|
char c = getch(); |
||||
|
|
||||
|
if(c < '0' || c > '3') { |
||||
|
mainmenu(window); |
||||
|
}else{ |
||||
|
if(c == '1') { |
||||
|
interfaceMenu(window); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void interfaceMenu(WINDOW *window) { |
||||
|
wclear(window); |
||||
|
|
||||
|
cyan(window); |
||||
|
box(window, 0 , 0); |
||||
|
|
||||
|
red(window); |
||||
|
mvwaddstr(window, 1, 2, "Interfaces:"); |
||||
|
|
||||
|
green(window); |
||||
|
|
||||
|
QStringList interfaceList = Interface::list(); |
||||
|
|
||||
|
int count = 1; |
||||
|
int y = 3; |
||||
|
int lastInterface = 0; |
||||
|
QHash<int, QString> interfaceHash; |
||||
|
|
||||
|
foreach(QString interface, interfaceList) { |
||||
|
QString orig = interface; |
||||
|
interface = QString::number(count) + ". " + interface; |
||||
|
QByteArray interfaceArray = interface.toLatin1(); |
||||
|
const char *interfaceStr = interfaceArray.constData(); |
||||
|
|
||||
|
mvwaddstr(window, y, 2, interfaceStr); |
||||
|
|
||||
|
lastInterface = count + '0'; |
||||
|
|
||||
|
interfaceHash.insert(lastInterface, orig); |
||||
|
|
||||
|
++y; |
||||
|
++count; |
||||
|
} |
||||
|
|
||||
|
cyan(window); |
||||
|
mvwaddstr(window, y + 1, 2, "0. Back to main menu"); |
||||
|
|
||||
|
magenta(window); |
||||
|
mvwaddstr(window, y + 3, 2, "Enter selection: "); |
||||
|
wrefresh(window); |
||||
|
|
||||
|
char c = getch(); |
||||
|
|
||||
|
if(c < '0' || c > lastInterface) { |
||||
|
interfaceMenu(window); |
||||
|
}else{ |
||||
|
if(c == '0') { |
||||
|
mainmenu(window); |
||||
|
}else{ |
||||
|
if(c > '0' && c <= lastInterface) { |
||||
|
interfaceSelect(window, interfaceHash.value(c)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void interfaceSelect(WINDOW *window, QString interface) { |
||||
|
wclear(window); |
||||
|
|
||||
|
cyan(window); |
||||
|
box(window, 0 , 0); |
||||
|
|
||||
|
red(window); |
||||
|
QString title = QString("IP Addresses on: ") + interface; |
||||
|
QByteArray array = title.toLatin1(); |
||||
|
const char *data = array.constData(); |
||||
|
|
||||
|
mvwaddstr(window, 1, 2, data); |
||||
|
|
||||
|
green(window); |
||||
|
|
||||
|
Interface obj(interface); |
||||
|
QStringList ipList = obj.addresses(); |
||||
|
|
||||
|
int count = 1; |
||||
|
int y = 3; |
||||
|
|
||||
|
foreach(QString ip, ipList) { |
||||
|
ip = QString::number(count) + ". " + ip; |
||||
|
QByteArray ipArray = ip.toLatin1(); |
||||
|
const char *ipStr = ipArray.constData(); |
||||
|
|
||||
|
mvwaddstr(window, y, 2, ipStr); |
||||
|
|
||||
|
++y; |
||||
|
++count; |
||||
|
} |
||||
|
|
||||
|
cyan(window); |
||||
|
mvwaddstr(window, y + 1, 2, "0. Back to interfaces"); |
||||
|
|
||||
|
magenta(window); |
||||
|
mvwaddstr(window, y + 3, 2, "Enter selection: "); |
||||
|
wrefresh(window); |
||||
|
|
||||
|
char c = getch(); |
||||
|
|
||||
|
if(c < '0' || c > '3') { |
||||
|
interfaceMenu(window); |
||||
|
}else{ |
||||
|
if(c == '0') { |
||||
|
interfaceMenu(window); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int main(int argc, char *argv[]) { |
||||
|
QCoreApplication app(argc, argv); |
||||
|
|
||||
|
initscr(); |
||||
|
refresh(); |
||||
|
keypad(stdscr, TRUE); |
||||
|
nonl(); |
||||
|
cbreak(); |
||||
|
noecho(); |
||||
|
|
||||
|
if(has_colors()) { |
||||
|
start_color(); |
||||
|
|
||||
|
/*
|
||||
|
* Simple color assignment, often all we need. Color pair 0 cannot |
||||
|
* be redefined. This example uses the same value for the color |
||||
|
* pair as for the foreground color, though of course that is not |
||||
|
* necessary: |
||||
|
*/ |
||||
|
init_pair(1, COLOR_RED, COLOR_BLACK); |
||||
|
init_pair(2, COLOR_GREEN, COLOR_BLACK); |
||||
|
init_pair(3, COLOR_YELLOW, COLOR_BLACK); |
||||
|
init_pair(4, COLOR_BLUE, COLOR_BLACK); |
||||
|
init_pair(5, COLOR_CYAN, COLOR_BLACK); |
||||
|
init_pair(6, COLOR_MAGENTA, COLOR_BLACK); |
||||
|
init_pair(7, COLOR_WHITE, COLOR_BLACK); |
||||
|
}else{ |
||||
|
printf("Your terminal does not support colors\n"); |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
WINDOW *window = newwin(0, 0, 0, 0); |
||||
|
|
||||
|
//printf("\e[1;1H\e[2J");
|
||||
|
|
||||
|
mainmenu(window); |
||||
|
|
||||
|
delwin(window); |
||||
|
|
||||
|
endwin(); |
||||
|
|
||||
|
/*int ret = app.exec();
|
||||
|
|
||||
|
return ret;*/ |
||||
|
return 0; |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
###################################################################### |
||||
|
# Automatically generated by qmake (3.0) Mon Sep 2 19:47:22 2013 |
||||
|
###################################################################### |
||||
|
|
||||
|
TEMPLATE = app |
||||
|
TARGET = tui |
||||
|
QT += core |
||||
|
|
||||
|
SOURCES += main.cpp |
||||
|
|
||||
|
LIBS += -lncurses |
||||
|
|
||||
|
INCLUDEPATH += ../ |
||||
|
|
||||
|
LIBS += -L.. -lip |
||||
|
|
||||
|
QMAKE_CXXFLAGS += -Wall -Wextra -Werror -fsanitize=address -fPIE |
||||
|
QMAKE_CFLAGS += -Wall -Wextra -Werror -fsanitize=address -fPIE |
||||
|
|
||||
|
LIBS += -lasan |
||||
|
|
||||
|
QMAKE_LFLAGS += -Wl,-rpath,/home/bp/libip |
||||
|
|
||||
|
# Directories |
Loading…
Reference in new issue