home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / stg_v4.lzh / users.c < prev    next >
C/C++ Source or Header  |  1994-11-11  |  3KB  |  172 lines

  1. /*
  2.  * users (list users)
  3.  *
  4.  * StG-Net (c) 1989 StG Computers Inc
  5.  * Unauthorized Reproduction Prohibited
  6.  *
  7.  * 89/08/29 DCG modified for new lib
  8. */
  9.  
  10. #include <stdio.h>
  11. #include "stgnet.h"
  12. #include "pwd.h"
  13.  
  14. struct passwd *pw;
  15.  
  16. char *VER="V4.0a";
  17. char *help[]=
  18. {
  19.     "users {-uihnapcmrvl} - selective list of users/machines",
  20.     " options can be specified in any combination",
  21.     " default options: -runc",
  22.     " -u - UserName",
  23.     " -i - Decimal Id #",
  24.     " -h - Hex Id #",
  25.     " -n - Real Name",
  26. /*    " -a - Address",
  27.     " -p - Phone",
  28.     " -c - Computer",
  29.     " -m - forces list to machines only",
  30.     " -r - forces list to real users only",
  31.     " -v - forces list to non-verified users",
  32. */
  33.     " -l - forces no labels",0
  34. };
  35.  
  36.  
  37. char *opts="uihnapcmrvl";
  38. int optsw[11]={1,1,0,1,0,0,0,0,1,0,0};
  39. char *lbl[]={"UserName","Usr #","Usr #","Real Name","Address","Phone #","Computer"};
  40. int len[]={8,11,11,40,40,40,40};
  41. char *bar="============================================================";
  42. char spec[80];
  43. int i,w,n,q;
  44. char *p;
  45.  
  46. main(argc,argv)
  47. char **argv;
  48. {
  49.     openerr(*argv,0,LOG_STGNET);
  50.  
  51.     if (*++argv && **argv=='-')
  52.     {
  53.         if (*(*argv+1)=='?')
  54.         {
  55.             argv=help;
  56.             while (*argv)
  57.             {
  58.                 strcpy(b,*argv);
  59.                 strcat(b,"\n");
  60.                 writeln(2,b,80);
  61.                 argv++;
  62.             }
  63.             STGVER;
  64.             exit(1);            
  65.         }
  66.  
  67.         for (i=0;i<10;i++) optsw[i]=0;
  68.         p=*argv;
  69.         while (*++p)
  70.         {
  71.             for (i=0;i<10 && *(opts+i)!=*p;i++);
  72.             if (i==10)
  73.             {
  74.                 *(p+1)=0;
  75.                 writeln(2,stringf(b,"Unknown option: %s\n",p),80);
  76.             }
  77.             optsw[i]++;
  78.         }
  79.         if (optsw[7]==0 && optsw[8]==0) optsw[7]=optsw[8]=1;
  80.     }
  81.  
  82.     n=w=0;
  83.     for (i=0;i<7;i++)
  84.     {
  85.         if (!optsw[i]) continue;
  86.         if (i>2) n++;
  87.         w+=len[i]+1;
  88.     }
  89.  
  90.     if (w>79)
  91.     {
  92.         w-=79;
  93.         q=w/n;
  94.         for (i=0;i<7;i++)
  95.         {
  96.             if (!optsw[i]) continue;
  97.             if (i<3) continue;
  98.             if (--n)
  99.             {
  100.                 len[i]-=q;
  101.                 w-=q;
  102.             }
  103.             else
  104.                 len[i]-=w;
  105.         }
  106.     }
  107.  
  108.     *b=0;
  109.     for (i=0;i<7;i++)
  110.     {
  111.         if (!optsw[i]) continue;
  112.         sprintf(spec,"%%-%d.%ds ",len[i],len[i]);
  113.         sprintf(b+strlen(b),spec,lbl[i]);
  114.     }
  115.     if (!optsw[10])
  116.     {
  117.         strcat(b,"\n");
  118.         writeln(1,b,BUFSIZ);
  119.     }
  120.  
  121.     *b=0;
  122.     for (i=0;i<7;i++)
  123.     {
  124.         if (!optsw[i]) continue;
  125.         sprintf(spec,"%%-%d.%ds ",len[i],len[i]);
  126.         sprintf(b+strlen(b),spec,bar);
  127.     }
  128.     if (!optsw[10])
  129.     {
  130.         strcat(b,"\n");
  131.         writeln(1,b,BUFSIZ);
  132.     }
  133.  
  134.     setpwent();
  135.     while (pw=getpwent())
  136.     {
  137. /*
  138.         if (chrser(pwd.op,'N'))
  139.         {
  140.             if (!optsw[7]) continue;
  141.         }
  142.         else
  143.         {
  144.             if (!optsw[8]) continue;
  145.         }
  146.         if (optsw[9] && !chrser(pwd.op,'V')) continue;
  147. */
  148.  
  149.         *b=0;
  150.         for (i=0;i<7;i++)
  151.         {
  152.             if (!optsw[i]) continue;
  153.             sprintf(spec,"%%-%d.%ds ",len[i],len[i]);
  154.  
  155.             switch (i)
  156.             {
  157.                 case 0: sprintf(b+strlen(b),spec,pw->pw_name); break;
  158.                 case 1: sprintf(b+strlen(b),"%5d.%-5d ",(pw->pw_uid&0xFFFF0000)>>16,pw->pw_uid&0xFFFF); break;
  159.                 case 2: sprintf(b+strlen(b),"$%04X.$%04X ",(pw->pw_uid&0xFFFF0000)>>16,pw->pw_uid&0xFFFF); break;
  160.                 case 3: sprintf(b+strlen(b),spec,pw->pw_gecos); break;
  161.                 case 4: sprintf(b+strlen(b),spec,""); break;
  162.                 case 5: sprintf(b+strlen(b),spec,""); break;
  163.                 case 6: sprintf(b+strlen(b),spec,""); break;
  164.                 default: exit(190);
  165.             }
  166.         }
  167.         strcat(b,"\n");
  168.         writeln(1,b,BUFSIZ);
  169.     }
  170.     endpwent();
  171. }
  172.