home *** CD-ROM | disk | FTP | other *** search
- /*
- * Print system stuff
- */
-
- #define mask(x) (x&0377)
- #include <sys/param.h>
- #include <sys/conf.h>
- #include <sys/tty.h>
-
- char *fcore = "/dev/mem";
- char *fnlist = "/unix";
- int fc;
-
- struct setup {
- char name[8];
- int type;
- unsigned value;
- } setup[] = {
- #define SINODE 0
- "_inode", 0, 0,
- #define STEXT 1
- "_text", 0, 0,
- #define SPROC 2
- "_proc", 0, 0,
- #define SDH 3
- "_dh11", 0, 0,
- #define SNDH 4
- "_ndh11", 0, 0,
- #define SKL 5
- "_kl11", 0, 0,
- #define SFIL 6
- "_file", 0, 0,
- 0,
- };
-
- int inof;
- int txtf;
- int prcf;
- int ttyf;
- int usrf;
- long ubase;
- int filf;
- int allflg;
-
- main(argc, argv)
- char **argv;
- {
-
- while (--argc && **++argv == '-') {
- while (*++*argv)
- switch (**argv) {
-
- case 'a':
- allflg++;
- break;
-
- case 'i':
- inof++;
- break;
-
- case 'x':
- txtf++;
- break;
- case 'p':
- prcf++;
- break;
-
- case 't':
- ttyf++;
- break;
-
- case 'u':
- if (--argc == 0)
- break;
- usrf++;
- ubase = oatoi(*++argv);
- break;
-
- case 'f':
- filf++;
- break;
- }
- }
- if (argc>0)
- fcore = argv[0];
- if ((fc = open(fcore, 0)) < 0) {
- printf("Can't find %s\n", fcore);
- exit(1);
- }
- if (argc>1)
- fnlist = argv[1];
- nlist(fnlist, setup);
- if (setup[SINODE].type == -1) {
- printf("no namelist\n");
- exit(1);
- }
- if (inof)
- doinode();
- if (txtf)
- dotext();
- if (ttyf)
- dotty();
- if (prcf)
- doproc();
- if (usrf)
- dousr();
- if (filf)
- dofil();
- }
-
- doinode()
- {
- #include <sys/inode.h>
- register struct inode *ip;
- struct inode xinode[NINODE];
- register int nin, loc;
-
- nin = 0;
- lseek(fc, (long)setup[SINODE].value, 0);
- read(fc, (char *)xinode, sizeof(xinode));
- for (ip = xinode; ip < &xinode[NINODE]; ip++)
- if (ip->i_count)
- nin++;
- 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])) {
- if (ip->i_count == 0)
- continue;
- printf("%7.1o ", loc);
- 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));
- else
- printf("%10ld", ip->i_size);
- printf("\n");
- }
- }
-
- putf(v, n)
- {
- if (v)
- printf("%c", n);
- else
- printf(" ");
- }
-
- dotext()
- {
- #include <sys/text.h>
- register struct text *xp;
- struct text xtext[NTEXT];
- register loc;
- int ntx;
-
- ntx = 0;
- lseek(fc, (long)setup[STEXT].value, 0);
- read(fc, (char *)xtext, sizeof(xtext));
- for (xp = xtext; xp < &xtext[NTEXT]; xp++)
- if (xp->x_iptr!=NULL)
- ntx++;
- 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])) {
- if (xp->x_iptr == NULL)
- continue;
- printf("%7.1o", loc);
- printf(" ");
- 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);
- printf("\n");
- }
- }
-
- doproc()
- {
- #include <sys/proc.h>
- struct proc xproc[NPROC];
- register struct proc *pp;
- register loc, np;
-
- lseek(fc, (long)setup[SPROC].value, 0);
- read(fc, (char *)xproc, sizeof(xproc));
- np = 0;
- for (pp=xproc; pp < &xproc[NPROC]; pp++)
- if (pp->p_stat)
- np++;
- 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)
- continue;
- printf("%6o", loc);
- 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);
- printf("\n");
- }
- }
-
- dotty()
- {
- struct tty dh11[48];
- int ndh;
- register struct tty *tp;
- register char *mesg;
-
- printf("1 kl11\n");
- 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";
- printf(mesg);
- ttyprt(0, &dh11[0]);
- if (setup[SNDH].type == -1)
- return;
- 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++)
- ttyprt(tp-dh11, tp);
- }
-
- ttyprt(n, atp)
- struct tty *atp;
- {
- register struct tty *tp;
-
- tp = atp;
- printf("%2d", n);
- 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);
- printf("\n");
- }
-
- dousr()
- {
- #include <sys/dir.h>
- #include <sys/user.h>
- union {
- struct user rxu;
- char fxu[ctob(USIZE)];
- } xu;
- register struct user *up;
- register i;
-
- lseek(fc, ubase<<6, 0);
- read(fc, (char *)&xu, sizeof(xu));
- up = &xu.rxu;
- 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("dseg");
- for (i=0; i<8; i++)
- printf("%8.1o", up->u_uisa[i]);
- printf("\n ");
- for (i=0; i<8; i++)
- printf("%8.1o", up->u_uisd[i]);
- if (up->u_sep) {
- printf("\ntseg");
- for (i=8; i<16; i++)
- printf("%8.1o", up->u_uisa[i]);
- printf("\n ");
- for (i=8; i<16; i++)
- printf("%8.1o", up->u_uisd[i]);
- }
- printf("\nfile");
- for (i=0; i<10; i++)
- printf("%8.1o", up->u_ofile[i]);
- printf("\n ");
- for (i=10; i<NOFILE; i++)
- printf("%8.1o", up->u_ofile[i]);
- printf("\nargs");
- for (i=0; i<5; 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("sigs");
- for (i=0; i<NSIG; i++)
- 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("prof");
- for (i=0; i<4; i++)
- 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);
- }
-
- oatoi(s)
- char *s;
- {
- register v;
-
- v = 0;
- while (*s)
- v = (v<<3) + *s++ - '0';
- return(v);
- }
-
- dofil()
- {
- #include <sys/file.h>
- struct file xfile[NFILE];
- register struct file *fp;
- register nf;
- int loc;
-
- nf = 0;
- lseek(fc, (long)setup[SFIL].value, 0);
- read(fc, (char *)xfile, sizeof(xfile));
- for (fp=xfile; fp < &xfile[NFILE]; fp++)
- if (fp->f_count)
- nf++;
- 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])) {
- if (fp->f_count==0)
- continue;
- printf("%7.1o ", loc);
- 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);
- }
- }
-