X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2Fscr.c;h=6ad506a3bcbefc3b2da320e9658380e4d9ac96b5;hb=HEAD;hp=72807a575af3123af3dbc2b4e426f75540d1d718;hpb=09ed626f25fb3e7c57ad7a59e5261ea005aa498f;p=ap-utils.git diff --git a/lib/scr.c b/lib/scr.c index 72807a5..6ad506a 100644 --- a/lib/scr.c +++ b/lib/scr.c @@ -22,10 +22,12 @@ #include #include #include "ap-utils.h" -#include "ap-curses.h" #include extern WINDOW *main_sub, *win_for_help, *main_win; +extern short ap_type, ap_vendorext; + +enum { dBm, percentage, rawval } sts_viewtype = dBm; void scroll_rows(struct MacListStat *first, int begin, int end, int row, @@ -35,39 +37,78 @@ scroll_rows(struct MacListStat *first, int begin, int end, int row, struct MacListStat *curr = first; char message[100]; - clear_main(3); + clear_main(row); while (i++ < begin) curr = curr->next; i = 0; while (end-- > begin) { - if (stat==1) { - sprintf(message, - "%4u %02X%02X%02X%02X%02X%02X %3u%5u %3u", - begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, - curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, - curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, - curr->quality, curr->idle, curr->rssi); - } else if(stat==2) { + if (stat == 1) { + /* NWN STAtions listing */ sprintf(message, - "%2u %02X%02X%02X%02X%02X%02X %3d%% %4ddBm %3u %2u %s", - begin + i, - curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, - curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, - curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, - curr->quality, curr->rssi, curr->Status, curr->Port, inet_ntoa(curr->IP)); + "%4u %02X%02X%02X%02X%02X%02X %3u%5u %3d", + begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, + curr->quality, + curr->idle, + conv_rssi(curr->rssi) + ); + } else if (stat == 2) { + /* ATMEL STAtions listing */ + char parentmac[13] = " - "; + char rssi[5] = " -"; + char quality[5] = " -"; + char status[4] = " -"; + char port[4] = " -"; + char ip[16] = " - "; + + if (curr->ParentMacAddress[0] | curr->ParentMacAddress[1] | + curr->ParentMacAddress[2] | curr->ParentMacAddress[3] | + curr->ParentMacAddress[4] | curr->ParentMacAddress[5]) + sprintf(parentmac, "%02X%02X%02X%02X%02X%02X", + curr->ParentMacAddress[0] & 0xFF, + curr->ParentMacAddress[1] & 0xFF, + curr->ParentMacAddress[2] & 0xFF, + curr->ParentMacAddress[3] & 0xFF, + curr->ParentMacAddress[4] & 0xFF, + curr->ParentMacAddress[5] & 0xFF); + + if (curr->rssi) + sprintf(rssi, "%4d", conv_rssi(curr->rssi)); + + if (curr->quality) + sprintf(quality, "%3u%%", curr->quality); + + if (curr->Status) + sprintf(status, "%3u", curr->Status); + + if (curr->Port) + sprintf(port, "%2u", curr->Port); + + if(curr->IP.s_addr) + sprintf(ip, "%s", inet_ntoa(curr->IP)); + + sprintf(message, "%3u %02X%02X%02X%02X%02X%02X %s %s %s %s %s %s", + begin + i, + curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, + parentmac, rssi, quality, status, port, ip + ); } else { - sprintf(message, "%4u %02X%02X%02X%02X%02X%02X", - begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, - curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, - curr->addr[4] & 0xFF, curr->addr[5] & 0xFF); + /* MAC auth table listing */ + sprintf(message, " %3u %02X%02X%02X%02X%02X%02X", + begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF + ); } mvwaddstr(main_sub, row + i, 0, message); i++; curr = curr->next; } wrefresh(main_sub); - } void print_help(char *mess) @@ -87,61 +128,79 @@ void print_help(char *mess) void print_helperr(char *mess) { - wattrset(win_for_help, COLOR_PAIR(4) | A_BOLD); + wattrset(win_for_help, COLOR_PAIR(14) | A_BOLD); print_help(mess); - wattrset(win_for_help, COLOR_PAIR(1)); + wattrset(win_for_help, COLOR_PAIR(11)); } -void print_title(char *mess) +void print_bold(WINDOW *wptr, char *mess) { - int i; - /* íÁÌÀÀ ÒÁÍËÕ */ - for (i = 0; i < COLS - MCOLS - 1; i++) - mvwaddch(main_win, 0, i, ACS_BSBS); - wattrset(main_win, A_BOLD); - mvwaddstr(main_win, 0, COLS - MCOLS - strlen(mess) - 2, mess); - wattrset(main_win, A_NORMAL); - wrefresh(main_win); -} - -void print_viewtype(int v) -{ - char message[7]; - - sprintf(message, "View: %c", v + '0'); - wattrset(main_win, A_BOLD); - mvwaddstr(main_win, 0, 1, message); - wattrset(main_win, A_NORMAL); - wrefresh(main_win); + wattrset(wptr, A_BOLD); + waddstr(wptr, mess); + wattrset(wptr, A_NORMAL); + wrefresh(wptr); } void print_menusel(int y, int x, char *mess1, char *mess2) { mvwaddstr(main_sub, y, x, mess1); - wattrset(main_sub, A_BOLD); - waddstr(main_sub, mess2); - wattrset(main_sub, A_NORMAL); - wrefresh(main_sub); + print_bold(main_sub, mess2); } void print_bottom(char *mess) { int i; char message[100]; - extern short ap_type; - extern char *ap_types[]; + extern short ap_type, ap_vendorext; + extern char *ap_types[], *ap_vendorexts[][3]; - sprintf(message, _("Current AP: %s Type: %s"), mess, ap_types[ap_type]); + sprintf(message, _("Current AP: %s Type: %s Ext: %s"), + mess, ap_types[ap_type], ap_vendorexts[ap_type][ap_vendorext]); /* íÁÌÀÀ ÒÁÍËÕ */ for (i = 0; i < COLS - MCOLS - 1; i++) mvwaddch(main_win, LINES - 3, i, ACS_BSBS); + + wmove(main_win, LINES - 3, COLS - MCOLS - strlen(message) - 1); + print_bold(main_win, message); +} + +void print_top(char *title_left, char *title_right) +{ + int i = 0; + + wmove(main_win, 0, 0); + while (i++ < COLS - MCOLS - 1) + waddch(main_win, ACS_BSBS); + wattrset(main_win, A_BOLD); - mvwaddstr(main_win, LINES - 3, COLS - MCOLS - strlen(message) - 1, - message); + if (title_left) + mvwaddstr(main_win, 0, 2, title_left); + + if (title_right) + mvwaddstr(main_win, 0, COLS - MCOLS - strlen(title_right) - 2, + title_right); + wattrset(main_win, A_NORMAL); wrefresh(main_win); } +void print_top_rssi(char *message_r) +{ + char message_l[200]; + + sprintf(message_l, "%s", "RSSI: "); + switch (sts_viewtype) { + case dBm: + strcat(message_l, "dBm"); + break; + case percentage: + strcat(message_l, "%"); + break; + case rawval: + strcat(message_l, "raw"); + } + print_top(message_l, message_r); +} void clear_main(int m) { @@ -157,3 +216,18 @@ void clear_main_new(int m, int n) waddch(main_sub, ' '); wrefresh(main_sub); } + +int conv_rssi(int raw_rssi) +{ + switch (sts_viewtype) { + case dBm: + return (dbmconv(raw_rssi)); + case percentage: + return ((int)((minimum (raw_rssi, 40)) * (float)2.5)); + case rawval: + return raw_rssi; + } + /* Should never happen */ + return -1; +} +