[mod.computers.masscomp] Top for the Masscomp part 1 of 3

sob@soma.UUCP (Stan Barber) (09/30/86)

Recently, my friend, Bill, released the latest version of his "top" program
to display the most active processes on a Vax, Pyramid or Sun computer. I
attempted to make it work on a Masscomp. Here is the results of that 
work. Please let me know about any fixes. I will forward them to Bill as
well.
Have fun.
Stan Barber



#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	boolean.h
#	layout.h
#	screen.h
#	top.h
#	top.local.h
#	masscomp.h
#	bzero.c
# This archive created: Mon Sep 29 16:14:10 1986
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'boolean.h'" '(125 characters)'
if test -f 'boolean.h'
then
	echo shar: "will not over-write existing file 'boolean.h'"
else
cat << \SHAR_EOF > 'boolean.h'
/* My favorite names for boolean values */
#define  No	0
#define  Yes	1
#define  Maybe	2		/* tri-state boolean, actually */

SHAR_EOF
fi
echo shar: "extracting 'layout.h'" '(845 characters)'
if test -f 'layout.h'
then
	echo shar: "will not over-write existing file 'layout.h'"
else
cat << \SHAR_EOF > 'layout.h'
/*
 *  Top - a top users display for Berkeley Unix
 *
 *  This file defines the locations on tne screen for various parts of the
 *  display.  These definitions are used by the routines in "display.c" for
 *  cursor addressing.
 */

#define  x_lastpid	10
#define  y_lastpid	0
#define  x_loadave	33
#define  y_loadave	0
#define  x_procstate	0
#define  y_procstate	1
#define  x_brkdn	14
#define  y_brkdn	1
#define  x_realmem	8
#define  x_virtmem	28
#define  x_free		53
#define  y_mem		3
#define  x_header	0
#define  y_header	5
#define  x_idlecursor	0
#define  y_idlecursor	4
#define  y_procs	6
#define  x_p_pid	0
#define  x_p_user	6
#define  x_p_pri	15
#define  x_p_nice	20
#define  x_p_size	25
#define  x_p_res	31
#define  x_p_state	37
#define  x_p_time	43
#define  x_p_wcpu	50
#define  x_p_cpu	57
#define  x_p_command	64

#define  y_cpustates	2
SHAR_EOF
fi
echo shar: "extracting 'screen.h'" '(874 characters)'
if test -f 'screen.h'
then
	echo shar: "will not over-write existing file 'screen.h'"
else
cat << \SHAR_EOF > 'screen.h'
/*
 *  top - a top users display for Unix 4.2
 *
 *  This file contains all the definitions necessary to use the hand-written
 *  screen package in "screen.c"
 */

#define TCputs(str)	tputs(str, 1, putstdout)
#define putcap(str)	((str) != NULL ? TCputs(str) : 0)
#define Move_to(x, y)	TCputs(tgoto(cursor_motion, x, y))

extern char ch_erase;		/* set to the user's erase character */
extern char ch_kill;		/* set to the user's kill  character */
extern char smart_terminal;     /* set if the terminal has sufficient termcap
				   capabilities for normal operation */

/* These aresome termcap strings for use outside of "screen.c" */
extern char *cursor_motion;
extern char *clear_line;

/* rows and columns on the screen according to termcap */
extern int  screen_length;
extern int  screen_width;

/* a function that puts a single character on stdout */
int putstdout();
SHAR_EOF
fi
echo shar: "extracting 'top.h'" '(794 characters)'
if test -f 'top.h'
then
	echo shar: "will not over-write existing file 'top.h'"
else
cat << \SHAR_EOF > 'top.h'
/*
 *  Top - a top users display for Berkeley Unix
 *
 *  General (global) definitions
 */

/* Number of lines of header information on the standard screen */
#define Header_lines	6

/* Number of columns needed for display */
#define Display_width	80

/* Log base 2 of 1024 is 10 (2^10 == 1024) */
#define LOG1024		10

