home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / RWHODUMP.C < prev    next >
C/C++ Source or Header  |  1994-04-17  |  3KB  |  117 lines

  1. #include <time.h>
  2. #include "global.h"
  3. #include "mbuf.h"
  4. #include "trace.h"
  5.   
  6. #ifndef __GNUC__
  7. static
  8. #endif
  9. struct outmp {
  10.     char out_line[9];   /* tty name */
  11.     char out_name[9];   /* user id */
  12.     int32 out_time; /* time on */
  13. };
  14.   
  15. #ifndef __GNUC__
  16. static
  17. #endif
  18. struct whod {
  19.     char wd_vers;
  20.     char wd_type;
  21.     char wd_fill[2];
  22.     int32  wd_sendtime;
  23.     int32  wd_recvtime;
  24.     char wd_hostname[33];
  25.     int32  wd_loadav[3];
  26.     int32  wd_boottime;
  27.     struct    whoent {
  28.         struct    outmp we_utmp;
  29.         int32  we_idle;
  30.     } wd_we[1024 / sizeof (struct whoent)];
  31. };
  32.   
  33. static int ntohrwhod __ARGS((struct whod *wp,struct mbuf **bpp));
  34.   
  35. void
  36. rwho_dump(fp,bpp)
  37. FILE *fp;
  38. struct mbuf **bpp;
  39. {
  40.     int i;
  41.     int32 t;
  42.     char *cp;
  43.     struct whod rwhod;
  44.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  45.         return;
  46.     fprintf(fp,"RWHO: ");
  47.     if(ntohrwhod(&rwhod,bpp) == -1) {
  48.         fprintf(fp,"bad data\n");
  49.         return;
  50.     }
  51.     if(rwhod.wd_vers != 1)
  52.         fprintf(fp,"version %d  ",rwhod.wd_vers);
  53.     if(rwhod.wd_type != 1)
  54.         fprintf(fp,"type %d  ",rwhod.wd_type);
  55.     cp = ctime(&rwhod.wd_sendtime);
  56.     cp[24] = '\0';
  57.     fprintf(fp,"send %s  ",cp);
  58.     t = rwhod.wd_recvtime;
  59.     if(t / 86400L)
  60.         fprintf(fp,"%ld:",t/86400L);
  61.     t %= 86400L;
  62.     fprintf(fp,"recv %02ld:%02ld\n",t / 3600,(t % 3600)/60);
  63.     fprintf(fp,"      host %s  loadvg %ld %ld %ld  ",rwhod.wd_hostname,
  64.     rwhod.wd_loadav[0],rwhod.wd_loadav[1],
  65.     rwhod.wd_loadav[2]);
  66.     fprintf(fp,"boot %s",ctime(&rwhod.wd_boottime));
  67.     i = 0;
  68.     while(rwhod.wd_we[i].we_utmp.out_line[0] != '\0') {
  69.         fprintf(fp,"      %-12s%-12s",rwhod.wd_we[i].we_utmp.out_name,
  70.         rwhod.wd_we[i].we_utmp.out_line);
  71.         t = rwhod.wd_we[i].we_idle;
  72.         if(t / 86400L)
  73.             fprintf(fp,"%ld:",t/86400L);
  74.         else
  75.             fprintf(fp,"  ");
  76.         t %= 86400L;
  77.         fprintf(fp,"%02ld:%02ld    ",t / 3600, (t % 3600)/60);
  78.         fprintf(fp,"%s",ctime(&rwhod.wd_we[i].we_utmp.out_time));
  79.         ++i;
  80.     }
  81. }
  82. static int
  83. ntohrwhod(wp,bpp)
  84. struct whod *wp;
  85. struct mbuf **bpp;
  86. {
  87.     int i;
  88.     char wbuf[60];
  89.     if(pullup(bpp,wbuf,60) != 60)
  90.         return -1;
  91.     wp->wd_vers = wbuf[0];
  92.     wp->wd_type = wbuf[1];
  93.     wp->wd_fill[0] = wbuf[2];
  94.     wp->wd_fill[1] = wbuf[3];
  95.     wp->wd_sendtime = get32(&wbuf[4]);
  96.     wp->wd_recvtime = get32(&wbuf[8]);
  97.     memcpy(wp->wd_hostname,&wbuf[12],32);
  98.     wp->wd_hostname[32] = '\0';
  99.     wp->wd_loadav[0] = get32(&wbuf[44]);
  100.     wp->wd_loadav[1] = get32(&wbuf[48]);
  101.     wp->wd_loadav[2] = get32(&wbuf[52]);
  102.     wp->wd_boottime = get32(&wbuf[56]);
  103.     for(i = 0; i < 42; ++i) {
  104.         if(pullup(bpp,wbuf,24) != 24) {
  105.             wp->wd_we[i].we_utmp.out_line[0] = '\0';
  106.             return 0;
  107.         }
  108.         memcpy(wp->wd_we[i].we_utmp.out_line,wbuf,8);
  109.         wp->wd_we[i].we_utmp.out_line[8] = '\0';
  110.         memcpy(wp->wd_we[i].we_utmp.out_name,&wbuf[8],8);
  111.         wp->wd_we[i].we_utmp.out_name[8] = '\0';
  112.         wp->wd_we[i].we_utmp.out_time = get32(&wbuf[16]);
  113.         wp->wd_we[i].we_idle = get32(&wbuf[20]);
  114.     }
  115.     return 0;
  116. }
  117.