home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume25 / pty4 / part02 / sesswho.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-18  |  1.5 KB  |  80 lines

  1. #include <stdio.h>
  2. #include "getopt.h"
  3. #include "sesslog.h"
  4. #include "config/sessfile.h" /* XXX: maybe sesslog should have an iterator? */
  5.  
  6. main(argc,argv)
  7. int argc;
  8. char *argv[];
  9. {
  10.  FILE *fisf;
  11.  struct sesslog sl;
  12.  int opt;
  13.  char *file;
  14.  int flaglogouts;
  15.  int flagreverse;
  16.  int revnum;
  17.  
  18.  file = SESSNOW_FILE;
  19.  flaglogouts = 0;
  20.  flagreverse = 0;
  21.  
  22.  while ((opt = getopt(argc,argv,"rRlLf:")) != opteof)
  23.    switch(opt)
  24.     {
  25.      case 'R':
  26.        flagreverse = 1;
  27.        break;
  28.      case 'r':
  29.        flagreverse = 1;
  30.        break;
  31.      case 'l':
  32.        flaglogouts = 1;
  33.        break;
  34.      case 'L':
  35.        flaglogouts = 0;
  36.        break;
  37.      case 'f':
  38.        file = optarg;
  39.        break;
  40.      case '?':
  41.      default:
  42.        exit(1);
  43.     }
  44.  
  45.  fisf = fopen(file,"r");
  46.  if (!fisf)
  47.   {
  48.    perror("sesswho: fatal: cannot open current session file");
  49.    exit(2);
  50.   }
  51.  if (flagreverse)
  52.   {
  53.    fseek(fisf,0,2);
  54.    revnum = ftell(fisf) / sizeof(sl);
  55.    fseek(fisf,sizeof(sl) * --revnum,0);
  56.   }
  57.  
  58.  while (fread(&sl,sizeof(sl),1,fisf) == 1)
  59.   {
  60.    if (sl.ext[0] && (sl.masterpid || flaglogouts))
  61.      /* XXX: requires printf with %* */
  62.      printf(sl.masterpid ? "%c%c  %12.12s  %-*.*s  %d\n"
  63.              : "%c%c  %12.12s  %-*.*s  exit\n"
  64.        ,sl.ext[0],sl.ext[1]
  65.        ,asctime(localtime(&sl.date)) + 4
  66.        ,SESSLOG_USERLEN
  67.        ,SESSLOG_USERLEN
  68.        ,sl.username
  69.        ,sl.masterpid
  70.       );
  71.    if (flagreverse)
  72.     {
  73.      if (fseek(fisf,-2 * sizeof(sl),1) == -1) /*XXX*/
  74.        break;
  75.      --revnum; /*XXX: why do we care? */
  76.     }
  77.   }
  78.  exit(0);
  79. }
  80.