char *fcore
= "/dev/mem";
while (--argc
&& **++argv
== '-') {
if ((fc
= open(fcore
, 0)) < 0) {
printf("Can't find %s\n", fcore
);
if (setup
[SINODE
].type
== -1) {
register struct inode
*ip
;
struct inode xinode
[NINODE
];
lseek(fc
, (long)setup
[SINODE
].value
, 0);
read(fc
, (char *)xinode
, sizeof(xinode
));
for (ip
= xinode
; ip
< &xinode
[NINODE
]; ip
++)
printf("%d active inodes\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("%3d,%3d", major(ip
->i_dev
), minor(ip
->i_dev
));
printf("%6l", ip
->i_number
);
printf("%7o", ip
->i_mode
);
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
, (char *)xtext
, sizeof(xtext
));
for (xp
= xtext
; xp
< &xtext
[NTEXT
]; xp
++)
printf("%d text segments\n", ntx
);
printf(" LOC FLAGS DADDR CADDR SIZE IPTR CNT CCNT\n");
loc
= setup
[STEXT
].value
;
for (xp
= xtext
; xp
< &xtext
[NTEXT
]; xp
++, loc
+=sizeof(xtext
[0])) {
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("%5u", xp
->x_daddr
);
printf("%7.1o", xp
->x_caddr
);
printf("%5d", xp
->x_size
);
printf("%8.1o", xp
->x_iptr
);
printf("%4d", 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
, (char *)xproc
, sizeof(xproc
));
for (pp
=xproc
; pp
< &xproc
[NPROC
]; pp
++)
printf("%d processes\n", np
);
printf(" LOC S F PRI SIGNAL UID TIM CPU NI PGRP PID PPID ADDR 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("%3o", pp
->p_flag
);
printf("%5d", pp
->p_pri
);
printf("%7o", pp
->p_sig
);
printf("%4d", pp
->p_uid
&0377);
printf("%4d", pp
->p_time
&0377);
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("%5o", pp
->p_addr
);
printf("%5o", pp
->p_size
);
printf("%7o", pp
->p_wchan
);
printf("%7o", pp
->p_link
);
printf("%7o", pp
->p_textp
);
printf(" %u", pp
->p_clktim
);
lseek(fc
, (long)setup
[SKL
].value
, 0);
read(fc
, (char *)dh11
, sizeof(dh11
[0]));
mesg
= " # RAW CAN OUT MODE ADDR DEL COL STATE PGRP\n";
if (setup
[SNDH
].type
== -1)
lseek(fc
, (long)setup
[SNDH
].value
, 0);
read(fc
, (char *)&ndh
, sizeof(ndh
));
printf("%d dh lines\n", ndh
);
lseek(fc
, (long)setup
[SDH
].value
, 0);
read(fc
, (char *)dh11
, sizeof(dh11
));
for (tp
= dh11
; tp
< &dh11
[ndh
]; 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.1o", 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
);
register struct user
*up
;
read(fc
, (char *)&xu
, sizeof(xu
));
printf("rsav %.1o %.1o\n", up
->u_rsav
[0], up
->u_rsav
[1]);
printf("segflg, error %d, %d\n", up
->u_segflg
, up
->u_error
);
printf("uids %d,%d,%d,%d\n", up
->u_uid
,up
->u_gid
,up
->u_ruid
,up
->u_rgid
);
printf("procp %.1o\n", up
->u_procp
);
printf("base, count, offset %.1o %.1o %ld\n", up
->u_base
,
up
->u_count
, up
->u_offset
);
printf("cdir %.1o\n", up
->u_cdir
);
printf("dbuf %.14s\n", up
->u_dbuf
);
printf("dirp %.1o\n", up
->u_dirp
);
printf("dent %d %.14s\n", up
->u_dent
.d_ino
, up
->u_dent
.d_name
);
printf("pdir %.1o\n", up
->u_pdir
);
printf("%8.1o", up
->u_uisa
[i
]);
printf("%8.1o", up
->u_uisd
[i
]);
printf("%8.1o", up
->u_uisa
[i
]);
printf("%8.1o", up
->u_uisd
[i
]);
printf("%8.1o", up
->u_ofile
[i
]);
for (i
=10; i
<NOFILE
; i
++)
printf("%8.1o", up
->u_ofile
[i
]);
printf(" %.1o", up
->u_arg
[i
]);
printf("\nsizes %.1o %.1o %.1o\n", up
->u_tsize
, up
->u_dsize
, up
->u_ssize
);
printf("sep %d\n", up
->u_sep
);
printf("qsav %.1o %.1o\n", up
->u_qsav
[0], up
->u_qsav
[1]);
printf("ssav %.1o %.1o\n", up
->u_ssav
[0], up
->u_ssav
[1]);
printf(" %.1o", up
->u_signal
[i
]);
printf("\ntimes %ld %ld\n", up
->u_utime
/60, up
->u_stime
/60);
printf("ctimes %ld %ld\n", up
->u_cutime
/60, up
->u_cstime
/60);
printf("ar0 %.1o\n", up
->u_ar0
);
printf(" %.1o", up->u_prof[i]);
printf("\nintflg %d\n", up
->u_intflg
);
printf("ttyp %.1o\n", up
->u_ttyp
);
printf("ttydev %d,%d\n", major(up
->u_ttyd
), minor(up
->u_ttyd
));
printf("comm %.14s\n", up
->u_comm
);
struct file xfile
[NFILE
];
register struct file
*fp
;
lseek(fc
, (long)setup
[SFIL
].value
, 0);
read(fc
, (char *)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("%8.1o", fp
->f_inode
);
printf(" %ld\n", fp
->f_un
.f_offset
);