home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / sps3 / part02 / flagdecode.c next >
C/C++ Source or Header  |  1992-05-08  |  6KB  |  249 lines

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