home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume22
/
u386mon
/
part05
< prev
next >
Wrap
Text File
|
1991-08-13
|
40KB
|
1,388 lines
Newsgroups: comp.sources.misc
From: Warren Tucker <wht@n4hgf.Mt-Park.GA.US>
Subject: v22i007: u386mon - Sys V Rel 3.x Performance Monitor rev 2.40, Part05/07
Message-ID: <1991Aug14.011702.15396@sparky.IMD.Sterling.COM>
X-Md4-Signature: 3c497f5ae09dc3210a1e60ef40978ac4
Date: Wed, 14 Aug 1991 01:17:02 GMT
Approved: kent@sparky.imd.sterling.com
Submitted-by: Warren Tucker <wht@n4hgf.Mt-Park.GA.US>
Posting-number: Volume 22, Issue 7
Archive-name: u386mon/part05
Environment: SYSVR3
Supersedes: u386mon-2.20: Volume 14, Issue 54-58
#!/bin/sh
# This is part 05 of u386mon.3.40
# ============= det_stream.c ==============
if test -f 'det_stream.c' -a X"$1" != X"-c"; then
echo 'x - skipping det_stream.c (File already exists)'
else
echo 'x - extracting det_stream.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'det_stream.c' &&
X/*+-------------------------------------------------------------------------
X det_stream.c - UNIX V/386 system monitor stream usage detail
X martin@hppcmart.grenoble.hp.com
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XResource Config Alloc Fail -- (% of resource used) -----------------
X#################### ###### ##### #### #########################################
X Defined functions:
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:05-15-1991-17:22-wht@n4hgf-2.3 patches for SVR31 from nba@sysware.dk */
X/*:02-07-1991-13:30-martin@hppcmart-creation */
X
X#define M_TERMINFO
X
X#include <curses.h>
X#ifdef NATIVE_PANELS
X# include <panel.h>
X#else
X# include "libpanel.h"
X#endif
X#include <string.h>
X#include <nlist.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X/*
X#include <sys/ascii.h>
X*/
X#include <sys/var.h>
X#undef NGROUPS_MAX
X#undef NULL
X#include <sys/param.h>
X#include <sys/stream.h>
X#include <sys/strstat.h>
X
X#include "nlsym.h"
X#include "libkmem.h"
X#include "libmem.h"
X#include "libswap.h"
X#include "libnlsym.h"
X#include "u386mon.h"
X
Xextern struct var v;
Xunsigned stream_size[NCLASS+4];
Xushort rbsize[NCLASS];
Xstruct strstat strst;
X
X#define _NDX_STREAMS 0
X#define _NDX_QUEUES 1
X#define _NDX_MESSAGES 2
X#define _NDX_NBLK 3
X#define _NDX_NBLK4 4
X#define _NDX_NBLK16 5
X#define _NDX_NBLK64 6
X#define _NDX_NBLK128 7
X#define _NDX_NBLK256 8
X#define _NDX_NBLK512 9
X#define _NDX_NBLK1024 10
X#define _NDX_NBLK2048 11
X#define _NDX_NBLK4096 12
X
X/*+----------------------------------------------------------------------------
X init_stream()
X-----------------------------------------------------------------------------*/
Xvoid
Xinit_stream()
X{
X int nmblock, i;
X
X kread((caddr_t) rbsize, rbsizeaddr, sizeof(ushort) * NCLASS);
X stream_size[_NDX_STREAMS]=v.v_nstream;
X stream_size[_NDX_QUEUES]=v.v_nqueue;
X kread((caddr_t) &nmblock, nmblockaddr, sizeof(int));
X stream_size[_NDX_MESSAGES]=nmblock;
X stream_size[_NDX_NBLK4]=v.v_nblk4;
X stream_size[_NDX_NBLK16]=v.v_nblk16;
X stream_size[_NDX_NBLK64]=v.v_nblk64;
X stream_size[_NDX_NBLK128]=v.v_nblk128;
X stream_size[_NDX_NBLK256]=v.v_nblk256;
X stream_size[_NDX_NBLK512]=v.v_nblk512;
X stream_size[_NDX_NBLK1024]=v.v_nblk1024;
X stream_size[_NDX_NBLK2048]=v.v_nblk2048;
X stream_size[_NDX_NBLK4096]=v.v_nblk4096;
X stream_size[_NDX_NBLK]=0;
X for(i=_NDX_NBLK4; i<=_NDX_NBLK4096; i++)
X stream_size[_NDX_NBLK]+=stream_size[i];
X}
X
X/*+----------------------------------------------------------------------------
X draw_streamscale_literals(win, y, x);
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XResource Config Alloc Fail -- (% of resource used) -----------------
XStreams ###### ##### #### #########################################
XQueues
XMessage blocks
XData blocks
XData block size ####
X-----------------------------------------------------------------------------*/
X
Xvoid
Xdraw_streamscale_literals(win, y, x)
XWINDOW *win;
Xint y, x;
X
X{
X static char *header =
X"Resource Config Alloc Fail -- (% of resource used) ";
X int x2, i;
X
X wmove(win, y, x);
X use_cp(win, cpBANNER);
X waddstr(win, header);
X getyx(win,y,x2);
X while (x2++ <= COLS)
X waddch(win, (chtype)'-');
X use_cp(win,cpLIT);
X clear_area(win,getmaxy(win)-1,0,getmaxx(win));
X mvwaddstr(win, y + 1, x, "Streams");
X mvwaddstr(win, y + 2, x, "Queues");
X mvwaddstr(win, y + 3, x, "Message blocks");
X mvwaddstr(win, y + 4, x, "Data blocks");
X for (i=0; i<NCLASS; i++)
X mvwprintw(win, (y+i+5), x, "Data block size %4lu", rbsize[i]);
X}
X
X/*+----------------------------------------------------------------------------
X update_streamscale(win, y, x, width);
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XConf Alloc Fail -- (% of resource used) -----------------
X##### ##### ##### #########################################
X-----------------------------------------------------------------------------*/
X#define _STREAM_CO 0
X#define _STREAM_AL 6
X#define _STREAM_FA 12
X#define _STREAM_SX 18
X
Xvoid
Xupdate_streamscale(win, y, x, width)
XWINDOW *win;
Xint y, x;
Xint width;
X
X{
X int percent_used, percent_max;
X int i, itmp, max;
X alcdat *strdat;
X
X kread((caddr_t)&strst, strstaddr, sizeof(struct strstat));
X strdat=(alcdat *)&strst;
X for (i=0; i<NCLASS+4; i++) {
X percent_used=stream_size[i] ? (strdat->use*100/stream_size[i]) : 0;
X percent_max=stream_size[i] ? (strdat->max*100/stream_size[i]) : 0;
X use_cp(win, cpINFO);
X mvwprintw(win, y+i, _STREAM_CO+x, "%5i", stream_size[i]);
X mvwprintw(win, y+i, _STREAM_AL+x, "%5i", strdat->use);
X if (strdat->fail)
X use_cp(win, cpHIGH);
X else
X use_cp(win, cpINFO);
X mvwprintw(win, y+i, _STREAM_FA+x, "%5i", strdat->fail);
X wmove(win, y+i, _STREAM_SX+x);
X
X if (percent_used < 70)
X use_cp(win, cpLOW);
X else if (percent_used < 90)
X use_cp(win, cpMED);
X else
X use_cp(win, cpHIGH);
X
X itmp=(width * percent_used) / 100;
X max=(width * percent_max) / 100;
X while (-1) {
X itmp--;max--;
X if (max<1) {
X use_cp(win, cpHIGH);
X waddch(win, (chtype)'M');
X break;
X }
X if (itmp>-1)
X waddch(win, (chtype)'-');
X else
X waddch(win, (chtype)' ');
X }
X
X wclrtoeol(win);
X strdat++;
X }
X}
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of det_stream.c */
SHAR_EOF
chmod 0644 det_stream.c ||
echo 'restore of det_stream.c failed'
Wc_c="`wc -c < 'det_stream.c'`"
test 5617 -eq "$Wc_c" ||
echo 'det_stream.c: original size 5617, current size' "$Wc_c"
fi
# ============= det_table.c ==============
if test -f 'det_table.c' -a X"$1" != X"-c"; then
echo 'x - skipping det_table.c (File already exists)'
else
echo 'x - extracting det_table.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'det_table.c' &&
X/*+-------------------------------------------------------------------------
X det_table.c - UNIX V/386 system monitor table usage detail
X martin@hppcmart.grenoble.hp.com
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XResource Config Alloc Fail -- (% of resource used) -----------------
X#################### ###### ##### #### #########################################
X Defined functions:
Xfiles_in_use()
Xinodes_in_use()
Xupdate_table_line(win, y, x, width, num_item, max_item, conf_item, percent_item)
Xinit_table()
Xdraw_table_literals(win,y,x)
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:05-15-1991-17:22-wht@n4hgf-2.3 patches for SVR31 from nba@sysware.dk */
X/*:02-07-1991-13:30-martin@hppcmart-creation */
X
X#define M_TERMINFO
X
X#include <curses.h>
X#ifdef NATIVE_PANELS
X# include <panel.h>
X#else
X# include "libpanel.h"
X#endif
X#include <string.h>
X#include <nlist.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X/*
X#include <sys/ascii.h>
X*/
X#include <sys/var.h>
X#undef NGROUPS_MAX
X#undef NULL
X#include <sys/param.h>
X#include <sys/inode.h>
X#include <sys/file.h>
X#include <sys/fcntl.h>
X#include <sys/flock.h>
X#include <sys/immu.h>
X#include <sys/region.h>
X#include <sys/callo.h>
X
X#include "nlsym.h"
X#include "libkmem.h"
X#include "libmem.h"
X#include "libswap.h"
X#include "libnlsym.h"
X#include "u386mon.h"
X
Xextern struct var v;
Xstruct file *fpbase;
Xstruct inode *ipbase;
Xstruct flckinfo flckinfo;
Xstruct region *rgbase;
Xstruct callo *callbase;
Xint max_files=0;
Xint max_inodes=0;
Xint max_locks=0;
Xint max_regions=0;
Xint max_callouts=0;
X
X/*+-------------------------------------------------------------------------
X files_in_use()
X
X Returns the number of files in use or -1 if the free list
X pointers were munged when read which happens every now and then.
X--------------------------------------------------------------------------*/
Xstatic int
Xfiles_in_use()
X{
X struct file *fp, *fflist;
X register int cnt=0;
X unsigned int ndx;
X
X kread((caddr_t) fpbase, fileaddr, sizeof(struct file)*v.v_file);
X kread((caddr_t) &fflist, ffreelistaddr, sizeof(struct file *));
X fp=fpbase + (fflist - (struct file *)fileaddr);
X while (1) {
X cnt++;
X if (fp->f_next == 0) break;
X ndx=fp->f_next - (struct file *)fileaddr;
X if ((ndx >= v.v_file) || (ndx < 0) || (cnt > v.v_file)) return(-1);
X fp=fpbase + ndx;
X
X }
X return(v.v_file-cnt);
X}
X
X/*+-------------------------------------------------------------------------
X inodes_in_use()
X
X Returns the number of inodes used or -1 if the free list
X pointers were munged when read which happens every now and then.
X--------------------------------------------------------------------------*/
X
Xstatic int
Xinodes_in_use()
X{
X struct inode *ip, *iflistend;
X struct ifreelist iflist;
X register int cnt=0;
X int ndx;
X
X kread((caddr_t) ipbase, inodeaddr, sizeof(struct inode)*v.v_inode);
X kread((caddr_t) &iflist, ifreelistaddr, sizeof(struct ifreelist));
X ip=ipbase + (iflist.av_forw - (struct inode *)inodeaddr);
X iflistend=ipbase + (iflist.av_back - (struct inode *)inodeaddr);
X while (1) {
X cnt++;
X if (ip==iflistend) break;
X ndx=ip->av_forw - (struct inode *)inodeaddr;
X if ((ndx >= v.v_inode) || (ndx < 0) || (cnt > v.v_inode)) return(-1);
X ip=ipbase + ndx;
X }
X return(v.v_inode-cnt);
X}
X
X/*+-------------------------------------------------------------------------
X regions_in_use()
X
X Returns the number of regions used or -1 if the free list
X pointers were munged when read which happens every now and then.
X--------------------------------------------------------------------------*/
X
Xstatic int
Xregions_in_use()
X{
X struct region *rg, ractive;
X register int cnt=0;
X int ndx;
X
X kread((caddr_t) rgbase, regionaddr, sizeof(struct region)*v.v_region);
X kread((caddr_t) &ractive, ractiveaddr, sizeof(struct region));
X rg=rgbase + (ractive.r_forw - (struct region *)regionaddr);
X while (1) {
X cnt++;
X if (rg->r_forw==(struct region *)ractiveaddr) break;
X ndx=rg->r_forw - (struct region *)regionaddr;
X if ((ndx >= v.v_region) || (ndx < 0) || (cnt > v.v_region)) return(-1);
X rg=rgbase + ndx;
X }
X return(cnt);
X}
X
X/*+-------------------------------------------------------------------------
X callouts_in_use()
X
X Returns the number of callouts used.
X--------------------------------------------------------------------------*/
X
Xstatic int
Xcallouts_in_use()
X{
X struct callo *call;
X register int cnt=0;
X register int ndx=0;
X
X kread((caddr_t) callbase, calloutaddr, sizeof(struct callo)*v.v_call);
X call=callbase;
X while (ndx<v.v_call) {
X ndx++; call++;
X /* This is a guess - I'm checking it with SCO */
X if (call->c_id>0) cnt++;
X }
X return(cnt);
X}
X
X
X
X/*+-------------------------------------------------------------------------
X update_table_line(win)
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
Xtual total %used ------------------------------------------------
X#### #### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X--------------------------------------------------------------------------*/
X
X#define _TABLESCALE_AC 0
X#define _TABLESCALE_TO 6
X#define _TABLESCALE_PE 13
X#define _TABLESCALE_SX 17
X
Xstatic void
Xupdate_table_line(win, y, x, width, num_item, max_item, conf_item, percent_item)
XWINDOW *win;
Xint y;
Xint x;
Xint width;
Xint num_item;
Xint max_item;
Xint conf_item;
Xint percent_item;
X
X{
X int itmp, max;
X
X if (num_item<0) {
X
X wmove(win, y, x + _TABLESCALE_AC);
X use_cp(win, cpHIGH);
X waddstr(win, "OVER");
X
X } else {
X
X wmove(win,y, x + _TABLESCALE_AC);
X use_cp(win,cpINFO);
X wprintw(win,"%4ld",num_item);
X
X wmove(win,y, x + _TABLESCALE_TO);
X use_cp(win,cpINFO);
X wprintw(win,"%4ld",conf_item);
X
X wmove(win,y, x + _TABLESCALE_PE);
X if(percent_item < 70)
X use_cp(win,cpLOW);
X else if(percent_item < 90)
X use_cp(win,cpMED);
X else
X use_cp(win,cpHIGH);
X wprintw(win,"%3ld", percent_item);
X
X wmove(win,y, x + _TABLESCALE_SX);
X
X itmp = (width * percent_item) / 100;
X max = (width * max_item) / 100;
X while(-1) {
X itmp--; max--;
X if (max<1) {
X use_cp(win,cpHIGH);
X waddch(win,(chtype)'M');
X break;
X }
X if (itmp>-1)
X waddch(win,(chtype)'-');
X else
X waddch(win,(chtype)' ');
X }
X wclrtoeol(win);
X }
X}
X
X
X
X/*+-------------------------------------------------------------------------
X init_table()
X
X--------------------------------------------------------------------------*/
X
Xvoid
Xinit_table()
X
X{
X if (!(fpbase = (struct file *) malloc(sizeof(struct file)*v.v_file)))
X leave_text("cannot alloc memory for file table",1);
X if (!(ipbase = (struct inode *) malloc(sizeof(struct inode)*v.v_inode)))
X leave_text("cannot alloc memory for inode table",1);
X if (!(rgbase = (struct region *) malloc(sizeof(struct region)*v.v_region)))
X leave_text("cannot alloc memory for region table",1);
X if (!(callbase = (struct callo *) malloc(sizeof(struct callo)*v.v_call)))
X leave_text("cannot alloc memory for region table",1);
X}
X
X/*+-------------------------------------------------------------------------
X update_table(win,y,x,width)
X
X--------------------------------------------------------------------------*/
X
Xvoid
Xupdate_table(win,y,x,width)
XWINDOW *win;
Xint y;
Xint x;
Xregister width;
X{
X int num_files;
X int num_inodes;
X int num_regions;
X int num_callouts;
X int percent_files;
X int percent_inodes;
X int percent_locks;
X int percent_regions;
X int percent_callouts;
X
X num_files=files_in_use();
X num_inodes=inodes_in_use();
X num_regions=regions_in_use();
X num_callouts=callouts_in_use();
X kread((caddr_t)&flckinfo, flckinfoaddr, sizeof(struct flckinfo));
X num_callouts=callouts_in_use();
X
X percent_files=(num_files * 100 / v.v_file);
X percent_inodes=(num_inodes * 100 / v.v_inode);
X percent_regions=(num_regions * 100 / v.v_region);
X percent_locks=flckinfo.recs ? (flckinfo.reccnt * 100 / flckinfo.recs) : 0;
X percent_callouts=( num_callouts * 100 / v.v_call);
X if(percent_files > max_files) max_files=percent_files;
X if(percent_inodes > max_inodes) max_inodes=percent_inodes;
X if(percent_locks > max_locks) max_locks=percent_locks;
X if(percent_regions > max_regions) max_regions=percent_regions;
X if(percent_callouts > max_callouts) max_callouts=percent_callouts;
X
X update_table_line(win, y, x, width,
X num_files, max_files, v.v_file, percent_files);
X update_table_line(win, y + 1, x, width,
X num_inodes, max_inodes, v.v_inode, percent_inodes);
X update_table_line(win, y + 2, x, width,
X flckinfo.reccnt, max_locks, flckinfo.recs, percent_locks);
X update_table_line(win, y + 3, x, width,
X num_regions, max_regions, v.v_region, percent_regions);
X update_table_line(win, y + 4, x, width,
X num_callouts, max_callouts, v.v_call, percent_callouts);
X return;
X} /* end of update_table */
X
X
X/*+-------------------------------------------------------------------------
X draw_table_literals(win)
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XResource actual total %used ------------------------------------------------
X############ #### #### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X--------------------------------------------------------------------------*/
Xvoid
Xdraw_table_literals(win,y,x)
XWINDOW *win;
Xint y;
Xint x;
X{
Xint x2 = x;
X
X wmove(win,y,x);
X use_cp(win,cpBANNER);
X waddstr(win,"Resource actual total %used ");
X getyx(win,y,x2);
X while(x2 < COLS)
X waddch(win,(chtype)'-'),x2++;
X use_cp(win,cpLIT);
X wmove(win,y + 1,x);
X waddstr(win,"File table ");
X wmove(win,y + 2,x);
X waddstr(win,"Inode table");
X wmove(win,y + 3,x);
X waddstr(win,"Lock table ");
X wmove(win,y + 4,x);
X waddstr(win,"Region table ");
X wmove(win,y + 5,x);
X waddstr(win,"Callout table ");
X
X} /* end of draw_table_literals */
SHAR_EOF
chmod 0644 det_table.c ||
echo 'restore of det_table.c failed'
Wc_c="`wc -c < 'det_table.c'`"
test 9982 -eq "$Wc_c" ||
echo 'det_table.c: original size 9982, current size' "$Wc_c"
fi
# ============= det_wd.c ==============
if test -f 'det_wd.c' -a X"$1" != X"-c"; then
echo 'x - skipping det_wd.c (File already exists)'
else
echo 'x - extracting det_wd.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'det_wd.c' &&
X#ifdef SCO322
X/*+-------------------------------------------------------------------------
X det_wd.c - UNIX V/386 system monitor WD disk controller usage detail
X martin@hppcmart.grenoble.hp.com
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XDevice Av Q r+w/s Blks/s -- (% Utilization) ----------------------------------
X###### ##### ##### ##### #####################################################
X Defined functions:
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:02-07-1991-13:30-martin@hppcmart-creation */
X
X#define M_TERMINFO
X
X#include <curses.h>
X#include <panel.h>
X#include <string.h>
X#include <nlist.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <sys/ascii.h>
X#include <sys/var.h>
X#undef NGROUPS_MAX
X#undef NULL
X#include <sys/param.h>
X#include <sys/elog.h>
X
X#include "nlsym.h"
X#include "libkmem.h"
X#include "libmem.h"
X#include "libswap.h"
X#include "libnlsym.h"
X#include "u386mon.h"
X
Xextern struct var v;
X
X/* WD Driver */
X#define NCTLR 2
X#define NWD 2
X#define NWDTOTAL NCTLR*NWD
X/* Floppy drives */
X#define NDRIVES 4
X
Xstatic int max_util[NWDTOTAL+NDRIVES];
Xstatic struct iotime ia[NWDTOTAL+NDRIVES],ialast[NWDTOTAL+NDRIVES];
Xstatic time_t timelast,now;
X/*+----------------------------------------------------------------------------
X init_wd();
X Get initial drive stats.
X-----------------------------------------------------------------------------*/
Xvoid
Xinit_wd()
X{
X register i;
X
X (void)time(&timelast);
X for(i=0;i<(NWDTOTAL+NDRIVES);i++)
X max_util[i]=0;
X kread((caddr_t) ialast,wd1010statsaddr,sizeof(struct iotime) * NCTLR * NWD);
X kread((caddr_t) &ialast[NWDTOTAL],flstatsaddr,sizeof(struct iotime) * NDRIVES);
X}
X
X/*+----------------------------------------------------------------------------
X draw_wd_literals(win, y, x);
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
XDevice Jobs/s r+w/s Blks/s -- (% Utilization) ---------------------------------
X###### ##### ##### ##### ####################################################
X%wd##
X%fd##
X-----------------------------------------------------------------------------*/
X
Xvoid
Xdraw_wd_literals(win,y,x)
XWINDOW *win;
Xint y,x;
X
X{
X static char *header =
X"Device Jobs/s r+w/s Blks/s -- (% Utilization) ";
X int x2,ctlr,drive;
X
X wmove(win,y,x);
X use_cp(win,cpBANNER);
X waddstr(win,header);
X getyx(win,y,x2);
X while(x2++ <= COLS)
X waddch(win,(chtype)'-');
X use_cp(win,cpLIT);
X clear_area(win,getmaxy(win)-1,0,getmaxx(win));
X for(ctlr=0; ctlr<NCTLR; ctlr++) {
X for(drive=0; drive<NWD; drive++) {
X mvwprintw(win,(y+(ctlr*NWD)+drive+1),x,"wd%1d%1d",ctlr,drive);
X }
X }
X getyx(win,y,x2);
X for(drive=0; drive<NDRIVES; drive++)
X mvwprintw(win,(y+drive+1),x,"fd%1d",drive);
X}
X
X/*+----------------------------------------------------------------------------
X update_wd(win, y, x, width);
X
X00000000001111111111222222222233333333334444444444555555555566666666667777777777
X01234567890123456789012345678901234567890123456789012345678901234567890123456789
Xobs/s r+w/s Blks/s -- (% Utilization) ---------------------------------
X##### ##### ##### ####################################################
X-----------------------------------------------------------------------------*/
X#define _WD_AQ 0
X#define _WD_RW 6
X#define _WD_BK 12
X#define _WD_UT 19
X
Xvoid
Xupdate_wd(win,y,x,width)
XWINDOW *win;
Xint y,x;
Xint width;
X
X{
X register i;
X time_t elapsed_secs;
X int itmp;
X int percent_used;
X/*
X int max;
X*/
X
X (void)time(&now);
X elapsed_secs=now-timelast;
X kread((caddr_t) ia,wd1010statsaddr,sizeof(struct iotime) * NCTLR * NWD);
X kread((caddr_t) &ia[NWDTOTAL],flstatsaddr,
X sizeof(struct iotime) * NDRIVES);
X for(i=0; i<(NWDTOTAL+NDRIVES);i++) {
X use_cp(win,cpINFO);
X mvwprintw(win,y+i,_WD_AQ+x,"%5i",
X (ia[i].io_qc-ialast[i].io_qc));
X mvwprintw(win,y+i,_WD_RW+x,"%5i",
X (ia[i].io_cnt-ialast[i].io_cnt));
X itmp = ia[i].io_bcnt-ialast[i].io_bcnt;
X mvwprintw(win,y+i,_WD_BK+x,"%5i",
X (itmp > 99999) ? 99999 : itmp); /* protect transient overflow */
X wmove(win,y+i,_WD_UT+x);
X percent_used=(ia[i].io_act-ialast[i].io_act);
X wprintw(win,"%5i",(percent_used > 99999) ? 99999 : percent_used);
X/*
X max_util[i]=max_util[i]<percent_used ? percent_used : max_util[i];
X if(percent_used < 70)
X use_cp(win, cpLOW);
X else if (percent_used < 90)
X use_cp(win, cpMED);
X else
X use_cp(win, cpHIGH);
X
X itmp = (width * percent_used) / 100;
X max = (width * max_util[i]) / 100;
X while(-1) {
X itmp--;max--;
X if (max<1) {
X use_cp(win, cpHIGH);
X waddch(win, (chtype)'M');
X break;
X }
X if (itmp>-1)
X waddch(win, (chtype)'-');
X else
X waddch(win, (chtype)' ');
X }
X
X wclrtoeol(win);
X*/
X }
X memcpy((char *)ialast,(char *)ia,
X sizeof(struct iotime) * (NWDTOTAL + NDRIVES));
X timelast=now;
X}
X#endif
SHAR_EOF
chmod 0644 det_wd.c ||
echo 'restore of det_wd.c failed'
Wc_c="`wc -c < 'det_wd.c'`"
test 5037 -eq "$Wc_c" ||
echo 'det_wd.c: original size 5037, current size' "$Wc_c"
fi
# ============= disputil.c ==============
if test -f 'disputil.c' -a X"$1" != X"-c"; then
echo 'x - skipping disputil.c (File already exists)'
else
echo 'x - extracting disputil.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'disputil.c' &&
X/*+-------------------------------------------------------------------------
X disputil.c - u386mon display utilities
X
X Defined functions:
X clear_area(win,y,x,len)
X clear_area_char(win,y,x,len,fillchar)
X disp_info_int(win,label,fmt,value)
X disp_info_long(win,label,fmt,value)
X disp_msg(cp,msg)
X disp_static_int(win,label,fmt,value)
X disp_static_long(win,label,fmt,value)
X mkpanel(rows,cols,tly,tlx,userp)
X pflush()
X wperror(win,desc)
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
X/*:07-10-1990-19:06-root@n4hgf-redesign attributes/color pairs */
X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
X/*:06-17-1990-15:15-wht-creation */
X
X#include "config.h"
X#define M_TERMINFO
X#include <curses.h>
X#undef timeout
X#undef reg /* per nba@sysware.dk */
X#ifdef NATIVE_PANELS
X# include <panel.h>
X#else
X# include "libpanel.h"
X#endif
X#include <sys/types.h>
X#include "u386mon.h"
X
X#ifdef COLOR_PAIR
Xlong color_attr[] =
X{
X COLOR_PAIR(0),
X COLOR_PAIR(cpINFO),
X COLOR_PAIR(cpREVERSE),
X COLOR_PAIR(cpBANWARN),
X COLOR_PAIR(cpLOW) | A_BOLD,
X COLOR_PAIR(cpMED) | A_BOLD,
X COLOR_PAIR(cpHIGH),
X COLOR_PAIR(cpBANNER),
X COLOR_PAIR(cpLIT),
X 0
X};
X#endif
X
Xlong mono_attr[] =
X{
X 0, /* 0 */
X 0, /* cpINFO */
X A_REVERSE, /* cpREVERSE */
X A_BOLD, /* cpBANWARN */
X 0, /* cpLOW */
X A_UNDERLINE, /* cpMED */
X A_BLINK, /* cpHIGH */
X A_REVERSE, /* cpBANNER */
X A_DIM, /* cpLIT */
X};
X
Xextern WINDOW *wdet, *wscr;
X
X/*+-------------------------------------------------------------------------
X clear_area_char(win,y,x,len,fillchar)
X--------------------------------------------------------------------------*/
Xvoid
Xclear_area_char(win,y,x,len,fillchar)
XWINDOW *win;
Xint y;
Xint x;
Xint len;
Xu_char fillchar;
X{
X wmove(win,y,x);
X while(len-- > 0)
X waddch(win,(chtype)fillchar);
X wmove(win,y,x);
X
X} /* end of clear_area_char */
X
X/*+-------------------------------------------------------------------------
X clear_area(win,y,x,len)
X--------------------------------------------------------------------------*/
Xvoid
Xclear_area(win,y,x,len)
XWINDOW *win;
Xint y;
Xint x;
Xint len;
X{
X clear_area_char(win,y,x,len,' ');
X} /* end of clear_area_char */
X
X/*+-------------------------------------------------------------------------
X pflush() - do update_panels() and doupdate()
X--------------------------------------------------------------------------*/
Xvoid
Xpflush()
X{
X update_panels();
X curs_set(0);
X doupdate();
X curs_set(1);
X} /* end of pflush */
X
X/*+-------------------------------------------------------------------------
X wperror(win,desc)
X--------------------------------------------------------------------------*/
Xvoid
Xwperror(win,desc)
XWINDOW *win;
Xchar *desc;
X{
Xextern int errno;
Xextern int sys_nerr;
Xextern char *sys_errlist[];
X
X waddstr(win,desc);
X waddstr(win,": ");
X if(errno < sys_nerr)
X waddstr(win,sys_errlist[errno]);
X else
X wprintw(win,"error %u",errno);
X
X} /* end of wperror */
X
X/*+-------------------------------------------------------------------------
X mkpanel(rows,cols,tly,tlx,userp) - alloc win and pan and associate them
X--------------------------------------------------------------------------*/
XPANEL *
Xmkpanel(rows,cols,tly,tlx,userp)
Xint rows;
Xint cols;
Xint tly;
Xint tlx;
Xchar *userp;
X{
XWINDOW *win = newwin(rows,cols,tly,tlx);
XPANEL *pan;
X
X if(!win)
X return((PANEL *)0);
X if(pan = new_panel(win))
X {
X set_panel_userptr(pan,userp);
X return(pan);
X }
X delwin(win);
X return((PANEL *)0);
X} /* end of mkpanel */
X
X/*+-------------------------------------------------------------------------
X disp_info_long(win,label,fmt,value)
X--------------------------------------------------------------------------*/
Xvoid
Xdisp_info_long(win,label,fmt,value)
XWINDOW *win;
Xchar *label;
Xchar *fmt;
Xlong value;
X{
X use_cp(win,cpLIT);
X waddstr(win,label);
X use_cp(win,cpINFO);
X wprintw(win,fmt,value);
X} /* end of disp_info_long */
X
X/*+-------------------------------------------------------------------------
X disp_info_int(win,label,fmt,value)
X--------------------------------------------------------------------------*/
Xvoid
Xdisp_info_int(win,label,fmt,value)
XWINDOW *win;
Xchar *label;
Xchar *fmt;
Xint value;
X{
X use_cp(win,cpLIT);
X waddstr(win,label);
X use_cp(win,cpINFO);
X wprintw(win,fmt,value);
X} /* end of disp_info_int */
X
X/*+-------------------------------------------------------------------------
X disp_static_long(win,label,fmt,value)
X--------------------------------------------------------------------------*/
Xvoid
Xdisp_static_long(win,label,fmt,value)
XWINDOW *win;
Xchar *label;
Xchar *fmt;
Xlong value;
X{
X use_cp(win,cpLIT);
X waddstr(win,label);
X wprintw(win,fmt,value);
X} /* end of disp_static_long */
X
X/*+-------------------------------------------------------------------------
X disp_static_int(win,label,fmt,value)
X--------------------------------------------------------------------------*/
Xvoid
Xdisp_static_int(win,label,fmt,value)
XWINDOW *win;
Xchar *label;
Xchar *fmt;
Xint value;
X{
X use_cp(win,cpLIT);
X waddstr(win,label);
X wprintw(win,fmt,value);
X} /* end of disp_static_int */
X
X/*+-------------------------------------------------------------------------
X disp_msg(cp,msg)
X--------------------------------------------------------------------------*/
Xvoid
Xdisp_msg(cp,msg)
Xchtype cp;
Xchar *msg;
X{
Xextern WINDOW *wscr;
Xint y;
Xregister int x;
X
X wmove(wscr,MSG_TLY,0);
X use_cp(wscr,cp);
X waddstr(wscr,msg);
X getyx(wscr,y,x);
X while(x < getmaxx(wscr))
X waddch(wscr,(chtype)' '),x++;
X} /* end of disp_msg */
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of disputil.c */
SHAR_EOF
chmod 0644 disputil.c ||
echo 'restore of disputil.c failed'
Wc_c="`wc -c < 'disputil.c'`"
test 6085 -eq "$Wc_c" ||
echo 'disputil.c: original size 6085, current size' "$Wc_c"
fi
# ============= kludge.c ==============
if test -f 'kludge.c' -a X"$1" != X"-c"; then
echo 'x - skipping kludge.c (File already exists)'
else
echo 'x - extracting kludge.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kludge.c' &&
X
X/*+-------------------------------------------------------------------------
X kludge.c - u386mon KLUDGE
X
XWe want S5R3 curses #define PERFORMANCE because it has several macro
Xreplacements for functions, but one of the macros has a bug in it. The
Xmacro has_colors() refers to an undefined 'max_pairs' ... in the interest
Xof speed, we do the has_colors() call here and get the function
Xhas_colors() without the bogus extern reference.
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
X/*:08-03-1990-05:04-wht-creation */
X
X#define M_TERMINFO
X#include <curses.h>
X
X/*+-------------------------------------------------------------------------
X has_colors_kludge() - don't ask
X--------------------------------------------------------------------------*/
X#if defined(COLOR_PAIR)
Xvoid
Xhas_colors_kludge()
X{
Xextern int color_avail;
X color_avail = has_colors();
X} /* end of has_colors_kludge */
X#endif
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of kludge.c */
SHAR_EOF
chmod 0644 kludge.c ||
echo 'restore of kludge.c failed'
Wc_c="`wc -c < 'kludge.c'`"
test 1194 -eq "$Wc_c" ||
echo 'kludge.c: original size 1194, current size' "$Wc_c"
fi
# ============= libkmem.c ==============
if test -f 'libkmem.c' -a X"$1" != X"-c"; then
echo 'x - skipping libkmem.c (File already exists)'
else
echo 'x - extracting libkmem.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'libkmem.c' &&
X/*LINTLIBRARY*/
X/*+-------------------------------------------------------------------------
X libkmem.c -- /dev/kmem routines for SCO UNIX/386 (maybe other *NIX)
X ...!{gatech,emory}!n4hgf!wht
X
X Defined functions:
X kinit(write_needed)
X kread(caddr,kaddr,len)
X kwrite(kaddr,caddr,len)
X
X routines were originally written by Mike "Ford" Ditto: kudos!!!
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
X/*:08-01-1990-19:33-jdc@dell.com-add more error text */
X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
X/*:12-07-1988-22:06-wht-put in test for initialized fdkmem */
X/*:10-27-1988-22:44-wht-creation of file */
X
X#include <sys/types.h>
X#include <sys/errno.h>
X#include <fcntl.h>
X#include "libkmem.h"
X
Xvoid leave_text();
X
Xextern int errno;
X
Xstatic int fdkmem = -2;
Xdaddr_t lseek();
X
X/*+-------------------------------------------------------------------------
X kinit(write_needed)
X--------------------------------------------------------------------------*/
Xvoid
Xkinit(write_needed)
Xint write_needed;
X{
X if(fdkmem >= 0)
X return;
X if((fdkmem=open("/dev/kmem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
X {
X if (write_needed)
X {
X leave_text("can't open /dev/kmem for read/write access",255);
X }
X else
X {
X leave_text("can't open /dev/kmem for read access",255);
X }
X }
X
X} /* end of kinit */
X
X/*+-------------------------------------------------------------------------
X kread(caddr,kaddr,len)
X--------------------------------------------------------------------------*/
Xvoid
Xkread(caddr,kaddr,len)
Xcaddr_t caddr;
Xdaddr_t kaddr;
Xint len;
X{
Xchar s80[80];
Xextern daddr_t myreadlen;
Xextern int myreadcnt;
X
X#if defined(M_I286)
X kaddr &= 0xFFFFL;
X#endif
X#if defined(mips)
X kaddr &= 0x7FFFFFFFL;
X#endif
X
X if(fdkmem == -2)
X leave_text("kinit() not called",1);
X
X if(lseek(fdkmem,kaddr,0) == -1L)
X {
X (void)sprintf(s80,"kmem read seek error addr %08lx",kaddr);
X leave_text(s80,255);
X }
X
X if(read(fdkmem,caddr,len) != len)
X {
X (void)sprintf(s80,"kmem read error len %d addr %08lx",len,kaddr);
X leave_text(s80,255);
X }
X myreadlen += len;
X myreadcnt++;
X} /* end of kread */
X
X/*+-------------------------------------------------------------------------
X kwrite(kaddr,caddr,len)
X--------------------------------------------------------------------------*/
X#ifdef KWRITE_NEEDED
Xvoid
Xkwrite(kaddr,caddr,len)
Xdaddr_t kaddr;
Xcaddr_t caddr;
Xint len;
X{
Xchar s80[80];
X
X#if defined(M_I286)
X kaddr &= 0xFFFFL;
X#endif
X
X if(fdkmem == -2)
X leave_text("kinit() not called",1);
X
X if(lseek(fdkmem,kaddr,0) == -1L)
X {
X (void)sprintf(s80,
X "/dev/kmem write seek error addr %08lx",kaddr);
X leave_text(s80,255);
X }
X if(write(fdkmem,caddr,len) != len)
X {
X (void)sprintf(s80,
X "/dev/kmem write error addr %08lx len %08lx",kaddr,len);
X leave_text(s80,255);
X }
X} /* end of kwrite */
X#endif
X
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
chmod 0644 libkmem.c ||
echo 'restore of libkmem.c failed'
Wc_c="`wc -c < 'libkmem.c'`"
test 3407 -eq "$Wc_c" ||
echo 'libkmem.c: original size 3407, current size' "$Wc_c"
fi
# ============= libmem.c ==============
if test -f 'libmem.c' -a X"$1" != X"-c"; then
echo 'x - skipping libmem.c (File already exists)'
else
echo 'x - extracting libmem.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'libmem.c' &&
X/*LINTLIBRARY*/
X/*+-------------------------------------------------------------------------
X libmem.c -- /dev/mem routines for SCO UNIX/386 (maybe other *NIX)
X ...!{gatech,emory}!n4hgf!wht
X
X Defined functions:
X minit(write_needed)
X mread(caddr,maddr,len)
X mwrite(maddr,caddr,len)
X
X routines were originally written by Mike "Ford" Ditto: kudos!!!
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-01-1991-23:34-wht@n4hgf-release 3.40 source control point */
X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
X/*:12-07-1988-22:06-wht-put in test for initialized fdmem */
X/*:10-27-1988-22:44-wht-creation of file */
X
X#include <sys/types.h>
X#include <fcntl.h>
X#include "libmem.h"
X
Xvoid leave_text();
X
Xextern int errno;
X
Xstatic int fdmem = -2;
Xdaddr_t lseek();
X
X/*+-------------------------------------------------------------------------
X minit(write_needed)
X--------------------------------------------------------------------------*/
Xvoid
Xminit(write_needed)
Xint write_needed;
X{
X if(fdmem >= 0)
X return;
X if((fdmem=open("/dev/mem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
X leave_text("can't open /dev/mem",255);
X
X} /* end of minit */
X
X/*+-------------------------------------------------------------------------
X mread(caddr,maddr,len)
X--------------------------------------------------------------------------*/
Xvoid
Xmread(caddr,maddr,len)
Xcaddr_t caddr;
Xdaddr_t maddr;
Xint len;
X{
Xchar s80[80];
Xextern daddr_t myreadlen;
Xextern int myreadcnt;
X
X#if defined(M_I286)
X maddr &= 0xFFFFL;
X#endif
X
X if(fdmem == -2)
X leave_text("minit() not called",1);
X
X if(lseek(fdmem,maddr,0) == -1L)
X {
X (void)sprintf(s80,"mem seek err (%08lx)",maddr);
X leave_text(s80,1);
X }
X
X if(read(fdmem,caddr,len) != len)
X {
X (void)sprintf(s80,
X "mem read errno %d len %d addr %08lx",errno,len,maddr);
X leave_text(s80,1);
X }
X myreadlen += len;
X myreadcnt++;
X} /* end of mread */
X
X/*+-------------------------------------------------------------------------
X mwrite(maddr,caddr,len)
X--------------------------------------------------------------------------*/
X#ifdef MWRITE_NEEDED
Xvoid
Xmwrite(maddr,caddr,len)
Xdaddr_t maddr;
Xcaddr_t caddr;
Xint len;
X{
Xchar s80[80];
X
X#if defined(M_I286)
X maddr &= 0xFFFFL;
X#endif
X
X if(fdmem == -2)
X leave_text("minit() not called",1);
X
X if(lseek(fdkmem,kaddr,0) == -1L)
X {
X (void)sprintf(s80,
X "/dev/kmem seek error addr %08lx",kaddr);
X leave_text(s80,255);
X }
X if(write(fdkmem,caddr,len) != len)
X {
X (void)sprintf(s80,
X "/dev/kmem write error addr %08lx len %08lx",kaddr,len);
X leave_text(s80,255);
X }
X} /* end of mwrite */
X#endif /* MWRITE_NEEDED */
X
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
chmod 0644 libmem.c ||
echo 'restore of libmem.c failed'
Wc_c="`wc -c < 'libmem.c'`"
test 3147 -eq "$Wc_c" ||
echo 'libmem.c: original size 3147, current size' "$Wc_c"
fi
true || echo 'restore of libpanel.c failed'
echo End of part 5, continue with part 6
exit 0
exit 0 # Just in case...
--
Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD UUCP: uunet!sparky!kent
Phone: (402) 291-8300 FAX: (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.