/*-------------------------- Implementation------------------------------*/ void uiClear(Uint8 zone) { // clear(); switch( zone ) { case ALL: wclear(gBodyWin); wclear(gFooterWin); wclear(gHeaderWin); wclear(gStatusWin); clear(); uiRefresh(ALL); break; case BODY: wclear(gBodyWin); uiRefresh(BODY); break; case FOOTER: wclear(gFooterWin); uiRefresh(FOOTER); break; case HEADER: wclear(gHeaderWin); uiRefresh(HEADER); break; case STATUS: wclear(gStatusWin); uiRefresh(STATUS); break; } }
void uiStatus(Uint8 lvl, const char* format, ...) { short pairs[4] = { COLOR_PAIR_INFO, COLOR_PAIR_WARNING, COLOR_PAIR_ERROR, COLOR_PAIR_OK }; va_list argList; va_start(argList, format); char txt[255]; vsprintf(txt, format, argList); va_end(argList); short pair = pairs[lvl]; uiClear(STATUS); if( pair != COLOR_PAIR_INFO ) wattron(gStatusWin, COLOR_PAIR(pair)); wprintw(gStatusWin, txt); if( pair != COLOR_PAIR_INFO ) wattroff(gStatusWin, COLOR_PAIR(pair)); uiRefresh(STATUS); }
Bool updateMenu(struct Menu *mnu) { Bool exit = False; uiShowCursor(False); int key = getch(); switch( key ) { case 10: case 13: case KEY_ENTER: { // exec menu struct MenuEntry* entry = (struct MenuEntry*) lstGet(mnu->menuEntries, mnu->currentPos); if(entry && entry->exec) { exit = entry->exec(entry->text); // au cas ou le menu aurait modifier ces valeurs essentielles // à un bon rendu uiShowCursor(False); uiStatus(STATUS_INFO, ""); } break; } case KEY_DOWN: ++mnu->currentPos; // wrap if( mnu->currentPos > lstCount(mnu->menuEntries) -1 ) mnu->currentPos = 0; break; case KEY_UP: --mnu->currentPos; // wrap if( mnu->currentPos < 0 ) mnu->currentPos = lstCount(mnu->menuEntries) -1; break; // F1: help case KEY_F0+1: { struct MenuEntry* entry = (struct MenuEntry*) lstGet(mnu->menuEntries, mnu->currentPos); uiStatus(STATUS_INFO, entry->helpText); break; } case 8: // backspace on windows case KEY_ESC: exit = True; break; } uiRefresh(ALL); uiShowCursor(True); return exit; }
/******** * main() ********/ int main( int argc, char *argv[] ) { struct packet p; char *device; int sd; char buffer[2000]; int bytes_read = 0; /* comprobamos que el usuario es root */ if( getuid() ) { printf( "You must be root to run this program\n" ); exit(1); } /* procesamos la línea de comandos */ processCommandLine( argc, argv, &device ); /* inicializamos el gestor de conexiones */ cntInitConnections(); /* inicializamos el sniffer */ sd = initSniffer( device ); /* inicializamos la interfaz de usuario */ if( uiInit() == -1 ) { printf( "Error inicializando la interfaz de usuario\n" ); exit(1); } /* bucle principal */ for(;;) { /* actualizamos interfaz de usuario */ if( uiUpdate() == FALSE ) break; /* si ha llegado un paquete, lo procesamos en la interfaz de usuario, por ahora */ if( bytes_read > 0 ) uiProcessPacket( &p ); /* refrescamos la interfaz de usuario */ uiRefresh(); /* leemos un paquete si hay */ bytes_read = readPacket( sd, buffer, 2000, &p ); } /* salimos de la aplicación */ uiEnd(); endSniffer( device, sd ); }