Blame ui/display.c

Packit b802ec
/*
Packit b802ec
    mtr  --  a network diagnostic tool
Packit b802ec
    Copyright (C) 1997,1998  Matt Kimball
Packit b802ec
Packit b802ec
    This program is free software; you can redistribute it and/or modify
Packit b802ec
    it under the terms of the GNU General Public License version 2 as 
Packit b802ec
    published by the Free Software Foundation.
Packit b802ec
Packit b802ec
    This program is distributed in the hope that it will be useful,
Packit b802ec
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit b802ec
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit b802ec
    GNU General Public License for more details.
Packit b802ec
Packit b802ec
    You should have received a copy of the GNU General Public License
Packit b802ec
    along with this program; if not, write to the Free Software
Packit b802ec
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Packit b802ec
*/
Packit b802ec
Packit b802ec
#include "config.h"
Packit b802ec
Packit b802ec
#include <stdio.h>
Packit b802ec
#include <stdlib.h>
Packit b802ec
#include <sys/types.h>
Packit b802ec
#include <time.h>
Packit b802ec
Packit b802ec
#include "mtr.h"
Packit b802ec
#include "display.h"
Packit b802ec
#include "report.h"
Packit b802ec
#include "select.h"
Packit b802ec
#include "raw.h"
Packit b802ec
#include "dns.h"
Packit b802ec
#include "asn.h"
Packit b802ec
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
#include "mtr-curses.h"
Packit b802ec
#endif
Packit b802ec
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
#include "mtr-gtk.h"
Packit b802ec
#endif
Packit b802ec
Packit b802ec
#include "split.h"
Packit b802ec
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
#define DEFAULT_DISPLAY DisplayCurses
Packit b802ec
#else
Packit b802ec
#define DEFAULT_DISPLAY DisplayReport
Packit b802ec
#endif
Packit b802ec
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
#define UNUSED_IF_NO_GTK        /* empty */
Packit b802ec
#else
Packit b802ec
#define UNUSED_IF_NO_GTK ATTRIBUTE_UNUSED
Packit b802ec
#endif
Packit b802ec
Packit b802ec
void display_detect(
Packit b802ec
    struct mtr_ctl *ctl,
Packit b802ec
    int *argc UNUSED_IF_NO_GTK,
Packit b802ec
    char ***argv UNUSED_IF_NO_GTK)
