]> git.decadent.org.uk Git - ap-utils.git/blobdiff - lib/scr.c
Update description to cover all current utilities
[ap-utils.git] / lib / scr.c
index 72807a575af3123af3dbc2b4e426f75540d1d718..6ad506a3bcbefc3b2da320e9658380e4d9ac96b5 100644 (file)
--- a/lib/scr.c
+++ b/lib/scr.c
 #include <unistd.h>
 #include <string.h>
 #include "ap-utils.h"
-#include "ap-curses.h"
 #include <menu.h>
 
 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;
+}
+