/* Convert clicks (kernel pages) to kbytes ... */
/* If there is no PGSHIFT defined, assume it is 11 */
/* Is this needed for compatability with some old flavor of 4.2 or 4.1? */
#ifndef PGSHIFT
#define pagetok(size)	((size) << 1)
#else
#if PGSHIFT>10
#define pagetok(size)	((size) << (PGSHIFT - LOG1024))
#else
#define pagetok(size)	((size) >> (LOG1024 - PGSHIFT))
#endif
#endif

extern double logcpu;

double log();
double exp();

extern char (* screenbuf)[Display_width];
SHAR_EOF
fi
echo shar: "extracting 'top.local.h'" '(1261 characters)'
if test -f 'top.local.h'
then
	echo shar: "will not over-write existing file 'top.local.h'"
else
cat << \SHAR_EOF > 'top.local.h'
/*
 *  Top - a top users display for Berkeley Unix
 *
 *  Definitions for things that might vary between installations.
 */

/*
 *  "Table_size" defines the size of the hash tables used to map uid to
 *  username.  The number of users in /etc/passwd CANNOT be greater than
 *  this number.  If the error message "table overflow: too many users"
 *  is printed by top, then "Table_size" needs to be increased.  Things will
 *  work best if the number is a prime number that is about twice the number
 *  of lines in /etc/passwd.
 */
#ifndef Table_size
#define Table_size	421
#endif

/*
 *  "Nominal_TOPN" is used as the default TOPN when Default_TOPN is Infinity
 *  and the output is a dumb terminal.  If we didn't do this, then
 *  installations who use a default TOPN of Infinity will get every
 *  process in the system when running top on a dumb terminal (or redirected
 *  to a file).  Note that Nominal_TOPN is a default:  it can still be
 *  overridden on the command line, even with the value "infinity".
 */
#ifndef Nominal_TOPN
#define Nominal_TOPN	18
#endif

/*
 *  File name for the system image and the memory devices.
 */
#ifdef MASSCOMP
#define VMUNIX "/unix"
#else
#define VMUNIX	"/vmunix"
#endif
#define KMEM	"/dev/kmem"
#define MEM	"/dev/mem"
SHAR_EOF
fi
echo shar: "extracting 'masscomp.h'" '(407 characters)'
if test -f 'masscomp.h'
then
	echo shar: "will not over-write existing file 'masscomp.h'"
else
cat << \SHAR_EOF > 'masscomp.h'
/* include file to define a MASSCOMP */
/* by Stan Barber, Baylor College of Medicine */
#if defined(mc300) || defined(mc500) || defined(mc700)
#define MASSCOMP
#undef DIRSIZ
#define DIRSIZ 14
#define CPUSTATES 4
#define MAX_PROC 300	/* jack this up if you run more than 300 processes */
#include <sys/minmax.h>
#include <sys/pte.h>
#include <sys/cmap.h>
#include <sys/text.h>
#include <sys/cinfo.h>
#endif
SHAR_EOF
fi
echo shar: "extracting 'bzero.c'" '(789 characters)'
if test -f 'bzero.c'
then
	echo shar: "will not over-write existing file 'bzero.c'"
else
cat << \SHAR_EOF > 'bzero.c'
/*
 *  Fast, sleazy, and ugly zero function.
 *
 *  Note that this will only work on a VAX, but it is real easy to write a
 *  similar function for whatever machine you may need.  If nothing else,
 *  just a simple loop in C will suffice.
 *
 *  Dave Johnson, Rice University.
 *
 *  Enhanced by William LeFebvre of Rice University to handle zeroing more
 *  than 64K.
 */

# define   K	1024

/*
 *  bzero(memory, amount) - set "amount" bytes starting at "memory" to the
 *			    value 0.
 */

bzero(memory, amount)

char *memory;
int  amount;

{
    while (amount >= 64*K)
    {
	_bzero64(memory, 64*K-1);
	memory += 64*K-1;
	amount -= 64*K-1;
    }
    _bzero64(memory, amount);
}

_bzero64(memory, amount)

char *memory;
int  amount;

{
    asm("	movc5	$0, (sp), $0, 8(ap), *4(ap)");
}
SHAR_EOF
fi
exit 0
#	End of shell archive