Packit b802ec
{
Packit b802ec
    ctl->DisplayMode = DEFAULT_DISPLAY;
Packit b802ec
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
    if (gtk_detect(argc, argv)) {
Packit b802ec
        ctl->DisplayMode = DisplayGTK;
Packit b802ec
    }
Packit b802ec
#endif
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_open(
Packit b802ec
    struct mtr_ctl *ctl)
Packit b802ec
{
Packit b802ec
    switch (ctl->DisplayMode) {
Packit b802ec
Packit b802ec
    case DisplayReport:
Packit b802ec
        report_open();
Packit b802ec
        break;
Packit b802ec
    case DisplayTXT:
Packit b802ec
        txt_open();
Packit b802ec
        break;
Packit b802ec
    case DisplayJSON:
Packit b802ec
        json_open();
Packit b802ec
        break;
Packit b802ec
    case DisplayXML:
Packit b802ec
        xml_open();
Packit b802ec
        break;
Packit b802ec
    case DisplayCSV:
Packit b802ec
        csv_open();
Packit b802ec
        break;
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
    case DisplayCurses:
Packit b802ec
        mtr_curses_open(ctl);
Packit b802ec
#ifdef HAVE_IPINFO
Packit b802ec
        asn_open(ctl);
Packit b802ec
#endif
Packit b802ec
        break;
Packit b802ec
#endif
Packit b802ec
    case DisplaySplit:
Packit b802ec
        split_open();
Packit b802ec
        break;
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
    case DisplayGTK:
Packit b802ec
        gtk_open(ctl);
Packit b802ec
#ifdef HAVE_IPINFO
Packit b802ec
        asn_open(ctl);
Packit b802ec
#endif
Packit b802ec
        break;
Packit b802ec
#endif
Packit b802ec
    }
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_close(
Packit b802ec
    struct mtr_ctl *ctl)
Packit b802ec
{
Packit b802ec
    time_t now;
Packit b802ec
Packit b802ec
    now = time(NULL);
Packit b802ec
Packit b802ec
    switch (ctl->DisplayMode) {
Packit b802ec
    case DisplayReport:
Packit b802ec
        report_close(ctl);
Packit b802ec
        break;
Packit b802ec
    case DisplayTXT:
Packit b802ec
        txt_close(ctl);
Packit b802ec
        break;
Packit b802ec
    case DisplayJSON:
Packit b802ec
        json_close(ctl);
Packit b802ec
        break;
Packit b802ec
    case DisplayXML:
Packit b802ec
        xml_close(ctl);
Packit b802ec
        break;
Packit b802ec
    case DisplayCSV:
Packit b802ec
        csv_close(ctl, now);
Packit b802ec
        break;
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
    case DisplayCurses:
Packit b802ec
#ifdef HAVE_IPINFO
Packit b802ec
        asn_close(ctl);
Packit b802ec
#endif
Packit b802ec
        mtr_curses_close();
Packit b802ec
        break;
Packit b802ec
#endif
Packit b802ec
    case DisplaySplit:
Packit b802ec
        split_close();
Packit b802ec
        break;
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
    case DisplayGTK:
Packit b802ec
        gtk_close();
Packit b802ec
        break;
Packit b802ec
#endif
Packit b802ec
    }
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_redraw(
Packit b802ec
    struct mtr_ctl *ctl)
Packit b802ec
{
Packit b802ec
    switch (ctl->DisplayMode) {
Packit b802ec
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
    case DisplayCurses:
Packit b802ec
        mtr_curses_redraw(ctl);
Packit b802ec
        break;
Packit b802ec
#endif
Packit b802ec
Packit b802ec
    case DisplaySplit:
Packit b802ec
        split_redraw(ctl);
Packit b802ec
        break;
Packit b802ec
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
    case DisplayGTK:
Packit b802ec
        gtk_redraw(ctl);
Packit b802ec
        break;
Packit b802ec
#endif
Packit b802ec
    }
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
int display_keyaction(
Packit b802ec
    struct mtr_ctl *ctl)
Packit b802ec
{
Packit b802ec
    switch (ctl->DisplayMode) {
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
    case DisplayCurses:
Packit b802ec
        return mtr_curses_keyaction(ctl);
Packit b802ec
#endif
Packit b802ec
Packit b802ec
    case DisplaySplit:
Packit b802ec
        return split_keyaction();
Packit b802ec
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
    case DisplayGTK:
Packit b802ec
        return gtk_keyaction();
Packit b802ec
#endif
Packit b802ec
    }
Packit b802ec
    return 0;
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_rawxmit(
Packit b802ec
    struct mtr_ctl *ctl,
Packit b802ec
    int host,
Packit b802ec
    int seq)
Packit b802ec
{
Packit b802ec
    if (ctl->DisplayMode == DisplayRaw)
Packit b802ec
        raw_rawxmit(host, seq);
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_rawping(
Packit b802ec
    struct mtr_ctl *ctl,
Packit b802ec
    int host,
Packit b802ec
    int msec,
Packit b802ec
    int seq)
Packit b802ec
{
Packit b802ec
    if (ctl->DisplayMode == DisplayRaw)
Packit b802ec
        raw_rawping(ctl, host, msec, seq);
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_rawhost(
Packit b802ec
    struct mtr_ctl *ctl,
Packit b802ec
    int host,
Packit b802ec
    ip_t * ip_addr)
Packit b802ec
{
Packit b802ec
    if (ctl->DisplayMode == DisplayRaw)
Packit b802ec
        raw_rawhost(ctl, host, ip_addr);
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_loop(
Packit b802ec
    struct mtr_ctl *ctl)
Packit b802ec
{
Packit b802ec
#ifdef HAVE_GTK
Packit b802ec
    if (ctl->DisplayMode == DisplayGTK)
Packit b802ec
        gtk_loop(ctl);
Packit b802ec
    else
Packit b802ec
#endif
Packit b802ec
        select_loop(ctl);
Packit b802ec
}
Packit b802ec
Packit b802ec
Packit b802ec
void display_clear(
Packit b802ec
    struct mtr_ctl *ctl)
Packit b802ec
{
Packit b802ec
#ifdef HAVE_CURSES
Packit b802ec
    if (ctl->DisplayMode == DisplayCurses)
Packit b802ec
        mtr_curses_clear(ctl);
Packit b802ec
#endif
Packit b802ec
}