#define clear(x) ((int)x&0x7fffffff)
char *fcore
= "/dev/kmem";
char *fnlist
= "/vmunix";
while (argc
> 0 && **argv
== '-') {
sscanf( *argv
++, "%x", &ubase
);
if ((fc
= open(fcore
, 0)) < 0) {
printf("Can't find %s\n", fcore
);
register struct setup
*sp
;
for (sp
=setup
; sp
->value
; sp
++)
if (setup
[SINODE
].type
== -1) {
register struct inode
*ip
;
struct inode xinode
[NINODE
];
lseek(fc
, (long)setup
[SINODE
].value
, 0);
read(fc
, xinode
, sizeof(xinode
));
for (ip
= xinode
; ip
< &xinode
[NINODE
]; ip
++)
printf("%d active xinodes\n", nin
);
printf(" LOC FLAGS CNT DEVICE INO MODE NLK UID SIZE/DEV\n");
loc
= setup
[SINODE
].value
;
for (ip
= xinode
; ip
< &xinode
[NINODE
]; ip
++, loc
+= sizeof(xinode
[0])) {
putf(ip
->i_flag
&ILOCK
, 'L');
putf(ip
->i_flag
&IUPD
, 'U');
putf(ip
->i_flag
&IACC
, 'A');
putf(ip
->i_flag
&IMOUNT
, 'M');
putf(ip
->i_flag
&IWANT
, 'W');
putf(ip
->i_flag
&ITEXT
, 'T');
printf("%4d", ip
->i_count
&0377);
printf("%4d,%3d", major(ip
->i_dev
), minor(ip
->i_dev
));
printf("%5l", ip
->i_number
);
printf("%6x", ip
->i_mode
& 0xffff);
printf("%4d", ip
->i_nlink
);
printf("%4d", ip
->i_uid
);
if ((ip
->i_mode
&IFMT
)==IFBLK
|| (ip
->i_mode
&IFMT
)==IFCHR
)
printf("%6d,%3d", major(ip
->i_un
.i_rdev
), minor(ip
->i_un
.i_rdev
));
printf("%10ld", ip
->i_size
);
register struct text
*xp
;
struct text xtext
[NTEXT
];
lseek(fc
, (long)setup
[STEXT
].value
, 0);
read(fc
, xtext
, sizeof(xtext
));
for (xp
= xtext
; xp
< &xtext
[NTEXT
]; xp
++)
printf("%d text segments\n", ntx
);
printf(" LOC FLAGS DADDR CADDR RSS SIZE IPTR CNT CCNT\n");
loc
= setup
[STEXT
].value
;
for (xp
= xtext
; xp
< &xtext
[NTEXT
]; xp
++, loc
+=sizeof(xtext
[0])) {
putf(xp
->x_flag
&XPAGI
, 'P');
putf(xp
->x_flag
&XTRC
, 'T');
putf(xp
->x_flag
&XWRIT
, 'W');
putf(xp
->x_flag
&XLOAD
, 'L');
putf(xp
->x_flag
&XLOCK
, 'K');
putf(xp
->x_flag
&XWANT
, 'w');
printf("%5x", xp
->x_daddr
);
printf("%11x", xp
->x_caddr
);
printf("%5d", xp
->x_rssize
);
printf("%5d", xp
->x_size
);
printf("%10.1x", xp
->x_iptr
);
printf("%5d", xp
->x_count
&0377);
printf("%4d", xp
->x_ccount
);
struct proc xproc
[NPROC
];
register struct proc
*pp
;
lseek(fc
, (long)setup
[SPROC
].value
, 0);
read(fc
, xproc
, sizeof(xproc
));
for (pp
=xproc
; pp
< &xproc
[NPROC
]; pp
++)
printf("%d processes\n", np
);
printf(" LOC S F POIP PRI SIG UID SLP TIM CPU NI PGRP PID PPID ADDR RSS SRSS SIZE WCHAN LINK TEXTP CLKT\n");
for (loc
=setup
[SPROC
].value
,pp
=xproc
; pp
<&xproc
[NPROC
]; pp
++,loc
+=sizeof(xproc
[0])) {
if (pp
->p_stat
==0 && allflg
==0)
printf(" %2d", pp
->p_stat
);
printf(" %4x", pp
->p_flag
& 0xffff);
printf(" %4d", pp
->p_poip
);
printf(" %3d", pp
->p_pri
);
printf(" %4x", pp
->p_sig
);
printf(" %4d", pp
->p_uid
);
printf(" %3d", pp
->p_slptime
);
printf(" %3d", pp
->p_time
);
printf(" %4d", pp
->p_cpu
&0377);
printf(" %3d", pp
->p_nice
);
printf(" %6d", pp
->p_pgrp
);
printf(" %6d", pp
->p_pid
);
printf(" %6d", pp
->p_ppid
);
printf(" %8x", pp
->p_addr
[0]);
printf(" %4x", pp
->p_rssize
);
printf(" %4x", pp
->p_swrss
);
printf(" %5x", pp
->p_dsize
+pp
->p_ssize
);
printf(" %7x", clear(pp
->p_wchan
));
printf(" %7x", clear(pp
->p_link
));
printf(" %7x", clear(pp
->p_textp
));
printf(" %u", pp
->p_clktim
);
lseek(fc
, (long)setup
[SKL
].value
, 0);
read(fc
, dz_tty
, sizeof(dz_tty
[0]));
mesg
= " RAW CAN OUT MODE ADDR DEL COL STATE PGRP\n";
if (setup
[SNDZ
].type
== -1)
lseek(fc
, (long)setup
[SNDZ
].value
, 0);
read(fc
, &ndz
, sizeof(ndz
));
printf("%d dz lines\n", ndz
);
lseek(fc
, (long)setup
[SDZ
].value
, 0);
read(fc
, dz_tty
, sizeof(dz_tty
));
for (tp
= dz_tty
; tp
< &dz_tty
[ndz
]; tp
++)
printf("%4d", tp
->t_rawq
.c_cc
);
printf("%4d", tp
->t_canq
.c_cc
);
printf("%4d", tp
->t_outq
.c_cc
);
printf("%8.1o", tp
->t_flags
);
printf(" %8.1x", tp
->t_addr
);
printf("%3d", tp
->t_delct
);
printf("%4d ", tp
->t_col
);
putf(tp
->t_state
&TIMEOUT
, 'T');
putf(tp
->t_state
&WOPEN
, 'W');
putf(tp
->t_state
&ISOPEN
, 'O');
putf(tp
->t_state
&CARR_ON
, 'C');
putf(tp
->t_state
&BUSY
, 'B');
putf(tp
->t_state
&ASLEEP
, 'A');
putf(tp
->t_state
&XCLUDE
, 'X');
putf(tp->t_state&HUPCLS, 'H');
printf("%6d", tp
->t_pgrp
);
/* This wins only if PAGSIZ > sizeof (struct user) */
lseek(fc
, ubase
* NBPG
, 0);
printf("rsav %.1o %.1o\n", U.u_rsav[0], U.u_rsav[1]);
printf("segflg, error %d, %d\n", U
.u_segflg
, U
.u_error
);
printf("uids %d,%d,%d,%d\n", U
.u_uid
,U
.u_gid
,U
.u_ruid
,U
.u_rgid
);
printf("procp %.1x\n", U
.u_procp
);
printf("base, count, offset %.1x %.1x %ld\n", U
.u_base
,
printf("cdir %.1x\n", U
.u_cdir
);
printf("dbuf %.14s\n", U
.u_dbuf
);
printf("dirp %.1x\n", U
.u_dirp
);
printf("dent %d %.14s\n", U
.u_dent
.d_ino
, U
.u_dent
.d_name
);
printf("pdir %.1o\n", U
.u_pdir
);
printf("%8.1o", U.u_uisa[i]);
printf("%8.1o", U.u_uisd[i]);
printf("%8.1o", U.u_uisa[i]);
printf("%8.1o", U.u_uisd[i]);
printf("%9.1x", U
.u_ofile
[i
]);
for (i
=10; i
<NOFILE
; i
++)
printf("%9.1x", U
.u_ofile
[i
]);
printf(" %.1x", U
.u_arg
[i
]);
printf("\nsizes %.1x %.1x %.1x\n", U
.u_tsize
, U
.u_dsize
, U
.u_ssize
);
printf("sep %d\n", U
.u_sep
);
printf("qsav %.1x %.1x\n", U
.u_qsav
[0], U
.u_qsav
[1]);
printf("ssav %.1x %.1x\n", U
.u_ssav
[0], U
.u_ssav
[1]);
printf(" %.1x", U
.u_signal
[i
]);
printf("\ntimes %ld %ld\n", U
.u_utime
/60, U
.u_stime
/60);
printf("ctimes %ld %ld\n", U
.u_cutime
/60, U
.u_cstime
/60);
printf("ar0 %.1x\n", U
.u_ar0
);
printf(" %.1o", U.u_prof[i]);
printf("\nintflg %d\n", U
.u_intflg
);
printf("ttyp %.1x\n", U
.u_ttyp
);
printf("ttydev %d,%d\n", major(U
.u_ttyd
), minor(U
.u_ttyd
));
printf("comm %.14s\n", U
.u_comm
);
printf("%x ", 0140000+2*i);
struct file xfile
[NFILE
];
register struct file
*fp
;
lseek(fc
, (long)setup
[SFIL
].value
, 0);
read(fc
, xfile
, sizeof(xfile
));
for (fp
=xfile
; fp
< &xfile
[NFILE
]; fp
++)
printf("%d open files\n", nf
);
printf(" LOC FLG CNT INO OFFS\n");
for (fp
=xfile
,loc
=setup
[SFIL
].value
; fp
< &xfile
[NFILE
]; fp
++,loc
+=sizeof(xfile
[0])) {
putf(fp
->f_flag
&FREAD
, 'R');
putf(fp
->f_flag
&FWRITE
, 'W');
putf(fp
->f_flag
&FPIPE
, 'P');
printf("%4d", mask(fp
->f_count
));
printf("%9.1x", fp
->f_inode
);
printf(" %ld\n", fp
->f_un
.f_offset
);
register struct chan *cp;
register struct mach *mp;
register struct line *lp;
lseek(fc, (long)setup[SMPXC].value, 0);
read(fc, chan, sizeof(chan));
lseek(fc, (long)setup[SMPXM].value, 0);
read(fc, mach, sizeof(mach));
lseek(fc, (long)setup[SMPXB1].value, 0);
read(fc, &mptbc, sizeof(mptbc));
lseek(fc, (long)setup[SMPXB2].value, 0);
read(fc, mptbuf, sizeof(mptbuf));
lseek(fc, (long)setup[SMPSM].value, 0);
read(fc, line, sizeof(line));
for(cp=chan; cp < &chan[C]; cp++)
printf("%d mpx channels\n", nc);
printf(" LOC FLG M C DEST\n");
for(cp=chan,loc=setup[SMPXC].value; cp < &chan[C]; cp++,loc=+sizeof(chan[0])) {
if((cp->cflag&ALLOC) == 0)
putf(cp->cflag&BLOCK, 'B');
putf(cp->cflag&WWAIT, 'B');
putf(cp->cflag&CRUN, 'R');
putf(cp->cflag&RWAIT, 'W');
putf(cp->cflag&ALLOC, 'A');
putf(cp->cflag&DIS, 'D');
putf(cp->cflag&DLY, 'D');
printf(" %1d %3d ", mask(cp->m), mask(cp->c));
printf("%7.1o ", cp->dest);
printf("%d mpx machines\n", M);
printf(" LOC FLG RCH RCN XCH XCN\n");
for(mp=mach,loc=setup[SMPXM].value; mp < &mach[M]; mp++,loc=+sizeof(mach[0])) {
putf(mp->mflag&RNEXT, 'N');
putf(mp->mflag&MRUN, 'R');
putf(mp->mflag&XNEXT, 'N');
printf(" %3d", mask(mp->rchan));
printf(" %3d", mask(mp->rcount));
printf(" %3d", mask(mp->xchan));
printf(" %3d", mask(mp->xcount));
for(nc=0; nc<128; nc++) {
printf(" %d-%o", nc, cp);
printf("%d mpx lines\n", M-1);
printf(" LOC RSQ XSQ AKF XMF STE TIM SUM\n");
for(lp=line,loc=setup[SMPSM].value; lp < &line[M-1]; lp++, loc =+ sizeof(line[0])) {
printf("%3o ", lp->rseq);
printf("%3o ", lp->xseq);
printf("%3o ", lp->ackf);
printf("%3o ", lp->xflag);
printf("%3d ", lp->state);
printf("%3d ", lp->time);
printf("%7o\n", lp->sum);
printf("last characters recieved\n");
printf("%o", mask(mptbuf[loc]));