Annotation of embedaddon/mtr/split.c, revision 1.1
1.1 ! misho 1: /*
! 2: mtr -- a network diagnostic tool
! 3: Copyright (C) 1997 Matt Kimball
! 4:
! 5: split.c -- raw output (for inclusion in KDE Network Utilities or others
! 6: GUI based tools)
! 7: Copyright (C) 1998 Bertrand Leconte <B.Leconte@mail.dotcom.fr>
! 8:
! 9: This program is free software; you can redistribute it and/or modify
! 10: it under the terms of the GNU General Public License version 2 as
! 11: published by the Free Software Foundation.
! 12:
! 13: This program is distributed in the hope that it will be useful,
! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 16: GNU General Public License for more details.
! 17:
! 18: You should have received a copy of the GNU General Public License
! 19: along with this program; if not, write to the Free Software
! 20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
! 21: */
! 22:
! 23: #include <config.h>
! 24: #include <ctype.h>
! 25: #include <stdlib.h>
! 26: #include <stdio.h>
! 27: #include <string.h>
! 28: #include <sys/types.h>
! 29:
! 30: #include "mtr.h"
! 31: #include "display.h"
! 32: #include "dns.h"
! 33:
! 34: #include "net.h"
! 35: #include "split.h"
! 36:
! 37: #ifdef NO_CURSES
! 38: #include <sys/time.h>
! 39: #include <sys/types.h>
! 40: #include <unistd.h>
! 41: #else
! 42: /* Use the curses variant */
! 43:
! 44: #if defined(HAVE_NCURSES_H)
! 45: # include <ncurses.h>
! 46: #elif defined(HAVE_NCURSES_CURSES_H)
! 47: # include <ncurses/curses.h>
! 48: #elif defined(HAVE_CURSES_H)
! 49: # include <curses.h>
! 50: #else
! 51: # error No curses header file available
! 52: #endif
! 53:
! 54: #endif
! 55:
! 56:
! 57: extern char *Hostname;
! 58: extern int WaitTime;
! 59: extern int af;
! 60:
! 61: /* There is 256 hops max in the IP header (coded with a byte) */
! 62: #define MAX_LINE_COUNT 256
! 63: #define MAX_LINE_SIZE 256
! 64:
! 65: char Lines[MAX_LINE_COUNT][MAX_LINE_SIZE];
! 66: int LineCount;
! 67:
! 68:
! 69: #define DEBUG 0
! 70:
! 71:
! 72: void split_redraw(void)
! 73: {
! 74: int max;
! 75: int at;
! 76: ip_t *addr;
! 77: char newLine[MAX_LINE_SIZE];
! 78: int i;
! 79:
! 80: #if DEBUG
! 81: fprintf(stderr, "split_redraw()\n");
! 82: #endif
! 83:
! 84: /*
! 85: * If there is less lines than last time, we delete them
! 86: * TEST THIS PLEASE
! 87: */
! 88: max = net_max();
! 89: for (i=LineCount; i>max; i--) {
! 90: printf("-%d\n", i);
! 91: LineCount--;
! 92: }
! 93:
! 94: /*
! 95: * For each line, we compute the new one and we compare it to the old one
! 96: */
! 97: for(at = 0; at < max; at++) {
! 98: addr = net_addr(at);
! 99: if(addrcmp((void*)addr, (void*)&unspec_addr, af)) {
! 100: char str[256], *name;
! 101: if (!(name = dns_lookup(addr)))
! 102: name = strlongip(addr);
! 103: if (show_ips) {
! 104: snprintf(str, sizeof(str), "%s %s", name, strlongip(addr));
! 105: name = str;
! 106: }
! 107: /* May be we should test name's length */
! 108: snprintf(newLine, sizeof(newLine), "%s %d %d %d %d %d %d", name,
! 109: net_loss(at),
! 110: net_returned(at), net_xmit(at),
! 111: net_best(at) /1000, net_avg(at)/1000,
! 112: net_worst(at)/1000);
! 113: } else {
! 114: sprintf(newLine, "???");
! 115: }
! 116:
! 117: if (strcmp(newLine, Lines[at]) == 0) {
! 118: /* The same, so do nothing */
! 119: #if DEBUG
! 120: printf("SAME LINE\n");
! 121: #endif
! 122: } else {
! 123: printf("%d %s\n", at+1, newLine);
! 124: fflush(stdout);
! 125: strcpy(Lines[at], newLine);
! 126: if (LineCount < (at+1)) {
! 127: LineCount = at+1;
! 128: }
! 129: }
! 130: }
! 131: }
! 132:
! 133:
! 134: void split_open(void)
! 135: {
! 136: int i;
! 137: #if DEBUG
! 138: printf("split_open()\n");
! 139: #endif
! 140: LineCount = -1;
! 141: for (i=0; i<MAX_LINE_COUNT; i++) {
! 142: strcpy(Lines[i], "???");
! 143: }
! 144: }
! 145:
! 146:
! 147: void split_close(void)
! 148: {
! 149: #if DEBUG
! 150: printf("split_close()\n");
! 151: #endif
! 152: }
! 153:
! 154:
! 155: int split_keyaction(void)
! 156: {
! 157: #ifdef NO_CURSES
! 158: fd_set readfds;
! 159: struct timeval tv;
! 160: char c;
! 161:
! 162: FD_ZERO (&readfds);
! 163: FD_SET (0, &readfds);
! 164: tv.tv_sec = 0;
! 165: tv.tv_usec = 0;
! 166:
! 167: if (select (1, &readfds, NULL, NULL, &tv) > 0) {
! 168: read (0, &c, 1);
! 169: } else
! 170: return 0;
! 171: #else
! 172: char c = getch();
! 173: #endif
! 174:
! 175: #if DEBUG
! 176: printf("split_keyaction()\n");
! 177: #endif
! 178: if(tolower(c) == 'q')
! 179: return ActionQuit;
! 180: if(c==3)
! 181: return ActionQuit;
! 182: if(tolower(c) == 'r')
! 183: return ActionReset;
! 184:
! 185: return 0;
! 186: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>