home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / sps / part1 / flagdecode.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-11-30  |  5.3 KB  |  240 lines

  1. # include       "sps.h"
  2. # include       "flags.h"
  3.  
  4. /* FLAGDECODE - Looks at the argument list and sets various internal switches */
  5. flagdecode ( argc, argv )
  6.  
  7. register int                    argc ;
  8. register char                   **argv ;
  9.  
  10. {
  11.     register char           *chp ;
  12.     union flaglist          *plist ;
  13.     union flaglist          *tlist ;
  14.     union flaglist          *ulist ;
  15.     static char             usage[] =
  16.     "sps - Unknown option %s\nUsage - sps [ -defgijkoqrsvwyABFNPSTUWZ ][ process|tty|user ] ...\n";
  17.     union flaglist          *getflgsp() ;
  18.     extern struct flags     Flg ;
  19.  
  20.     plist = tlist = ulist = (union flaglist*)0 ;
  21.     for ( argv++ ; --argc ; argv++ )
  22.     {
  23.         chp = *argv ;
  24.         while ( *chp )
  25.             switch ( *chp++ )
  26.             {
  27.                 case '-' :
  28.                     /* Separation character */
  29.                     continue ;
  30.                 case 'd' :
  31.                 case 'D' :
  32.                     /* List disc orientated information */
  33.                     Flg.flg_d = 1 ;
  34.                     Flg.flg_v = 0 ;
  35.                     continue ;
  36.                 case 'e' :
  37.                 case 'E' :
  38.                     /* List environment strings */
  39.                     Flg.flg_e = 1 ;
  40.                     continue ;
  41.                 case 'f' :
  42.                     /* List the father's process id */
  43.                     Flg.flg_f = 1 ;
  44.                     continue ;
  45.                 case 'g' :
  46.                 case 'G' :
  47.                     /* List the process group id */
  48.                     Flg.flg_g = 1 ;
  49.                     continue ;
  50.                 case 'i' :
  51.                 case 'I' :
  52.                     /* Initialise (super-user only) */
  53.                     Flg.flg_i = 1 ;
  54.                     continue ;
  55.                 case 'j' :
  56.                 case 'J' :
  57.                     /* The next argument specifies the
  58.                        name of the information file */
  59.                     if ( argc <= 1 )
  60.                         prexit(
  61.           "sps - Name of an information file expected after `-j' flag\n" ) ;
  62.                     argc-- ;
  63.                     Flg.flg_j = *++argv ;
  64.                     continue ;
  65.                 case 'k' :
  66.                 case 'K' :
  67.                     /* Use a disc file such as /vmcore
  68.                        rather than /dev/{k}mem for
  69.                        accessing kernel data. The next
  70.                        argument specifies the file name. */
  71.                     if ( argc <= 1 )
  72.                         prexit(
  73.            "sps - Name of a memory dump file expected after `-k' flag\n" ) ;
  74.                     argc-- ;
  75.                     Flg.flg_k = *++argv ;
  76.                     Flg.flg_o = 1 ;
  77.                     continue ;
  78.                 case 'l' :
  79.                 case 'v' :
  80.                 case 'L' :
  81.                 case 'V' :
  82.                     /* Verbose output */
  83.                     Flg.flg_d = 0 ;
  84.                     Flg.flg_v = 1 ;
  85.                     continue ;
  86.                 case 'o' :
  87.                 case 'O' :
  88.                     /* Avoid looking at the swap device */
  89.                     Flg.flg_o = 1 ;
  90.                     continue ;
  91.                 case 'q' :
  92.                 case 'Q' :
  93.                     /* Show only the user time, not the
  94.                        user + system times together. */
  95.                     Flg.flg_q = 1 ;
  96.                     continue ;
  97.                 case 'r' :
  98.                 case 'R' :
  99.                     /* Repeat output every n seconds.
  100.                        The next argument specifies n which
  101.                        defaults to 5 if omitted. */
  102.                     Flg.flg_r = 1 ;
  103.                     if ( argc > 1 )
  104.                     {
  105.                         if ( **++argv >= '0'
  106.                         && **argv <= '9' )
  107.                         {
  108.                             argc-- ;
  109.                             Flg.flg_rdelay
  110.                                    = atoi( *argv ) ;
  111.                             continue ;
  112.                         }
  113.                         argv-- ;
  114.                     }
  115.                     Flg.flg_rdelay = 0 ;
  116.                     continue ;
  117.                 case 's' :
  118.                     /* Next argument specifies a symbol
  119.                        file rather than the default
  120.                        /vmunix. */
  121.                     if ( argc <= 1 )
  122.                         prexit(
  123.             "sps - Name of a symbol file expected after `-s' flag\n" ) ;
  124.                     argc-- ;
  125.                     Flg.flg_s = *++argv ;
  126.                     continue ;
  127.                 case 'w' :
  128.                     /* Wide output, exceeding 79 columns */
  129.                     Flg.flg_w = 1 ;
  130.                     continue ;
  131.                 case 'y' :
  132.                 case 'Y' :
  133.                     /* List current tty information */
  134.                     Flg.flg_y = 1 ;
  135.                     continue ;
  136.                 case 'a' :
  137.                 case 'A' :
  138.                     /* List all processes */
  139.                     Flg.flg_AZ = 1 ;
  140.                     Flg.flg_A = 1 ;
  141.                     continue ;
  142.                 case 'b' :
  143.                 case 'B' :
  144.                     /* List only busy processes */
  145.                     Flg.flg_AZ = 1 ;
  146.                     Flg.flg_B = 1 ;
  147.                     continue ;
  148.                 case 'F' :
  149.                     /* List only foreground processes */
  150.                     Flg.flg_AZ = 1 ;
  151.                     Flg.flg_F = 1 ;
  152.                     continue ;
  153.                 case 'n' :
  154.                 case 'N' :
  155.                     /* No processes, just the summary line*/
  156.                     Flg.flg_AZ = 1 ;
  157.                     Flg.flg_N = 1 ;
  158.                     continue ;
  159.                 case 'p' :
  160.                 case 'P' :
  161.                     /* List only the given process ids */
  162.                     Flg.flg_AZ = 1 ;
  163.                     Flg.flg_P = 1 ;
  164.                     if ( !plist )
  165.                        plist=Flg.flg_Plist=getflgsp( argc );
  166.                     while ( argc > 1 )
  167.                     {
  168.                         if ( **++argv == '-' )
  169.                         {
  170.                             --argv ;
  171.                             break ;
  172.                         }
  173.                         --argc ;
  174.                         plist->f_chp = *argv ;
  175.                         (++plist)->f_chp = (char*)0 ;
  176.                     }
  177.                     continue ;
  178.                 case 'S' :
  179.                     /* List only stopped processes */
  180.                     Flg.flg_AZ = 1 ;
  181.                     Flg.flg_S = 1 ;
  182.                     continue ;
  183.                 case 't' :
  184.                 case 'T' :
  185.                     /* List only processes attached to the
  186.                        specified terminals */
  187.                     Flg.flg_AZ = 1 ;
  188.                     Flg.flg_T = 1 ;
  189.                     if ( !tlist )
  190.                        tlist=Flg.flg_Tlist=getflgsp( argc );
  191.                     while ( argc > 1 )
  192.                     {
  193.                         if ( **++argv == '-' )
  194.                         {
  195.                             --argv ;
  196.                             break ;
  197.                         }
  198.                         --argc ;
  199.                         tlist->f_chp = *argv ;
  200.                         (++tlist)->f_chp = (char*)0 ;
  201.                     }
  202.                     continue ;
  203.                 case 'u' :
  204.                 case 'U' :
  205.                     /* List only processes belonging to the
  206.                        specified users */
  207.                     Flg.flg_AZ = 1 ;
  208.                     Flg.flg_U = 1 ;
  209.                     if ( !ulist )
  210.                        ulist=Flg.flg_Ulist=getflgsp( argc );
  211.                     while ( argc > 1 )
  212.                     {
  213.                         if ( **++argv == '-' )
  214.                         {
  215.                             --argv ;
  216.                             break ;
  217.                         }
  218.                         --argc ;
  219.                         ulist->f_chp = *argv ;
  220.                         (++ulist)->f_chp = (char*)0 ;
  221.                     }
  222.                     continue ;
  223.                 case 'W' :
  224.                     /* List only waiting processes */
  225.                     Flg.flg_AZ = 1 ;
  226.                     Flg.flg_W = 1 ;
  227.                     continue ;
  228.                 case 'z' :
  229.                 case 'Z' :
  230.                     /* List only zombie processes */
  231.                     Flg.flg_AZ = 1 ;
  232.                     Flg.flg_Z = 1 ;
  233.                     continue ;
  234.                 default :
  235.                     prexit( usage, *argv ) ;
  236.                     /* NOTREACHED */
  237.             }
  238.     }
  239. }
  240.