/* mtr -- a network diagnostic tool Copyright (C) 1997,1998 Matt Kimball This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #include #include #include #include "mtr.h" #include "display.h" #include "report.h" #include "select.h" #include "raw.h" #include "dns.h" #include "asn.h" #ifdef HAVE_CURSES #include "mtr-curses.h" #endif #ifdef HAVE_GTK #include "mtr-gtk.h" #endif #include "split.h" #ifdef HAVE_CURSES #define DEFAULT_DISPLAY DisplayCurses #else #define DEFAULT_DISPLAY DisplayReport #endif #ifdef HAVE_GTK #define UNUSED_IF_NO_GTK /* empty */ #else #define UNUSED_IF_NO_GTK ATTRIBUTE_UNUSED #endif void display_detect( struct mtr_ctl *ctl, int *argc UNUSED_IF_NO_GTK, char ***argv UNUSED_IF_NO_GTK) { ctl->DisplayMode = DEFAULT_DISPLAY; #ifdef HAVE_GTK if (gtk_detect(argc, argv)) { ctl->DisplayMode = DisplayGTK; } #endif } void display_open( struct mtr_ctl *ctl) { switch (ctl->DisplayMode) { case DisplayReport: report_open(); break; case DisplayTXT: txt_open(); break; case DisplayJSON: json_open(); break; case DisplayXML: xml_open(); break; case DisplayCSV: csv_open(); break; #ifdef HAVE_CURSES case DisplayCurses: mtr_curses_open(ctl); #ifdef HAVE_IPINFO asn_open(ctl); #endif break; #endif case DisplaySplit: split_open(); break; #ifdef HAVE_GTK case DisplayGTK: gtk_open(ctl); #ifdef HAVE_IPINFO asn_open(ctl); #endif break; #endif } } void display_close( struct mtr_ctl *ctl) { time_t now; now = time(NULL); switch (ctl->DisplayMode) { case DisplayReport: report_close(ctl); break; case DisplayTXT: txt_close(ctl); break; case DisplayJSON: json_close(ctl); break; case DisplayXML: xml_close(ctl); break; case DisplayCSV: csv_close(ctl, now); break; #ifdef HAVE_CURSES case DisplayCurses: #ifdef HAVE_IPINFO asn_close(ctl); #endif mtr_curses_close(); break; #endif case DisplaySplit: split_close(); break; #ifdef HAVE_GTK case DisplayGTK: gtk_close(); break; #endif } } void display_redraw( struct mtr_ctl *ctl) { switch (ctl->DisplayMode) { #ifdef HAVE_CURSES case DisplayCurses: mtr_curses_redraw(ctl); break; #endif case DisplaySplit: split_redraw(ctl); break; #ifdef HAVE_GTK case DisplayGTK: gtk_redraw(ctl); break; #endif } } int display_keyaction( struct mtr_ctl *ctl) { switch (ctl->DisplayMode) { #ifdef HAVE_CURSES case DisplayCurses: return mtr_curses_keyaction(ctl); #endif case DisplaySplit: return split_keyaction(); #ifdef HAVE_GTK case DisplayGTK: return gtk_keyaction(); #endif } return 0; } void display_rawxmit( struct mtr_ctl *ctl, int host, int seq) { if (ctl->DisplayMode == DisplayRaw) raw_rawxmit(host, seq); } void display_rawping( struct mtr_ctl *ctl, int host, int msec, int seq) { if (ctl->DisplayMode == DisplayRaw) raw_rawping(ctl, host, msec, seq); } void display_rawhost( struct mtr_ctl *ctl, int host, ip_t * ip_addr) { if (ctl->DisplayMode == DisplayRaw) raw_rawhost(ctl, host, ip_addr); } void display_loop( struct mtr_ctl *ctl) { #ifdef HAVE_GTK if (ctl->DisplayMode == DisplayGTK) gtk_loop(ctl); else #endif select_loop(ctl); } void display_clear( struct mtr_ctl *ctl) { #ifdef HAVE_CURSES if (ctl->DisplayMode == DisplayCurses) mtr_curses_clear(ctl); #endif }