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>