# 2.11BSD#431 - /usr/src/sbin/dmesg/dmesg.c

##### Functions

    done              X
    main              X
    pdate             X

##### Variables

    msgbuf            X
    msgbufp           X
    nl                X
    of                X
    omesg             X
    sflg              X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #if defined(DOSCCS) && !defined(lint)
       8: static char sccsid[] = "@(#)dmesg.c	5.4.1 (2.11BSD GTE) 1/1/94";
       9: #endif
      10:
      11: /*
      12:  *	Suck up system messages
      13:  *	dmesg
      14:  *		print current buffer
      15:  *	dmesg -
      16:  *		print and update incremental history
      17:  */
      18:
      19: #include <stdio.h>
      20: #include <sys/param.h>
      21: #include <nlist.h>
      22: #include <signal.h>
      23: #include <sys/file.h>
      24: #include <sys/vm.h>
      25: #include <sys/msgbuf.h>
      26:
      27: struct  msgbuf msgbuf;
      28: char    *msgbufp;
      29: int sflg;
      30: int of  = -1;
      31:
      32: struct  msgbuf omesg;
      33: struct  nlist nl[2] = {
      34:     { "_msgbuf" },
      35:     { "" }
      36: };
      37:
      38: main(argc, argv)
      39: char **argv;
      40: {
      41:     int mem;
      42:     register char *mp, *omp, *mstart;
      43:     int samef, sawnl, ignore;
      44: #ifdef  pdp11
      45:     char msgb[MSG_BSIZE];
      46: #endif
      47:
      48:     if (argc>1 && argv[1][0] == '-') {
      49:         sflg++;
      50:         argc--;
      51:         argv++;
      52:     }
      53:     if (sflg) {
      54:         of = open("/usr/adm/msgbuf", O_RDWR | O_CREAT, 0644);
      55:         if (of < 0)
      56:             done("Can't open /usr/adm/msgbuf\n");
      57:         read(of, (char *)&omesg, sizeof(omesg));
      58:         lseek(of, 0L, 0);
      59:     }
      60:     sflg = 0;
      61: #ifdef pdp11
      62:     nlist(argc>2? argv[2]:"/unix", nl);
      63: #else
      64:     nlist(argc>2? argv[2]:"/vmunix", nl);
      65: #endif
      66:     if (nl[0].n_type==0)
      67:         done("Can't get kernel namelist\n");
      68:     if ((mem = open((argc>1? argv[1]: "/dev/mem"), 0)) < 0)
      69:         done("Can't read kernel memory\n");
      70:     lseek(mem, (long)nl[0].n_value, 0);
      71:     read(mem, &msgbuf, sizeof (msgbuf));
      72:     if (msgbuf.msg_magic != MSG_MAGIC)
      73:         done("Magic number wrong (namelist mismatch?)\n");
      74:     if (msgbuf.msg_bufx >= MSG_BSIZE)
      75:         msgbuf.msg_bufx = 0;
      76:     if (omesg.msg_bufx >= MSG_BSIZE)
      77:         omesg.msg_bufx = 0;
      78: #ifdef  pdp11
      79:     msgbuf.msg_bufc = msgb;
      80:     lseek(mem, (long)ctob((long)msgbuf.msg_click), 0);
      81:     read(mem, msgbuf.msg_bufc, MSG_BSIZE);
      82: #endif
      83:     mstart = &msgbuf.msg_bufc[omesg.msg_bufx];
      84:     omp = &omesg.msg_bufc[msgbuf.msg_bufx];
      85:     mp = msgbufp = &msgbuf.msg_bufc[msgbuf.msg_bufx];
      86:     samef = 1;
      87:     do {
      88:         if (*mp++ != *omp++) {
      89:             mstart = msgbufp;
      90:             samef = 0;
      91:             pdate();
      92:             printf("...\n");
      93:             break;
      94:         }
      95:         if (mp >= &msgbuf.msg_bufc[MSG_BSIZE])
      96:             mp = msgbuf.msg_bufc;
      97:         if (omp >= &omesg.msg_bufc[MSG_BSIZE])
      98:             omp = omesg.msg_bufc;
      99:     } while (mp != mstart);
     100:     if (samef && omesg.msg_bufx == msgbuf.msg_bufx)
     101:         exit(0);
     102:     mp = mstart;
     103:     pdate();
     104:     sawnl = 1;
     105:     do {
     106:         if (sawnl && *mp == '<')
     107:             ignore = 1;
     108:         if (*mp && (*mp & 0200) == 0 && !ignore)
     109:             putchar(*mp);
     110:         if (ignore && *mp == '>')
     111:             ignore = 0;
     112:         sawnl = (*mp == '\n');
     113:         mp++;
     114:         if (mp >= &msgbuf.msg_bufc[MSG_BSIZE])
     115:             mp = msgbuf.msg_bufc;
     116:     } while (mp != msgbufp);
     117:     done((char *)NULL);
     118: }
     119:
     120: done(s)
     121: char *s;
     122: {
     123:     register char *p, *q;
     124:
     125:     if (s) {
     126:         pdate();
     127:         printf(s);
     128:     } else if (of != -1)
     129:         write(of, (char *)&msgbuf, sizeof(msgbuf));
     130:     exit(s!=NULL);
     131: }
     132:
     133: pdate()
     134: {
     135:     extern char *ctime();
     136:     static firstime;
     137:     time_t tbuf;
     138:
     139:     if (firstime==0) {
     140:         firstime++;
     141:         time(&tbuf);
     142:         printf("\n%.12s\n", ctime(&tbuf)+4);
     143:     }
     144: }

#### Defined functions

done defined in line 120; used 5 times

- in line 56, 67-73(3), 117

main defined in line 38; never used
pdate defined in line 133; used 3 times

- in line 91, 103, 126

#### Defined variables

msgbuf defined in line 27; used 19 times

- in line 71-85(12), 95-100(3), 114-115(2), 129(2)

msgbufp defined in line 28; used 3 times

- in line 85-89(2), 116

nl defined in line 33; used 4 times

- in line 62-70(4)

of defined in line 30; used 6 times

- in line 54-58(4), 128-129(2)

omesg defined in line 32; used 9 times

- in line 57(2), 76-77(2), 83-84(2), 97-100(3)

sccsid defined in line 8; never used
sflg defined in line 29; used 3 times

- in line 49-53(2), 60

Last modified: 1994-01-11 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1455 |