pochmara@ogicse.cse.ogi.edu (John Pochmara) (03/15/91)
Article-I.D.: ogicse.18619
Posted: Thu Mar 14 10:03:29 1991
Sender: pochmara@ogicse.ogi.edu
Distribution: usa
Organization: Oregon Graduate Institute (formerly OGC), Beaverton, OR
Lines: 1585
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 3)."
# Contents: display.c mask.c rpc_stuff.c strip.c xtr.c
# Wrapped by pochmara@ogicse on Thu Mar 14 10:00:07 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'display.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'display.c'\"
else
echo shar: Extracting \"'display.c'\" \(4264 characters\)
sed "s/^X//" >'display.c' <<'END_OF_FILE'
X/*
X * display.c
X *
X *
X */
X#include <stdio.h>
X#include <signal.h>
X#include <X11/Xlib.h>
X#include <X11/Xatom.h>
X#include "misc.h"
X
X
X#define STR_LEN (256)
X
XDisplay *Dp;
XWindow MainWin;
XVisual *MVis;
XGC Text6x10GC;
XGC Text5x8GC;
XFont Fnt6x10;
XFont Fnt5x8;
Xint screen;
X
Xint ForGndPix;
Xint BackGndPix;
X
Xstatic char HostName[STR_LEN];
Xstatic int IntervalVal = 0;
Xstatic int IntervalChanged = TRUE;
X
Xstatic void DisplayInterval();
Xstatic void DisplayHost();
Xstatic void PropagateInterval();
X
Xstatic int AfterXlib();
X
Xvoid InitWin( hostname )
Xchar *hostname;
X{
X XEvent ev;
X char buf[256];
X
X if( ( Dp = XOpenDisplay( NULL ) ) == NULL ) {
X fprintf( stderr, "Could not open display.\n" );
X exit( 1 );
X }
X
X#ifdef XDEBUG
X /* XSynchronize( Dp, True ); */
X XSetAfterFunction( Dp, AfterXlib );
X#endif XDEBUG
X
X screen = DefaultScreen( Dp );
X MVis = DefaultVisual( Dp, screen );
X
X ForGndPix = WhitePixel( Dp, screen );
X BackGndPix = BlackPixel( Dp, screen );
X
X MainWin = XCreateSimpleWindow( Dp, RootWindow( Dp, screen ), 0, 0,
X MWIN_W, MWIN_H, 1, ForGndPix, BackGndPix );
X
X XSelectInput( Dp, MainWin, ExposureMask|StructureNotifyMask|
X ButtonPressMask );
X
X sprintf( buf, "xtr: %s", hostname );
X
X XChangeProperty( Dp, MainWin, XA_WM_NAME, XA_STRING, 8,
X PropModeReplace, (unsigned char *)buf, strlen( buf ) );
X
X XMapWindow( Dp, MainWin );
X
X Text6x10GC = XCreateGC( Dp, MainWin, 0, NULL );
X Fnt6x10 = XLoadFont( Dp, "6x10" );
X XSetState( Dp, Text6x10GC, ForGndPix, BackGndPix, GXset, AllPlanes );
X XSetFont( Dp, Text6x10GC, Fnt6x10 );
X
X Text5x8GC = XCreateGC( Dp, MainWin, 0, NULL );
X Fnt5x8 = XLoadFont( Dp, "5x8" );
X XSetState( Dp, Text5x8GC, ForGndPix, BackGndPix, GXset, AllPlanes );
X XSetFont( Dp, Text5x8GC, Fnt5x8 );
X
X XFlush( Dp );
X
X while( 1 ) {
X XNextEvent( Dp, &ev );
X if( ev.type == Expose ) {
X break;
X }
X }
X}
X
Xvoid FlushDpy()
X{
X XFlush( Dp );
X}
X
Xvoid SyncDpy()
X{
X XSync( Dp, False );
X}
X
Xvoid ResizeWindow( w, h )
Xint w, h;
X{
X XResizeWindow( Dp, MainWin, w, h );
X}
X
Xvoid SetHost( host )
Xchar *host;
X{
X strncpy( HostName, host, STR_LEN );
X DisplayHost();
X}
X
Xvoid SetInterval( inter )
Xint inter;
X{
X IntervalVal = inter;
X DisplayInterval();
X}
X
Xvoid IncInterval()
X{
X IntervalVal++;
X IntervalChanged = TRUE;
X}
X
Xvoid DecInterval()
X{
X IntervalVal--;
X IntervalChanged = TRUE;
X if( IntervalVal < 0 ) IntervalVal = 0;
X}
X
Xstatic void DisplayHost()
X{
X static int len = 0;
X char buf[1024];
X int i;
X int l;
X
X sprintf( buf, "Host: %s", HostName );
X l = strlen( buf );
X
X if( l < len ) {
X for( i = l; i < len; i++ ) {
X buf[i] = ' ';
X }
X buf[i] = NULL;
X } else {
X len = l;
X }
X
X XDrawImageString( Dp, MainWin, Text6x10GC, 5, 35, buf, len );
X
X len = l;
X
X}
X
Xstatic void DisplayInterval()
X{
X static int len = 0;
X char buf[1024];
X int i, l;
X
X sprintf( buf, "Interval: %d sec", IntervalVal );
X l = strlen( buf );
X
X if( l < len ) {
X for( i = l; i < len; i++ ) {
X buf[i] = ' ';
X }
X buf[i] = NULL;
X } else {
X len = l;
X }
X
X XDrawImageString( Dp, MainWin, Text6x10GC, 25, 45, buf, len );
X
X len = l;
X}
X
Xint GetDefaultValInt( str, def )
Xchar *str;
Xint def;
X{
X extern int atoi();
X char *ret;
X
X ret = XGetDefault( Dp, "xtr", str );
X
X if( ret == NULL ) {
X return( def );
X } else {
X return( atoi( ret ) );
X }
X}
X
Xvoid DoEvents( block )
Xint block;
X{
X XEvent ev;
X void (*os)();
X int exp = FALSE;
X
X while( ( XPending( Dp ) > 0 ) || ( block == TRUE ) ) {
X
X XNextEvent( Dp, &ev );
X
X
X switch( ev.type ) {
X case Expose:
X exp = TRUE;
X break;
X
X case ButtonPress:
X os = signal( SIGALRM, SIG_IGN );
X DoButtonPress( ev.xbutton.window );
X signal( SIGALRM, os );
X break;
X
X case KeyPress:
X os = signal( SIGALRM, SIG_IGN );
X DoKeyInput( &(ev.xkey) );
X signal( SIGALRM, os );
X break;
X
X
X }
X
X
X block = FALSE;
X
X }
X
X os = signal( SIGALRM, SIG_IGN );
X
X if( exp == TRUE ) {
X RedrawAllBars();
X RedrawAllButtons();
X RedrawAllStrips();
X RedrawAllInputBoxes();
X RedrawAllLabels();
X DisplayHost();
X DisplayInterval();
X FlushDpy();
X }
X
X if( IntervalChanged == TRUE ) {
X DisplayInterval();
X PropagateInterval();
X IntervalChanged = FALSE;
X }
X
X signal( SIGALRM, os );
X
X}
X
Xstatic void PropagateInterval()
X{
X SetMainTimer( IntervalVal );
X}
X
Xstatic int AfterXlib( dp )
XDisplay *dp;
X{
X long s;
X
X s = XNextRequest( Dp );
X fprintf( stderr, "%ld\n", s );
X}
END_OF_FILE
if test 4264 -ne `wc -c <'display.c'`; then
echo shar: \"'display.c'\" unpacked with wrong size!
fi
# end of 'display.c'
fi
if test -f 'mask.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mask.c'\"
else
echo shar: Extracting \"'mask.c'\" \(5209 characters\)
sed "s/^X//" >'mask.c' <<'END_OF_FILE'
X/*
X * mask.c
X *
X *
X */
X#include <stdio.h>
X#include <netdb.h>
X#include <sys/types.h>
X#include <sys/socket.h>
X#include <netinet/in.h>
X#include <arpa/inet.h>
X#include <ctype.h>
X#include "rpc_stuff.h"
X#include "button.h"
X#include "inbox.h"
X#include "misc.h"
X
Xextern long strtol();
X
Xstatic void MakeMaskButtons();
Xstatic void ShowMaskButtons();
Xstatic void ExitMask();
Xstatic void ResetMask();
Xstatic void ApplyMask();
Xstatic void SourceMask();
Xstatic void DestinationMask();
Xstatic void LenghtMask();
Xstatic void ProtocolMask();
Xstatic void ShowTrueMask();
Xstatic void FreeMask();
X
Xstatic int ButExit;
Xstatic int ButApply;
Xstatic int ButReset;
X
Xstatic int LenIn;
Xstatic int LenLb;
Xstatic char *LenMask = NULL;
X
Xstatic int SrcIn;
Xstatic int SrcLb;
Xstatic char *SrcMask = NULL;
X
Xstatic int DstIn;
Xstatic int DstLb;
Xstatic char *DstMask = NULL;
X
Xstatic int ProtoIn;
Xstatic int ProtoLb;
Xstatic char *ProtoMask = NULL;
X
Xvoid MakeMaskDisplay()
X{
X MakeMaskButtons();
X
X LenIn = CreateInputBox( 200, 15, 85, 70, 30 );
X LenLb = CreateLabel( 35, 80, "Lenght:" );
X
X ProtoIn = CreateInputBox( 200, 15, 85, 90, 30 );
X ProtoLb = CreateLabel( 25, 100, "Protocol:" );
X
X SrcIn = CreateInputBox( 200, 15, 85, 120, 30 );
X SrcLb = CreateLabel( 35, 130, "Source:" );
X
X DstIn = CreateInputBox( 200, 15, 85, 145, 30 );
X DstLb = CreateLabel( 5, 155, "Destination:" );
X
X}
X
Xvoid ShowMaskWindow()
X{
X ResizeWindow( 400, 180 );
X
X ShowMaskButtons();
X
X ShowTrueMask( LenIn, LenMask );
X ShowInputBox( LenIn );
X ShowLabel( LenLb );
X
X ShowTrueMask( SrcIn, SrcMask );
X ShowInputBox( SrcIn );
X ShowLabel( SrcLb );
X
X ShowTrueMask( DstIn, DstMask );
X ShowInputBox( DstIn );
X ShowLabel( DstLb );
X
X ShowTrueMask( ProtoIn, ProtoMask );
X ShowInputBox( ProtoIn );
X ShowLabel( ProtoLb );
X
X}
X
Xvoid HideMaskWindow()
X{
X HideButton( ButExit );
X HideButton( ButApply );
X HideButton( ButReset );
X
X HideInputBox( LenIn );
X HideLabel( LenLb );
X
X HideInputBox( SrcIn );
X HideLabel( SrcLb );
X
X HideInputBox( DstIn );
X HideLabel( DstLb );
X
X HideInputBox( ProtoIn );
X HideLabel( ProtoLb );
X}
X
Xstatic void ShowTrueMask( id, mask )
Xint id;
Xchar *mask;
X{
X
X if( mask == NULL ) {
X SetInputBoxData( id, "" );
X } else {
X SetInputBoxData( id, mask );
X }
X}
X
Xstatic void FreeMask( mask )
Xchar *mask;
X{
X if( mask != NULL ) {
X free( mask );
X }
X}
X
Xstatic void ShowMaskButtons()
X{
X ShowButton( ButExit );
X ShowButton( ButApply );
X ShowButton( ButReset );
X}
X
Xstatic void MakeMaskButtons()
X{
X ButExit = CreateButton( "Exit", 30, 15, 5, 5, ExitMask );
X ButApply = CreateButton( "Apply", 40, 15, 40, 5, ApplyMask );
X ButReset = CreateButton( "Reset", 40, 15, 85, 5, ResetMask );
X}
X
Xstatic void ExitMask()
X{
X ReturnToMain();
X}
X
Xstatic void ResetMask()
X{
X SetInputBoxData( SrcIn, "" );
X SetInputBoxData( DstIn, "" );
X SetInputBoxData( LenIn, "" );
X SetInputBoxData( ProtoIn, "" );
X
X ApplyMask(); /* reset etherd too */
X
X}
X
Xstatic void ApplyMask()
X{
X
X FreeMask( SrcMask );
X SrcMask = GetInputBoxData( SrcIn );
X
X FreeMask( DstMask );
X DstMask = GetInputBoxData( DstIn );
X
X FreeMask( ProtoMask );
X ProtoMask = GetInputBoxData( ProtoIn );
X
X FreeMask( LenMask );
X LenMask = GetInputBoxData( LenIn );
X
X
X SourceMask( SrcMask );
X DestinationMask( DstMask );
X ProtocolMask( ProtoMask );
X LenghtMask( LenMask );
X
X}
X
Xstatic void SourceMask( mask )
Xchar *mask;
X{
X unsigned long addr;
X struct hostent *hinfo;
X
X
X if( mask == NULL ) {
X SetSrcAddrMask( 0, 0 );
X return;
X }
X
X if( isalpha( *mask ) ) {
X
X hinfo = gethostbyname( mask );
X
X if( hinfo != NULL ) {
X
X addr = (unsigned long)hinfo->h_addr_list[0];
X bcopy(hinfo->h_addr_list[0], &addr, hinfo->h_length);
X
X } else {
X SetInputBoxData( SrcIn, "" );
X return;
X }
X
X } else {
X addr = inet_addr( mask );
X }
X
Xprintf( "addr: %x\n", addr );
X
X SetSrcAddrMask( addr, ~addr );
X
X}
X
Xstatic void DestinationMask( mask )
Xchar *mask;
X{
X unsigned long addr;
X struct hostent *hinfo;
X
X if( mask == NULL ) {
X SetDstAddrMask( 0, 0 );
X return;
X }
X
X if( isalpha( *mask ) ) {
X
X hinfo = gethostbyname( mask );
X
X if( hinfo != NULL ) {
X
X addr = (unsigned long)hinfo->h_addr_list[0];
X bcopy(hinfo->h_addr_list[0], &addr, hinfo->h_length);
X
X } else {
X SetInputBoxData( DstIn, "" );
X return;
X }
X
X } else {
X addr = inet_addr( mask );
X }
X
X SetDstAddrMask( addr, ~addr );
X
X}
X
Xstatic void LenghtMask( mask )
Xchar *mask;
X{
X int min, max;
X char *p;
X
X
X if( mask == NULL ) {
X SetLenMask( 0, 0 );
X return;
X }
X
X min = (int)strtol( mask, &p, 0 );
X
X if( p == mask ) {
X SetInputBoxData( LenIn, "" );
X return;
X } else if( *p == NULL ) {
X max = min;
X } else if( *p == '-' ) {
X mask = p+1; /* move past '-' */
X max = (int)strtol( mask, &p, 0 );
X
X if( p == mask ) {
X SetInputBoxData( LenIn, "" );
X return;
X }
X } else {
X SetInputBoxData( LenIn, "" );
X return;
X }
X
X SetLenMask( min, max );
X
X}
X
Xstatic void ProtocolMask( mask )
Xchar *mask;
X{
X struct protoent *pr;
X int prn;
X
X if( mask == NULL ) {
X SetProtoMask( 0, 0 );
X return;
X }
X
X
X if( isalpha( *mask ) ) {
X pr = getprotobyname( mask );
X if( pr == NULL ) {
X SetInputBoxData( ProtoIn, "" );
X return;
X }
X
X prn = pr->p_proto;
X
X } else {
X
X prn = (int)strtol(mask, NULL, 0);
X
X if( prn == 0 ) {
X SetInputBoxData( ProtoIn, "" );
X return;
X }
X }
X
X
X SetProtoMask( prn, ~prn );
X
X}
END_OF_FILE
if test 5209 -ne `wc -c <'mask.c'`; then
echo shar: \"'mask.c'\" unpacked with wrong size!
fi
# end of 'mask.c'
fi
if test -f 'rpc_stuff.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'rpc_stuff.c'\"
else
echo shar: Extracting \"'rpc_stuff.c'\" \(4760 characters\)
sed "s/^X//" >'rpc_stuff.c' <<'END_OF_FILE'
X/*
X *
X *
X *
X *
X */
X#include <stdio.h>
X#include <rpc/rpc.h>
X#include "ether.h"
X
X#define NDPROTO 0
X#define ICMPPROTO 1
X#define UDPPROTO 2
X#define TCPPROTO 3
X#define ARPPROTO 4
X#define OTHERPROTO 5
X
X
Xstatic CLIENT *Client;
Xstatic etherstat PrevStatData = { { 0, 0 }, 0, 0, 0,
X { 0, 0, 0, 0, 0, 0, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 0 },
X { 0, 0, 0, 0, 0, 0 } };
Xstatic etherstat *StatData = NULL;
Xstatic long TimeDelta = 1;
X
Xstatic etheraddrs *DstData = NULL;
Xstatic int DstIndex = 0;
Xstatic etherhmem DstPtr = NULL;
X
Xstatic etheraddrs *SrcData = NULL;
Xstatic int SrcIndex = 0;
Xstatic etherhmem SrcPtr = NULL;
X
Xstatic void FreeHostData();
X
X
Xvoid InitRPC( host )
Xchar *host;
X{
X
X Client = clnt_create( host, ETHERPROG, ETHERVERS, "udp" );
X
X if( Client == NULL ) {
X fprintf( stderr, "xtr: Could not create connection to " );
X fprintf( stderr, "'%s'\n", host );
X exit( 1 );
X }
X}
X
X
Xvoid TurnOnEther()
X{
X int dummy;
X
X etherproc_on_1( &dummy, Client );
X}
X
Xvoid TurnOffEther()
X{
X int dummy;
X
X etherproc_off_1( &dummy, Client );
X}
X
Xvoid SetLenMask( min, max )
Xint min;
Xint max;
X{
X addrmask am;
X
X am.a_addr = min;
X am.a_mask = max;
X
X etherproc_selectlnth_1( &am, Client );
X}
X
Xvoid SetProtoMask( addr, mask )
Xint addr;
Xint mask;
X{
X addrmask am;
X
X am.a_addr = addr;
X am.a_mask = mask;
X
X etherproc_selectproto_1( &am, Client );
X}
X
Xvoid SetSrcAddrMask( addr, mask )
Xint addr;
Xint mask;
X{
X addrmask am;
X
X am.a_addr = addr;
X am.a_mask = mask;
X
X etherproc_selectsrc_1( &am, Client );
X
X}
X
Xvoid SetDstAddrMask( addr, mask )
Xint addr;
Xint mask;
X{
X addrmask am;
X
X am.a_addr = addr;
X am.a_mask = mask;
X
X etherproc_selectdst_1( &am, Client );
X
X}
X
Xvoid GetStatData()
X{
X int dummy;
X
X if( StatData != NULL ) {
X PrevStatData = *StatData;
X }
X
X StatData = etherproc_getdata_1( &dummy, Client );
X
X TimeDelta = StatData->e_time.tv_seconds-PrevStatData.e_time.tv_seconds;
X
X if( TimeDelta <= 0 ) {
X TimeDelta = 1;
X }
X
X}
X
Xvoid GetSrcData()
X{
X etherhmem tmp;
X int dummy, i;
X
X if( SrcData != NULL ) {
X FreeHostData( SrcData );
X }
X
X SrcData = etherproc_getsrcdata_1( &dummy, Client );
X
X
X}
X
Xvoid GetDstData()
X{
X int dummy;
X
X if( DstData != NULL ) {
X FreeHostData( DstData );
X }
X
X DstData = etherproc_getdstdata_1( &dummy, Client );
X}
X
Xvoid TopSrcData()
X{
X SrcIndex = 0;
X SrcPtr = SrcData->e_addrs[0];
X}
X
Xvoid TopDstData()
X{
X DstIndex = 0;
X DstPtr = DstData->e_addrs[0];
X}
X
Xint GetNextSrcData( addr, count )
Xint *addr;
Xint *count;
X{
X
X if( SrcPtr != NULL ) {
X
X *addr = SrcPtr->h_addr;
X *count = SrcPtr->h_cnt;
X
X SrcPtr = SrcPtr->h_nxt;
X return( 1 );
X } else {
X SrcIndex++;
X }
X
X while( SrcIndex < HASHSIZE ) {
X
X SrcPtr = SrcData->e_addrs[SrcIndex];
X
X if( SrcPtr == NULL ) {
X SrcIndex++;
X continue;
X }
X
X *addr = SrcPtr->h_addr;
X *count = SrcPtr->h_cnt;
X
X SrcPtr = SrcPtr->h_nxt;
X return( 1 );
X }
X
X return( 0 );
X}
X
X
Xint GetNextDstData( addr, count )
Xint *addr;
Xint *count;
X{
X
X if( DstPtr != NULL ) {
X
X *addr = DstPtr->h_addr;
X *count = DstPtr->h_cnt;
X
X DstPtr = DstPtr->h_nxt;
X return( 1 );
X } else {
X DstIndex++;
X }
X
X while( DstIndex < HASHSIZE ) {
X
X DstPtr = DstData->e_addrs[DstIndex];
X
X if( DstPtr == NULL ) {
X DstIndex++;
X continue;
X }
X
X *addr = DstPtr->h_addr;
X *count = DstPtr->h_cnt;
X
X DstPtr = DstPtr->h_nxt;
X return( 1 );
X }
X
X return( 0 );
X}
X
Xint GetBytesDelta()
X{
X return( StatData->e_bytes - PrevStatData.e_bytes );
X}
X
Xint GetPacketsDelta()
X{
X return( StatData->e_packets - PrevStatData.e_packets );
X}
X
Xint GetBCastDelta()
X{
X return( StatData->e_bcast - PrevStatData.e_bcast );
X}
X
Xint GetNDProtoDelta()
X{
X return( StatData->e_proto[NDPROTO] - PrevStatData.e_proto[NDPROTO] );
X}
X
Xint GetICMPProtoDelta()
X{
X return(StatData->e_proto[ICMPPROTO] - PrevStatData.e_proto[ICMPPROTO]);
X}
X
Xint GetUDPProtoDelta()
X{
X return(StatData->e_proto[UDPPROTO] - PrevStatData.e_proto[UDPPROTO]);
X}
X
Xint GetTCPProtoDelta()
X{
X return(StatData->e_proto[TCPPROTO] - PrevStatData.e_proto[TCPPROTO]);
X}
X
Xint GetARPProtoDelta()
X{
X return(StatData->e_proto[ARPPROTO] - PrevStatData.e_proto[ARPPROTO]);
X}
X
Xint GetOtherProtoDelta()
X{
X return(StatData->e_proto[OTHERPROTO]-PrevStatData.e_proto[OTHERPROTO]);
X}
X
Xlong GetTimeDelta()
X{
X return( TimeDelta );
X}
X
Xint GetSizeDelta( s )
Xint s;
X{
X return( StatData->e_size[s] - PrevStatData.e_size[s] );
X}
X
Xfloat GetNetLoad()
X{
X long bits;
X int delta;
X float load;
X
X bits = (StatData->e_bytes - PrevStatData.e_bytes) * 8;
X delta = (StatData->e_time.tv_seconds - PrevStatData.e_time.tv_seconds);
X
X load = (float)((( (double)bits / (double)delta ) /
X ((double)(10 * 1024 * 1024))) * 100.0);
X
X return( load );
X
X}
X
Xstatic void FreeHostData( data )
Xetheraddrs *data;
X{
X etherhmem tmp;
X int i;
X
X for( i = 0; i < HASHSIZE; i++ ) {
X tmp = data->e_addrs[i];
X
X while( tmp != NULL ) {
X free( tmp );
X tmp = tmp->h_nxt;
X }
X }
X}
END_OF_FILE
if test 4760 -ne `wc -c <'rpc_stuff.c'`; then
echo shar: \"'rpc_stuff.c'\" unpacked with wrong size!
fi
# end of 'rpc_stuff.c'
fi
if test -f 'strip.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'strip.c'\"
else
echo shar: Extracting \"'strip.c'\" \(4916 characters\)
sed "s/^X//" >'strip.c' <<'END_OF_FILE'
X/*
X * strip.c
X *
X *
X */
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include "misc.h"
X#include "display.h"
X
X#define MAX_STRIP (10)
X#define MAX_LABLE (100)
X
Xstruct strip {
X char sp_lable[MAX_LABLE];
X int sp_width;
X int sp_height;
X int sp_x;
X int sp_y;
X int sp_min;
X int sp_max;
X float sp_delta;
X int *sp_vals;
X int sp_head;
X int sp_tail;
X int sp_cx;
X int sp_cut;
X int sp_clear;
X Window sp_win;
X int sp_mapped;
X};
X
Xstatic struct strip StripArray[MAX_STRIP];
Xstatic int LastStrip = 0;
X
Xstatic GC StripGC = 0;
X
Xstatic void DrawStripLables();
X
Xvoid RedrawStrip();
X
Xint CreateStrip( lable, min, max, width, height, x, y )
Xchar *lable;
Xint min;
Xint max;
Xint width;
Xint height;
Xint x;
Xint y;
X{
X char buf[100];
X int i;
X int id;
X
X if( StripGC == 0 ) {
X StripGC = XCreateGC( Dp, MainWin, 0, NULL );
X XSetState(Dp,StripGC, ForGndPix, BackGndPix, GXcopy, AllPlanes);
X }
X
X id = LastStrip++;
X
X StripArray[id].sp_width = width;
X StripArray[id].sp_height = height;
X StripArray[id].sp_min = min;
X StripArray[id].sp_max = max;
X StripArray[id].sp_x = x;
X StripArray[id].sp_y = y;
X StripArray[id].sp_mapped = FALSE;
X StripArray[id].sp_head = 1;
X StripArray[id].sp_tail = 0;
X StripArray[id].sp_cx = 1;
X StripArray[id].sp_clear = 1;
X
X StripArray[id].sp_delta = ( (float)height ) /
X ( (float)max - (float)min );
X
X StripArray[id].sp_vals = (int *)malloc( sizeof(int) * width );
X *(StripArray[id].sp_vals+0) = 0;
X *(StripArray[id].sp_vals+1) = 0;
X
X sprintf( buf, "%d", max );
X StripArray[id].sp_cut = width - ( strlen( buf ) * 5 + 5 );
X
X strncpy( StripArray[id].sp_lable, lable, MAX_LABLE );
X strncat( StripArray[id].sp_lable, " ", MAX_LABLE );
X
X StripArray[id].sp_win = XCreateSimpleWindow( Dp, MainWin, x, y, width,
X height, 1, ForGndPix, BackGndPix );
X
X XSelectInput( Dp, StripArray[id].sp_win,
X ExposureMask|StructureNotifyMask|ButtonPressMask );
X
X return( id );
X
X}
X
Xvoid ShowStrip( id )
Xint id;
X{
X XEvent ev;
X
X XMapWindow( Dp, StripArray[id].sp_win );
X
X while( 1 ) {
X XNextEvent( Dp, &ev );
X if( ev.type == Expose ) {
X break;
X }
X }
X
X StripArray[id].sp_mapped = TRUE;
X}
X
Xvoid HideStrip( id )
Xint id;
X{
X XUnmapWindow( Dp, StripArray[id].sp_win );
X StripArray[id].sp_mapped = FALSE;
X}
X
Xvoid RedrawAllStrips()
X{
X int i;
X
X for( i = 0; i < LastStrip; i++ ) {
X if( StripArray[i].sp_mapped == TRUE ) {
X RedrawStrip( i );
X }
X }
X
X}
X
Xvoid RedrawStrip( id )
Xint id;
X{
X struct strip *sp;
X int x1, y1;
X int x2, y2;
X int x, y;
X int i, pc;
X
X sp = &StripArray[id];
X
X x1 = 0;
X y1 = sp->sp_height - *(sp->sp_vals+sp->sp_tail) - 1;
X
X for( i = 1; i < sp->sp_width; i++ ) {
X
X pc = ( sp->sp_tail + i ) % sp->sp_width;
X
X if( pc == sp->sp_head ) break;
X
X x2 = i;
X y2 = sp->sp_height - *(sp->sp_vals+pc) - 1;
X
X XDrawLine( Dp, sp->sp_win, StripGC, x1, y1, x2, y2 );
X
X x1 = x2;
X y1 = y2;
X
X }
X
X sp->sp_cx = i - 1;
X
X DrawStripLables( id );
X
X}
X
Xstatic void DrawStripLables( id )
Xint id;
X{
X struct strip *sp;
X char buf[1024];
X int len;
X int x, y;
X
X sp = &StripArray[id];
X
X len = strlen( sp->sp_lable );
X
X XDrawImageString(Dp, sp->sp_win, Text5x8GC, 1, 8, sp->sp_lable, len);
X
X sprintf( buf, "%d", sp->sp_max );
X len = strlen( buf );
X x = sp->sp_width - ( len * 5 + 1 );
X y = 8;
X XDrawImageString(Dp, sp->sp_win, Text5x8GC, x, y, buf, len);
X
X sprintf( buf, "%d", sp->sp_min );
X len = strlen( buf );
X x = sp->sp_width - ( len * 5 + 1 );
X y = sp->sp_height - 1;
X XDrawImageString(Dp, sp->sp_win, Text5x8GC, x, y, buf, len);
X
X}
X
Xvoid UpdateStripVal( id, val )
Xint id;
Xint val;
X{
X struct strip *sp;
X int val2;
X char buf[100];
X int x1, y1;
X int x2, y2;
X int i, len;
X
X sp = &StripArray[id];
X
X val2 = val;
X
X if( val > sp->sp_max ) {
X val = sp->sp_max;
X }
X
X sp->sp_head = ( sp->sp_head + 1 ) % sp->sp_width;
X
X if( sp->sp_head == sp->sp_tail ) {
X sp->sp_tail = ( sp->sp_tail + 1 ) % sp->sp_width;
X }
X
X *(sp->sp_vals+sp->sp_head) = (int)(sp->sp_delta * (float)val);
X
X if( sp->sp_cx >= sp->sp_cut ) {
X int sx;
X
X sx = sp->sp_cut / 2 + 1;
X
X XCopyArea( Dp, sp->sp_win, sp->sp_win, StripGC, sx, 0,
X sx, sp->sp_height, 0, 0 );
X XClearArea( Dp, sp->sp_win, sx, 0, sx, sp->sp_height, False );
X
X sp->sp_cx = sx;
X sp->sp_tail = ( sp->sp_tail + sx ) % sp->sp_width;
X DrawStripLables( id );
X
X } else {
X sp->sp_cx++;
X }
X
X x1 = sp->sp_cx - 1;
X
X if( sp->sp_head == 0 ) {
X y1 = *(sp->sp_vals + sp->sp_width - 1 );
X } else {
X y1 = *(sp->sp_vals + sp->sp_head - 1 );
X }
X
X y1 = sp->sp_height - y1 - 1;
X
X x2 = sp->sp_cx;
X y2 = sp->sp_height - *(sp->sp_vals + sp->sp_head ) - 1;
X
X XDrawLine( Dp, sp->sp_win, StripGC, x1, y1, x2, y2 );
X
X sprintf( buf, "%d%%", val2 );
X len = strlen( buf );
X
X x1 = sp->sp_width / 2;
X
X XSetForeground( Dp, StripGC, BackGndPix );
X XSetBackground( Dp, StripGC, ForGndPix );
X
X XFillRectangle( Dp, sp->sp_win, StripGC, x1, 0, sp->sp_clear, 8 );
X
X XSetForeground( Dp, StripGC, ForGndPix );
X XSetBackground( Dp, StripGC, BackGndPix );
X
X XDrawImageString( Dp, sp->sp_win, Text5x8GC, x1, 7, buf, len );
X
X sp->sp_clear = len * 5;
X}
END_OF_FILE
if test 4916 -ne `wc -c <'strip.c'`; then
echo shar: \"'strip.c'\" unpacked with wrong size!
fi
# end of 'strip.c'
fi
if test -f 'xtr.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'xtr.c'\"
else
echo shar: Extracting \"'xtr.c'\" \(4499 characters\)
sed "s/^X//" >'xtr.c' <<'END_OF_FILE'
X/*
X *
X *
X *
X */
X#include <sys/time.h>
X#include <signal.h>
X#include <stdio.h>
X#include "misc.h"
X
X#define MAIN_STATE (1)
X#define STAT_STATE (2)
X#define HOST_STATE (3)
X#define MASK_STATE (4)
X
Xextern void DoStats();
Xextern void DoHosts();
Xextern void MakeStatBars();
Xstatic void MakeMainButtons();
Xstatic void Usaged();
Xstatic void TakeDown();
Xstatic void PutUp();
Xstatic void MainLoop();
Xstatic void SigFunc();
Xstatic void TurnOnAlarm();
Xstatic void TurnOffAlarm();
Xstatic void ResetTimer();
X
Xstatic int QuitStat();
Xstatic int StatFunc();
Xstatic int HostsFunc();
Xstatic int MaskFunc();
Xstatic int InvDown();
Xstatic int InvUp();
X
Xstatic void ShowMainButtons();
Xstatic void HideMainButtons();
X
Xstatic int ButQuit;
Xstatic int ButStat;
Xstatic int ButHosts;
Xstatic int ButMask;
Xstatic int ButInvUp;
Xstatic int ButInvDown;
X
X
Xstatic int MainLoopState = MAIN_STATE;
Xstatic int NewState = MAIN_STATE;
Xstatic int MainTimer = 1;
Xstatic int AlarmOn = FALSE;
X
Xmain( argc, argv )
Xint argc;
Xchar *argv[];
X{
X int id;
X int i;
X
X if( argc != 2 ) {
X Usaged();
X exit( 1 );
X }
X
X InitRPC( argv[1] );
X InitWin( argv[1] );
X
X
X MakeStatDisplay();
X MakeHostDisplay();
X MakeMaskDisplay();
X MakeMainButtons();
X
X SetHost( argv[1] );
X SetInterval( 1 );
X signal( SIGALRM, SigFunc );
X
X FlushDpy();
X
X MainLoop();
X
X}
X
Xstatic void MainLoop()
X{
X
X
X while( 1 ) {
X
X if( NewState != MainLoopState ) {
X TurnOffAlarm();
X TakeDown( MainLoopState );
X PutUp( NewState );
X MainLoopState = NewState;
X }
X
X DoEvents( TRUE );
X }
X}
X
X
Xvoid ReturnToMain()
X{
X NewState = MAIN_STATE;
X TurnOffEther();
X}
X
Xvoid SetMainTimer( t )
Xint t;
X{
X MainTimer = t;
X ResetTimer( MainTimer );
X}
X
Xstatic void TurnOffAlarm()
X{
X struct itimerval value;
X
X value.it_interval.tv_sec = 0;
X value.it_interval.tv_usec = 0;
X
X value.it_value.tv_sec = 0;
X value.it_value.tv_usec = 0;
X
X setitimer( ITIMER_REAL, &value, NULL );
X
X AlarmOn = FALSE;
X}
X
Xstatic void TurnOnAlarm()
X{
X AlarmOn = TRUE;
X}
X
Xstatic void ResetTimer( t )
Xint t;
X{
X struct itimerval value;
X
X if( AlarmOn == TRUE ) {
X value.it_interval.tv_sec = t;
X value.it_interval.tv_usec = 0;
X
X value.it_value.tv_sec = t;
X value.it_value.tv_usec = 0;
X
X setitimer( ITIMER_REAL, &value, NULL );
X }
X}
X
Xstatic void TakeDown( state )
Xint state;
X{
X switch( state ) {
X
X case MAIN_STATE:
X HideMainButtons();
X break;
X
X case STAT_STATE:
X HideStatWindow();
X break;
X
X case HOST_STATE:
X HideHostWindow();
X break;
X
X case MASK_STATE:
X HideMaskWindow();
X break;
X
X }
X}
X
Xstatic void PutUp( state )
Xint state;
X{
X switch( state ) {
X
X case MAIN_STATE:
X ResizeWindow( MWIN_W, MWIN_H );
X ShowMainButtons();
X TurnOffAlarm();
X break;
X
X case STAT_STATE:
X ShowStatWindow();
X TurnOnAlarm();
X ResetTimer( MainTimer );
X break;
X
X case HOST_STATE:
X ShowHostWindow();
X TurnOnAlarm();
X ResetTimer( MainTimer );
X break;
X
X case MASK_STATE:
X ShowMaskWindow();
X TurnOffAlarm();
X break;
X
X }
X}
X
Xstatic void SigFunc()
X{
X signal( SIGALRM, SIG_IGN );
X
X switch( MainLoopState ) {
X
X case MAIN_STATE:
X break;
X
X case STAT_STATE:
X DoStats();
X break;
X
X case HOST_STATE:
X DoHosts();
X break;
X
X }
X
X signal( SIGALRM, SigFunc );
X}
X
Xstatic void MakeMainButtons()
X{
X ButQuit = CreateButton( "Quit", 30, 15, 5, 5, QuitStat );
X ShowButton( ButQuit );
X RedrawButton( ButQuit );
X
X ButStat = CreateButton( "Stat", 30, 15, 40, 5, StatFunc );
X ShowButton( ButStat );
X RedrawButton( ButStat );
X
X ButHosts = CreateButton( "Hosts", 35, 15, 75, 5, HostsFunc );
X ShowButton( ButHosts );
X RedrawButton( ButHosts );
X
X ButMask = CreateButton( "Filters", 45, 15, 115, 5, MaskFunc );
X ShowButton( ButMask );
X RedrawButton( ButMask );
X
X ButInvUp = CreateButton( "+", 8, 5, 5, 38, InvUp );
X ShowButton( ButInvUp );
X RedrawButton( ButInvUp );
X
X ButInvDown = CreateButton( "-", 8, 5, 15, 38, InvDown );
X ShowButton( ButInvDown );
X RedrawButton( ButInvDown );
X}
X
Xstatic void HideMainButtons()
X{
X HideButton( ButQuit );
X HideButton( ButStat );
X HideButton( ButHosts );
X HideButton( ButMask );
X}
X
Xstatic void ShowMainButtons()
X{
X ShowButton( ButHosts );
X ShowButton( ButStat );
X ShowButton( ButQuit );
X ShowButton( ButMask );
X}
X
Xstatic int QuitStat()
X{
X TurnOffEther();
X exit( 0 );
X}
X
Xstatic int StatFunc()
X{
X NewState = STAT_STATE;
X TurnOnEther();
X}
X
Xstatic int HostsFunc()
X{
X NewState = HOST_STATE;
X TurnOnEther();
X}
X
Xstatic int MaskFunc()
X{
X NewState = MASK_STATE;
X}
X
Xstatic int InvUp()
X{
X IncInterval();
X}
X
Xstatic int InvDown()
X{
X DecInterval();
X}
X
Xstatic void Usaged()
X{
X fprintf( stderr, "xtr: Usage: xtr host\n" );
X}
X
END_OF_FILE
if test 4499 -ne `wc -c <'xtr.c'`; then
echo shar: \"'xtr.c'\" unpacked with wrong size!
fi
# end of 'xtr.c'
fi
echo shar: End of archive 2 \(of 3\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Dan Heller
------------------------------------------------
O'Reilly && Associates Z-Code Software
Senior Writer President
argv@ora.com argv@zipcode.com
------------------------------------------------
General Email: argv@sun.com
Comp-sources-x stuff: comp-sources.x@uunet.uu.netpochmara@ogicse.cse.ogi.edu (John Pochmara) (03/15/91)
Article-I.D.: ogicse.18620
Posted: Thu Mar 14 10:04:12 1991
Sender: pochmara@ogicse.ogi.edu
Distribution: usa
Organization: Oregon Graduate Institute (formerly OGC), Beaverton, OR
Lines: 828
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 3 (of 3)."
# Contents: host.c stat.c
# Wrapped by pochmara@ogicse on Thu Mar 14 10:00:08 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'host.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'host.c'\"
else
echo shar: Extracting \"'host.c'\" \(5918 characters\)
sed "s/^X//" >'host.c' <<'END_OF_FILE'
X/*
X *
X * host.c
X *
X *
X */
X#include <sys/types.h>
X#include <sys/socket.h>
X#include <netdb.h>
X#include <netinet/in.h>
X#include <stdio.h>
X#include "bar.h"
X#include "button.h"
X#include "rpc_stuff.h"
X#include "display.h"
X#include "misc.h"
X
X#define HASH_SIZE (256)
X#define MAX_NAME (15)
X
X#define SRC_DATA (1)
X#define DST_DATA (2)
X
Xstruct host_node {
X struct in_addr hn_addr;
X char hn_name[MAX_NAME];
X int hn_bar;
X int hn_count;
X struct host_node *hn_next;
X};
X
X
Xstatic struct host_node *NewHostNode();
Xstatic struct host_node *FindHostByAddr();
Xstatic void ShowHostsBars();
Xstatic void HideHostsBars();
Xstatic struct host_node *InsertHost();
Xstatic void MakeBars();
Xstatic void MakeHostBar();
Xstatic void LeaveFunc();
Xstatic void DataFunc();
Xstatic void ShowHostButtons();
Xstatic void HideHostButtons();
Xstatic void MakeHostButtons();
Xstatic void GetData();
Xstatic int GetNextData();
Xstatic int HashAddr();
X
Xstatic struct host_node HostTable[HASH_SIZE];
X
Xstatic int NumberOfHosts = 0;
Xstatic int ContinueHosts = TRUE;
Xstatic int DataType = SRC_DATA;
X
Xstatic int ButHostCon;
Xstatic int ButData;
X
Xstatic int WindowWidth = 400;
Xstatic int WindowHeight = 400;
X
Xvoid DoHosts()
X{
X struct host_node *tmp;
X int addr, count;
X int delta;
X
X GetData();
X
X while( GetNextData( &addr, &count ) != FALSE ) {
X
X tmp = FindHostByAddr( (unsigned long)addr );
X
X if( tmp == NULL ) {
X tmp = InsertHost( (unsigned long)addr );
X tmp->hn_count = count - 1;
X }
X
X delta = count - tmp->hn_count;
X
X if( delta > 0 ) {
X if( tmp->hn_bar != -1 ) {
X UpdateBarVal(tmp->hn_bar, delta );
X tmp->hn_count = count;
X } else {
X MakeHostBar( tmp );
X ShowBar( tmp->hn_bar );
X RedrawBar( tmp->hn_bar );
X UpdateBarVal(tmp->hn_bar, delta );
X }
X } else if( tmp->hn_bar != -1 ) {
X UpdateBarVal(tmp->hn_bar, delta );
X tmp->hn_count = count;
X }
X
X }
X
X FlushDpy();
X}
X
Xvoid ShowHostWindow()
X{
X ResizeWindow( WindowWidth, WindowHeight );
X ShowHostButtons();
X ShowHostsBars();
X}
X
Xvoid HideHostWindow()
X{
X HideHostsBars();
X HideHostButtons();
X}
X
Xstatic void GetData()
X{
X if( DataType == SRC_DATA ) {
X GetSrcData();
X TopSrcData();
X } else if( DataType == DST_DATA ) {
X GetDstData();
X TopDstData();
X } else {
X printf( "xtr: Bad DataType.\n" );
X }
X}
X
Xstatic int GetNextData( addr, count )
Xint *addr;
Xint *count;
X{
X if( DataType == SRC_DATA ) {
X return( GetNextSrcData( addr, count ) );
X } else if( DataType == DST_DATA ) {
X return( GetNextDstData( addr, count ) );
X } else {
X printf( "xtr: Bad DataType.\n" );
X }
X}
X
Xvoid MakeHostDisplay()
X{
X struct host_node *tmp;
X int addr, count;
X int i;
X
X MakeHostButtons();
X
X for( i = 0; i < HASH_SIZE; i++ ) {
X HostTable[i].hn_addr.s_addr = 0;
X HostTable[i].hn_bar = -1;
X HostTable[i].hn_name[0] = NULL;
X HostTable[i].hn_next = NULL;
X HostTable[i].hn_count = 0;
X }
X
X WindowWidth = 2 * 200;
X WindowHeight = 50 * 15 + 70;
X
X GetSrcData(); /* Prime the pump */
X TopSrcData();
X
X while( GetNextSrcData( &addr, &count ) != FALSE ) {
X tmp = InsertHost( addr );
X tmp->hn_count = count;
X }
X
X}
X
Xstatic void MakeHostButtons()
X{
X ButHostCon = CreateButton( "Exit", 30, 15, 5, 5, LeaveFunc );
X ButData = CreateButton( "Change to Dst", 80, 15, 40, 5, DataFunc );
X}
X
Xstatic void ShowHostButtons()
X{
X ShowButton( ButHostCon );
X ShowButton( ButData );
X}
X
Xstatic void HideHostButtons()
X{
X HideButton( ButHostCon );
X HideButton( ButData );
X}
X
Xstatic void LeaveFunc()
X{
X ReturnToMain();
X}
X
Xstatic void DataFunc()
X{
X if( DataType == SRC_DATA ) {
X DataType = DST_DATA;
X ChangeButtonLable( ButData, "Change to Src" );
X } else {
X DataType = SRC_DATA;
X ChangeButtonLable( ButData, "Change to Dst" );
X }
X}
X
Xstatic void MakeHostBar( host )
Xstruct host_node *host;
X{
X static int ncol = 1;
X static int xpos = 0;
X static int ypos = 50;
X static int count = 0;
X struct hostent *hinfo;
X
X if( ncol > ( WindowWidth / 200 ) ) {
X WindowWidth += 200;
X ResizeWindow( WindowWidth, WindowHeight );
X }
X
X/*
X hinfo = gethostbyaddr( (char *)&host->hn_addr.s_addr,
X sizeof( host->hn_addr.s_addr ), AF_INET );
X*/
X hinfo = NULL;
X
X
X if( hinfo == NULL ) {
X/*
X strncpy( host->hn_name, inet_ntoa(host->hn_addr), MAX_NAME );
X*/
X strncpy( host->hn_name, NetAddrToString(&(host->hn_addr)), MAX_NAME );
X } else {
X strncpy( host->hn_name, hinfo->h_name, MAX_NAME );
X }
X
X host->hn_bar = CreateBarGraph( host->hn_name, 0,
X 100, 200, 17, FALSE, 90, xpos, ypos);
X
X if( count < 50 ) {
X ypos += 15;
X count++;
X } else {
X ncol++;
X xpos += 200;
X ypos = 50;
X count = 0;
X }
X
X}
X
Xstatic void ShowHostsBars()
X{
X struct host_node *tmp;
X int i;
X
X
X for( i = 0; i < HASH_SIZE; i++ ) {
X
X tmp = HostTable[i].hn_next;
X
X while( tmp != NULL ) {
X
X if( tmp->hn_bar != -1 ) {
X ShowBar( tmp->hn_bar );
X RedrawBar( tmp->hn_bar );
X }
X
X tmp = tmp->hn_next;
X }
X }
X}
X
Xstatic void HideHostsBars()
X{
X struct host_node *tmp;
X int i;
X
X
X for( i = 0; i < HASH_SIZE; i++ ) {
X tmp = HostTable[i].hn_next;
X while( tmp != NULL ) {
X if( tmp->hn_bar != -1 ) {
X HideBar( tmp->hn_bar );
X }
X tmp = tmp->hn_next;
X }
X }
X}
X
Xstatic struct host_node *InsertHost( addr )
Xunsigned long addr;
X{
X struct host_node *tmp;
X int hash;
X
X tmp = NewHostNode();
X
X tmp->hn_addr.s_addr = addr;
X
X hash = HashAddr( addr );
X
X tmp->hn_next = HostTable[hash].hn_next;
X HostTable[hash].hn_next = tmp;
X
X NumberOfHosts++;
X
X return( tmp );
X
X}
X
Xstatic struct host_node *FindHostByAddr( addr )
Xunsigned long addr;
X{
X struct host_node *tmp;
X int hash;
X
X hash = HashAddr( addr );
X
X tmp = HostTable[hash].hn_next;
X
X while( tmp != NULL ) {
X
X if( tmp->hn_addr.s_addr == addr ) {
X return( tmp );
X }
X
X tmp = tmp->hn_next;
X }
X
X return( NULL );
X
X}
X
Xstatic int HashAddr( addr )
Xunsigned long addr;
X{
X return( addr % HASH_SIZE );
X}
X
Xstatic struct host_node *NewHostNode()
X{
X struct host_node *tmp;
X
X tmp = (struct host_node *)malloc( sizeof(struct host_node) );
X
X tmp->hn_addr.s_addr = 0;
X tmp->hn_bar = -1;
X tmp->hn_name[0] = NULL;
X tmp->hn_next = NULL;
X
X return( tmp );
X
X}
X
X
END_OF_FILE
if test 5918 -ne `wc -c <'host.c'`; then
echo shar: \"'host.c'\" unpacked with wrong size!
fi
# end of 'host.c'
fi
if test -f 'stat.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'stat.c'\"
else
echo shar: Extracting \"'stat.c'\" \(8741 characters\)
sed "s/^X//" >'stat.c' <<'END_OF_FILE'
X/*
X * stat.c
X *
X *
X */
X#include <stdio.h>
X#include "rpc_stuff.h"
X#include "bar.h"
X#include "button.h"
X#include "strip.h"
X#include "display.h"
X#include "misc.h"
X
X
Xstatic void ShowProto();
Xstatic void ShowSizes();
Xstatic void ShowTraffic();
Xstatic void MakeTrafficBars();
Xstatic void MakeProtoBars();
Xstatic void MakeSizesBars();
Xstatic void HideProto();
Xstatic void HideTraffic();
Xstatic void HideSizes();
Xstatic void MakeStatBars();
Xstatic void MakeButtons();
Xstatic void ShowButtons();
Xstatic void HideButtons();
Xstatic void MakeStrips();
Xstatic void ShowStrips();
Xstatic void HideStrips();
X
Xstatic void LeaveFunc();
Xstatic void SizesBut();
Xstatic void TrafficBut();
Xstatic void ProtoBut();
Xstatic void COrPBut();
X
X/* Bar Graphs for Stats Display */
Xstatic int BarBytes;
Xstatic int BarPack;
Xstatic int BarBCast;
X
Xstatic int BarUDP;
Xstatic int BarND;
Xstatic int BarICMP;
Xstatic int BarTCP;
Xstatic int BarARP;
Xstatic int BarOther;
X
Xstatic int BarSizes[16];
X
X/* Buttons for Stats display */
Xstatic int ButProto;
Xstatic int ButTraffic;
Xstatic int ButSizes;
Xstatic int ButCon;
Xstatic int ButCOrP;
X
X/* Strips of Stat display */
Xstatic int StrLoad;
X
Xstatic int DisplayProto = TRUE;
Xstatic int DisplayTraffic = TRUE;
Xstatic int DisplaySizes = TRUE;
X
Xstatic int PerSecond = TRUE;
X
Xvoid DoStats()
X{
X long td;
X int j;
X
X GetStatData();
X
X if( PerSecond == TRUE ) {
X td = GetTimeDelta();
X } else {
X td = 1;
X }
X
X if( DisplayTraffic == TRUE ) {
X UpdateBarVal( BarBytes, GetBytesDelta()/td );
X UpdateBarVal( BarPack, GetPacketsDelta()/td );
X UpdateBarVal( BarBCast, GetBCastDelta()/td );
X }
X
X if( DisplayProto == TRUE ) {
X UpdateBarVal( BarND, GetNDProtoDelta()/td );
X UpdateBarVal( BarUDP, GetUDPProtoDelta()/td );
X UpdateBarVal( BarICMP, GetICMPProtoDelta()/td );
X UpdateBarVal( BarTCP, GetTCPProtoDelta()/td );
X UpdateBarVal( BarARP, GetARPProtoDelta()/td );
X UpdateBarVal( BarOther, GetOtherProtoDelta()/td );
X }
X
X if( DisplaySizes == TRUE ) {
X for( j = 0; j < 16; j++ ) {
X UpdateBarVal( BarSizes[j],GetSizeDelta( j )/td);
X }
X }
X
X UpdateStripVal( StrLoad, (int)GetNetLoad() );
X
X FlushDpy();
X}
X
Xvoid ShowStatWindow()
X{
X ResizeWindow( 400, 295 );
X ShowSizes();
X ShowProto();
X ShowTraffic();
X ShowButtons();
X ShowStrips();
X}
X
Xvoid HideStatWindow()
X{
X HideProto();
X HideTraffic();
X HideSizes();
X HideButtons();
X HideStrips();
X}
X
Xvoid MakeStatDisplay()
X{
X MakeStatBars();
X MakeButtons();
X MakeStrips();
X}
X
Xstatic void MakeStatBars()
X{
X MakeTrafficBars();
X MakeProtoBars();
X MakeSizesBars();
X}
X
Xstatic void MakeTrafficBars()
X{
X int val;
X
X val = GetDefaultValInt( "Maxbytes", 20000 );
X BarBytes = CreateBarGraph( "bytes", 0, val, 400, 17,
X FALSE, 60, 0, 55 );
X
X val = GetDefaultValInt( "Maxpackets", 500 );
X BarPack = CreateBarGraph( "packets", 0, val, 400, 17,
X FALSE, 60, 0, 70 );
X
X val = GetDefaultValInt( "Maxbroadcast", 100 );
X BarBCast = CreateBarGraph("broadcast", 0, val, 400, 17,
X FALSE, 60, 0, 85 );
X}
X
Xstatic void MakeProtoBars()
X{
X int val;
X
X val = GetDefaultValInt( "MaxUDP", 100 );
X BarUDP = CreateBarGraph("UDP", 0, val, 400, 17, FALSE, 60, 0, 105 );
X
X val = GetDefaultValInt( "MaxTCP", 100 );
X BarTCP = CreateBarGraph("TCP", 0, val, 400, 17, FALSE, 60, 0, 120 );
X
X val = GetDefaultValInt( "MaxICMP", 100 );
X BarICMP = CreateBarGraph("ICMP", 0, val, 200, 17, FALSE, 60, 0, 135 );
X
X val = GetDefaultValInt( "MaxARP", 100 );
X BarARP = CreateBarGraph("ARP", 0, val, 200, 17, FALSE, 60, 200, 135 );
X
X val = GetDefaultValInt( "MaxND", 100 );
X BarND = CreateBarGraph("ND", 0, val, 200, 17, FALSE, 60, 0, 150 );
X
X val = GetDefaultValInt( "MaxOther", 100 );
X BarOther = CreateBarGraph("Other", 0, val, 200, 17,
X FALSE, 60, 200, 150 );
X}
X
Xstatic void MakeSizesBars()
X{
X int val;
X
X val = GetDefaultValInt( "MaxSize60", 100 );
X BarSizes[0] = CreateBarGraph("60 - 150", 0, val, 200, 17,
X FALSE, 70, 0, 170 );
X
X val = GetDefaultValInt( "MaxSize151", 100 );
X BarSizes[1] = CreateBarGraph("151 - 240", 0, val, 200, 17,
X FALSE, 70, 0, 185 );
X
X val = GetDefaultValInt( "MaxSize241", 100 );
X BarSizes[2] = CreateBarGraph("241 - 330", 0, val, 200, 17,
X FALSE, 70, 0, 200 );
X
X val = GetDefaultValInt( "MaxSize331", 100 );
X BarSizes[3] = CreateBarGraph("331 - 420", 0, val, 200, 17,
X FALSE, 70, 0, 215 );
X
X val = GetDefaultValInt( "MaxSize421", 100 );
X BarSizes[4] = CreateBarGraph("421 - 510", 0, val, 200, 17,
X FALSE, 70, 0, 230 );
X
X val = GetDefaultValInt( "MaxSize511", 100 );
X BarSizes[5] = CreateBarGraph("511 - 600", 0, val, 200, 17,
X FALSE, 70, 0, 245 );
X
X val = GetDefaultValInt( "MaxSize601", 100 );
X BarSizes[6] = CreateBarGraph("601 - 690", 0, val, 200, 17,
X FALSE, 70, 0, 260 );
X
X val = GetDefaultValInt( "MaxSize691", 100 );
X BarSizes[7] = CreateBarGraph("691 - 780", 0, val, 200, 17,
X FALSE, 70, 0, 275 );
X
X val = GetDefaultValInt( "MaxSize781", 100 );
X BarSizes[8] = CreateBarGraph("781 - 870", 0, val, 200,17,
X FALSE,70,200,170);
X
X val = GetDefaultValInt( "MaxSize871", 100 );
X BarSizes[9] = CreateBarGraph("871 - 960", 0, val, 200,17,
X FALSE, 70, 200,185);
X
X val = GetDefaultValInt( "MaxSize961", 100 );
X BarSizes[10] = CreateBarGraph("961 - 1050",0,val, 200,17,
X FALSE, 70, 200,200);
X
X val = GetDefaultValInt( "MaxSize1051", 100 );
X BarSizes[11] = CreateBarGraph("1051 - 1140",0,val,200,17,
X FALSE, 70, 200,215);
X
X val = GetDefaultValInt( "MaxSize1141", 100 );
X BarSizes[12] = CreateBarGraph("1141 - 1230",0,val,200,17,
X FALSE, 70, 200,230);
X
X val = GetDefaultValInt( "MaxSize1231", 100 );
X BarSizes[13] = CreateBarGraph("1231 - 1320",0,val,200,17,
X FALSE, 70, 200,245);
X
X val = GetDefaultValInt( "MaxSize1321", 100 );
X BarSizes[14] = CreateBarGraph("1321 - 1410",0,val,200,17,
X FALSE, 70, 200,260);
X
X val = GetDefaultValInt( "MaxSize1410", 100 );
X BarSizes[15] = CreateBarGraph("1410 - 1514",0,val,200,17,
X FALSE, 70, 200,275);
X}
X
Xstatic void ShowSizes()
X{
X int i;
X
X for( i = 0; i < 16; i++ ) {
X ShowBar( BarSizes[i] );
X RedrawBar( BarSizes[i] );
X }
X
X}
X
Xstatic void HideSizes()
X{
X int i;
X
X for( i = 0; i < 16; i++ ) {
X HideBar( BarSizes[i] );
X }
X}
X
X
Xstatic void ShowTraffic()
X{
X ShowBar( BarBCast );
X RedrawBar( BarBCast );
X
X ShowBar( BarBytes );
X RedrawBar( BarBytes );
X
X ShowBar( BarPack );
X RedrawBar( BarPack );
X
X}
X
Xstatic void HideTraffic()
X{
X HideBar( BarBCast );
X HideBar( BarBytes );
X HideBar( BarPack );
X}
X
Xstatic void ShowProto()
X{
X
X ShowBar( BarUDP );
X RedrawBar( BarUDP );
X
X ShowBar( BarICMP );
X RedrawBar( BarICMP );
X
X ShowBar( BarND );
X RedrawBar( BarND );
X
X ShowBar( BarTCP );
X RedrawBar( BarTCP );
X
X ShowBar( BarARP );
X RedrawBar( BarARP );
X
X ShowBar( BarOther );
X RedrawBar( BarOther );
X
X}
X
Xstatic void HideProto()
X{
X HideBar( BarUDP );
X HideBar( BarICMP );
X HideBar( BarND );
X HideBar( BarTCP );
X HideBar( BarARP );
X HideBar( BarOther );
X
X}
X
Xstatic void ProtoBut()
X{
X
X if( DisplayProto == TRUE ) {
X HideProto();
X ChangeButtonLable( ButProto, "Proto On" );
X DisplayProto = FALSE;
X } else {
X ShowProto();
X ChangeButtonLable( ButProto, "Proto Off" );
X DisplayProto = TRUE;
X }
X}
X
Xstatic void TrafficBut()
X{
X
X if( DisplayTraffic == TRUE ) {
X HideTraffic();
X ChangeButtonLable( ButTraffic, "Traffic On" );
X DisplayTraffic = FALSE;
X } else {
X ShowTraffic();
X ChangeButtonLable( ButTraffic, "Traffic Off" );
X DisplayTraffic = TRUE;
X }
X}
X
Xstatic void SizesBut()
X{
X
X if( DisplaySizes == TRUE ) {
X HideSizes();
X ChangeButtonLable( ButSizes, "Sizes On" );
X DisplaySizes = FALSE;
X } else {
X ShowSizes();
X ChangeButtonLable( ButSizes, "Sizes Off" );
X DisplaySizes = TRUE;
X }
X}
X
Xstatic void COrPBut()
X{
X if( PerSecond == TRUE ) {
X ChangeButtonLable( ButCOrP, "Cumulative" );
X PerSecond = FALSE;
X } else {
X ChangeButtonLable( ButCOrP, "Per/sec" );
X PerSecond = TRUE;
X }
X}
X
Xstatic void LeaveFunc()
X{
X ReturnToMain();
X}
X
Xstatic void MakeStrips()
X{
X int val;
X
X val = GetDefaultValInt( "MaxLoad", 20 );
X StrLoad = CreateStrip( "Load", 0, val, 250, 25, 125, 25 );
X}
X
Xstatic void ShowStrips()
X{
X ShowStrip( StrLoad );
X RedrawStrip( StrLoad );
X}
X
Xstatic void HideStrips()
X{
X HideStrip( StrLoad );
X}
X
Xstatic void MakeButtons()
X{
X ButCon = CreateButton( "Exit", 30, 15, 5, 5, LeaveFunc );
X ButTraffic = CreateButton( "Traffic Off", 75, 15, 40, 5, TrafficBut );
X ButProto = CreateButton( "Proto Off", 65, 15, 120, 5, ProtoBut );
X ButSizes = CreateButton( "Sizes Off", 65, 15, 190, 5, SizesBut );
X ButCOrP = CreateButton( "Per/sec", 65, 15, 260, 5, COrPBut );
X
X}
X
Xstatic void ShowButtons()
X{
X ShowButton( ButCon );
X ShowButton( ButProto );
X ShowButton( ButTraffic );
X ShowButton( ButSizes );
X ShowButton( ButCOrP );
X}
X
Xstatic void HideButtons()
X{
X HideButton( ButCon );
X HideButton( ButProto );
X HideButton( ButTraffic );
X HideButton( ButSizes );
X HideButton( ButCOrP );
X}
END_OF_FILE
if test 8741 -ne `wc -c <'stat.c'`; then
echo shar: \"'stat.c'\" unpacked with wrong size!
fi
# end of 'stat.c'
fi
echo shar: End of archive 3 \(of 3\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Dan Heller
------------------------------------------------
O'Reilly && Associates Z-Code Software
Senior Writer President
argv@ora.com argv@zipcode.com
------------------------------------------------
General Email: argv@sun.com
Comp-sources-x stuff: comp-sources.x@uunet.uu.net