diff -u ../xperfmon++.orig/Imakefile ./Imakefile --- ../xperfmon++.orig/Imakefile Wed Jul 27 22:29:29 1994 +++ ./Imakefile Sun Nov 12 00:07:24 1995 @@ -17,15 +17,21 @@ SYS_MODULE= sgi_system #endif -EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) +#if defined (i386BsdArchitecture) +BSDFLAGS= -lkvm +SYS_MODULE= bsd_system +CC= gcc +#endif + +EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) $(BSDFLAGS) INSTPGMFLAGS = $(INSTKMEMFLAGS) LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB) INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -# INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -I/usr/include/bsd - CDEBUGFLAGS = -O - SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c - OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o +# SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c +# OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o + SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c + OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o ComplexProgramTarget(xperfmon++) diff -u ../xperfmon++.orig/README ./README --- ../xperfmon++.orig/README Wed Jul 27 22:29:30 1994 +++ ./README Sun Nov 12 00:07:24 1995 @@ -18,3 +18,20 @@ Research Center, rsmith@proteus.arc.nasa.gov. Imake will build for correct O/S if x11r5 is fully installed in all the right places. + +3-15-95 Completely new port of systemdependent file (bsd_system.c) for FreeBSD-2.X + by Lars Köller @University of Rostock, Germany. + E-Mail: + +8-16-95 Quick and dirty workaround of -geometry option bug. + But there are still some side effects when changing the geometry. + Fix memory leak in bsd_system.c + by Lars Köller @University of Rostock, Germany. + E-Mail: + +30-10-95 Change 'Free Mem' graph to 'Free Swap' cause the FreeBSD memory system + tries to minimize the free unused amount of memory. + Include basic support for FreeBSD > 2.1. + Number of interrupts now independent from + by Lars Köller @University of Rostock, Germany. + E-Mail: diff -u ../xperfmon++.orig/TimeChart.h ./TimeChart.h --- ../xperfmon++.orig/TimeChart.h Wed Jul 27 22:29:31 1994 +++ ./TimeChart.h Sun Nov 12 00:07:24 1995 @@ -88,12 +88,12 @@ #define XtCFillRect "FillRect" #define XtNgetValue "getValue" -#define XtNhighlight "highlight" +/* #define XtNhighlight "highlight" */ #define XtNjumpScroll "jumpScroll" #define XtNminScale "minScale" #define XtNscale "scale" #define XtNfillRect "fillRect" -#define XtNupdate "update" +/* #define XtNupdate "update" */ #define XtNvmunix "vmunix" typedef struct _TimeChartRec *TimeChartWidget; diff -u ../xperfmon++.orig/XPerfmon++.ad ./XPerfmon++.ad --- ../xperfmon++.orig/XPerfmon++.ad Wed Jul 27 22:29:32 1994 +++ ./XPerfmon++.ad Sun Nov 12 00:07:23 1995 @@ -4,24 +4,37 @@ ! commented out, the "NFS Server" graph background will be the application ! default color, unless some other resource file has specified it. ! *PerfChart.highAlarm: 99998 +*perfChartUser.highAlarm: 95 +*perfChartUser.highWarn: 75 + +*perfChartSystem.highAlarm: 40 +*perfChartSystem.highWarn: 25 + *perfChartIdle.lowWarn: 10 *perfChartIdle.lowAlarm: 5 -*perfChartUser.highAlarm: 90 -*perfChartUser.highWarn: 75 -*perfChartSystem.highAlarm: 90 -*perfChartSystem.highWarn: 75 -*perfChartFree.lowWarn: 2000 -*perfChartFree.lowAlarm: 1000 -*perfChartDisk.highWarn: 25 -*perfChartDisk.highAlarm: 50 -*perfChartIntrpts.highWarn: 500 -*perfChartIntrpts.highAlarm: 750 -*perfChartInput.highWarn: 300 -*perfChartInput.highAlarm: 500 -*perfChartOutput.highWarn: 300 -*perfChartOutput.highAlarm: 500 + +*perfChartSwap.highWarn: 50 +*perfChartSwap.highAlarm: 100 + +*perfChartDisk.highWarn: 50 +*perfChartDisk.highAlarm: 100 + +*perfChartIntrpts.highWarn: 400 +*perfChartIntrpts.highAlarm: 600 + +*perfChartInput.highWarn: 500 +*perfChartInput.highAlarm: 1000 + +*perfChartOutput.highWarn: 500 +*perfChartOutput.highAlarm: 1000 + *perfChartCollision.highWarn: 20 *perfChartCollision.highAlarm: 50 -*perfChartNFSClient.highWarn: 200 -*perfChartNFSClient.highAlarm: 400 + +*perfChartNFSClient.highWarn: 100 +*perfChartNFSClient.highAlarm: 200 + +*perfChartNFSServer.highWarn: 100 +*perfChartNFSServer.highAlarm: 200 *font: 6x13 + Only in .: bsd_system.c diff -u ../xperfmon++.orig/misc.c ./misc.c --- ../xperfmon++.orig/misc.c Wed Jul 27 22:29:33 1994 +++ ./misc.c Sun Nov 12 00:07:24 1995 @@ -58,7 +58,7 @@ int i, keycode, length = 0; /* PerfmonWidget pw = (PerfmonWidget) w;*/ - length = XLookupString(event, strbuf, STRBUFSIZE, &keycode, NULL); + length = XLookupString((XKeyEvent *)event, strbuf, STRBUFSIZE, (KeySym *)&keycode, NULL); switch (keycode) { case 'Q': case 'q': diff -u ../xperfmon++.orig/system.h ./system.h --- ../xperfmon++.orig/system.h Wed Jul 27 22:29:34 1994 +++ ./system.h Sun Nov 12 00:07:24 1995 @@ -149,7 +149,11 @@ "User", "System", "Idle", +#ifdef __FreeBSD__ + "Swap", +#else "Free", +#endif "Disk", "Interrupts", "Input", @@ -162,7 +166,11 @@ "User", "System", "Idle", +#ifdef __FreeBSD__ + "Swap", +#else "Free", +#endif "Disk", "Intrpts", "Input", @@ -175,7 +183,11 @@ "CPU", "CPU", "CPU", +#ifdef __FreeBSD__ + "Usage (MB)", +#else "Memory", +#endif "Transfers", "", "Packets", diff -u ../xperfmon++.orig/xperfmon++.man ./xperfmon++.man --- ../xperfmon++.orig/xperfmon++.man Wed Jul 27 22:29:39 1994 +++ ./xperfmon++.man Sun Nov 12 00:14:56 1995 @@ -94,8 +94,8 @@ .B \-idlecpu | \+idlecpu Graph \fIIdle\fP CPU Percentage. .TP 26 -.B \-freemem | \+freemem -Graph \fIFree Memory\fP. +.B \-{freemem/usedswap} | \+{freemem/usedswap} +Graph \fIFree Memory/Used Swap (Operating system dependent, swap only for FreeBSD)\fP. .TP 26 .B \-diskxfr | \+diskxfr Graph \fIDisk Transfers\fP per interval period. @@ -176,8 +176,8 @@ .B idle Set \fIlimit\fP value for Idle CPU Percentage. .TP 12 -.B mem -Set \fIlimit\fP value for Free Memory. +.B mem/swap +Set \fIlimit\fP value for Free Memory/Used Swap (OS dependent, swap only for FreeBSD). .TP 12 .B disk Set \fIlimit\fP value for Disk Transfers. @@ -314,7 +314,7 @@ Set System CPU Percentage resource. .TP 16 .B Free -Set Free Memory resource. +Set Free Memory/Swap resource. .TP 16 .B Disk Set Disk Transfer count resource. diff -u ../xperfmon++.orig/xperfmon.c ./xperfmon.c --- ../xperfmon++.orig/xperfmon.c Wed Jul 27 22:29:39 1994 +++ ./xperfmon.c Sun Nov 12 00:13:55 1995 @@ -58,6 +58,10 @@ * */ +#ifdef __FreeBSD__ +#include +#endif + #include #include #include @@ -94,6 +98,11 @@ { NULL, NULL }, }; +/* LK!!! */ +#define MIN_WIDTH 240 +#define MIN_HEIGHT 430 + + #define XtNinterval "interval" #define XtNcount "count" #define XtCCount "Count" @@ -171,11 +180,17 @@ static XrmOptionDescRec optionDescList[] = { { "-interval", ".interval", XrmoptionSepArg, (caddr_t) NULL}, { "-immediate", "*PerfChart.immediate", XrmoptionNoArg, "True" }, - +#if __FreeBSD_version >= 199504 + { "-lowswapAlarm", "*perfChartFree.lowAlarm", XrmoptionSepArg, NULL }, + { "-lowswapWarn", "*perfChartFree.lowWarn", XrmoptionSepArg, NULL }, + { "-highswapAlarm", "*perfChartFree.highAlarm", XrmoptionSepArg, NULL }, + { "-highswapWarn", "*perfChartFree.highWarn", XrmoptionSepArg, NULL }, +#else { "-lowmemAlarm", "*perfChartFree.lowAlarm", XrmoptionSepArg, NULL }, { "-lowmemWarn", "*perfChartFree.lowWarn", XrmoptionSepArg, NULL }, { "-highmemAlarm", "*perfChartFree.highAlarm", XrmoptionSepArg, NULL }, { "-highmemWarn", "*perfChartFree.highWarn", XrmoptionSepArg, NULL }, +#endif { "-lowuserAlarm", "*perfChartUser.lowAlarm", XrmoptionSepArg, NULL }, { "-lowuserWarn", "*perfChartUser.lowWarn", XrmoptionSepArg, NULL }, @@ -237,8 +252,13 @@ { "+systemcpu", XtNsystemcpuAdd, XrmoptionNoArg, "TRUE" }, { "-idlecpu", XtNidlecpuSub, XrmoptionNoArg, "True" }, { "+idlecpu", XtNidlecpuAdd, XrmoptionNoArg, "TRUE" }, +#if __FreeBSD_version >= 199504 + { "-usedswap", XtNfreememSub, XrmoptionNoArg, "True" }, + { "+usedswap", XtNfreememAdd, XrmoptionNoArg, "TRUE" }, +#else { "-freemem", XtNfreememSub, XrmoptionNoArg, "True" }, { "+freemem", XtNfreememAdd, XrmoptionNoArg, "TRUE" }, +#endif { "-diskxfr", XtNdiskxfrSub, XrmoptionNoArg, "True" }, { "+diskxfr", XtNdiskxfrAdd, XrmoptionNoArg, "TRUE" }, { "-interrupts", XtNinterruptsSub , XrmoptionNoArg, "True" }, @@ -344,7 +364,11 @@ fprintf(stderr, " [{-+}usercpu] ({remove|add} usercpu to list of graphs\n"); fprintf(stderr, " [{-+}systemcpu] ({remove|add} systemcpu to list of graphs\n"); fprintf(stderr, " [{-+}idlecpu] ({remove|add} idlecpu to list of graphs\n"); +#if __FreeBSD_version >= 199504 + fprintf(stderr, " [{-+}usedswap] ({remove|add} usedswap to list of graphs\n"); +#else fprintf(stderr, " [{-+}freemem] ({remove|add} freemem to list of graphs\n"); +#endif fprintf(stderr, " [{-+}diskxfr] ({remove|add} disk transfers to list of graphs\n"); fprintf(stderr, " [{-+}interrupts] ({remove|add} interrupts to list of graphs\n"); fprintf(stderr, " [{-+}inputpkts] ({remove|add} input packets to list of graphs\n"); @@ -361,10 +385,18 @@ fprintf(stderr, " [-high*Alarm {value}] ( Set High Alarm value for *)\n"); fprintf(stderr, " [-high*Warn {value}] ( Set High Warning value for *)\n"); fprintf(stderr, " Where \"*\" is one of the following:\n"); +#if __FreeBSD_version >= 199504 + fprintf(stderr, " [swap | user | sys | idle | disk | intrpts |\n"); +#else fprintf(stderr, " [mem | user | sys | idle | disk | intrpts |\n"); +#endif fprintf(stderr, " input | output | collision | nfsclient | nfsserver]\n"); fprintf(stderr, " For Example:\n"); +#if __FreeBSD_version >= 199504 + fprintf(stderr, " [-lowswapAlarm {value}] ( Set low Free Swap Alarm Value)\n"); +#else fprintf(stderr, " [-lowmemAlarm {value}] ( Set low Free Memory Alarm Value)\n"); +#endif fprintf(stderr, "WARNING: It is an error condition to set both a high, and a low, limit warning or alarm.\n"); exit(1); } @@ -386,6 +418,7 @@ time(&timeStamp); return; } + /*ARGSUSED*/ void handleResize( w, unused, event, contin2disp ) Widget w; @@ -419,9 +452,15 @@ break; } - if ( neww < 250 + 10 ) { - neww = 250 + 10; - w->core.width = 250 + 10; + if ( neww < MIN_WIDTH + 10 ) { + neww = MIN_WIDTH + 10; + w->core.width = MIN_WIDTH + 10; + XtResizeWindow(w); + } +/* LK!!! */ + if ( newh < MIN_HEIGHT + 10 ) { + newh = MIN_HEIGHT + 10; + w->core.height = MIN_HEIGHT + 10; XtResizeWindow(w); } if ( appData.debug ) @@ -436,6 +475,7 @@ Dimension boxH = labelBox->core.height; Dimension timeH = timechart->core.height; Dimension newWidgetH = (newh - (boxH+8) - (timeH+10) - hOverHead) / appData.numGraphsOn; + if ( oldWidth == neww && oldHeight == newh ) return; if ( appData.debug ) @@ -464,6 +504,9 @@ int argc; char **argv; { +/* LK!!! */ + Dimension neww, newh, timeH, newWidgetH, hOverHead, boxH; + Arg arg; Pixmap icon_pixmap = None; Widget loadParent, pappaBox; @@ -540,7 +583,6 @@ xperfmon_width, xperfmon_height)); XtSetValues(appData.toplevel, &arg, 1); } - /* create windows */ pappaBox = XtVaCreateManagedWidget("PappaBox", boxWidgetClass, appData.toplevel, @@ -553,8 +595,24 @@ c = (char *) ((long) &hostname[0] + (int) strlen(hostname)); sprintf(c, "\nUpdate Interval = %5.1f secs", (float)(appData.interval*appData.ms_per_sec)/1000.0); +/* LK!!! quick and dirty hack */ + XtRealizeWidget(appData.toplevel); + + neww = appData.toplevel->core.width; + newh = appData.toplevel->core.height; + if ( neww < MIN_WIDTH + 10) { + neww = MIN_WIDTH + 10; + appData.toplevel->core.width = MIN_WIDTH + 10; + XtResizeWindow(appData.toplevel); + } + if ( newh < MIN_HEIGHT + 10) { + newh = MIN_HEIGHT + 10; + appData.toplevel->core.height = MIN_HEIGHT + 10; + XtResizeWindow(appData.toplevel); + } + neww -= 10; labelBox = XtVaCreateManagedWidget("LabelBox", labelWidgetClass, pappaBox, - XtNwidth, 250, + XtNwidth, neww, /* XtNheight, 16,*/ XtNjustify, XtJustifyLeft, XtNinternalHeight, 0, @@ -562,6 +620,13 @@ XtNlabel, hostname, XtNborderWidth, 0, NULL); + +/* same as in handleResize */ + hOverHead = 5 * appData.numGraphsOn; + boxH = labelBox->core.height; + timeH = 18; + newWidgetH = (newh - (boxH+8) - (timeH+10) - hOverHead) / appData.numGraphsOn; + /* build the graph widgets */ for ( i=0; i