home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / maint / part01 / args.c next >
C/C++ Source or Header  |  1992-05-13  |  6KB  |  235 lines

  1. /******************************************************************************
  2. *******************************************************************************
  3.  
  4.    Site:    Western Michigan University Academic Computer Center
  5.  
  6.    System:    Directory/File System Maintenance
  7.  
  8.    Program:    maint
  9.  
  10.    Version=01    Level=00    01/24/92    Leonard J. Peirce
  11.  
  12.    Purpose:    Routine(s) for parsing run-time arguments.
  13.  
  14.    Arguments:    See individual routine(s).
  15.  
  16.    External variables:    See below
  17.  
  18.    Maint external functions:
  19.  
  20.     Defined:    get_args
  21.  
  22.     Called:        None
  23.  
  24.    Files accessed:    None
  25.  
  26.    Return codes:    None
  27.  
  28.    Compiling instructions:    See Makefile
  29.  
  30.    Linking instructions:    See Makefile
  31.  
  32.    Other information:    (C) Copyright 1992, Leonard J. Peirce
  33.  
  34. ********************************************************************************
  35. *******************************************************************************/
  36.  
  37. /******************************************************************************/
  38. /*                                                                            */
  39. /*                        # I N C L U D E   F I L E S                         */
  40. /*                                                                            */
  41. /******************************************************************************/
  42.  
  43. #include <stdio.h>
  44. #include <string.h>
  45. #include "maint.h"
  46.  
  47. /******************************************************************************/
  48. /*                                                                            */
  49. /*                             # D E F I N E S                                */
  50. /*                                                                            */
  51. /******************************************************************************/
  52.  
  53. /******************************************************************************/
  54. /*                                                                            */
  55. /*          S T R U C T U R E S ,   U N I O N S ,   T Y P E D E F S           */
  56. /*                                                                            */
  57. /******************************************************************************/
  58.  
  59. /******************************************************************************/
  60. /*                                                                            */
  61. /*   E X T E R N A L   D E F I N I T I O N S   &   D E C L A R A T I O N S    */
  62. /*                                                                            */
  63. /******************************************************************************/
  64.  
  65. extern     char      *optarg;        /* getopt() externals              */
  66.  
  67. extern     int      optind,
  68.           opterr;
  69.  
  70.      void      get_args();
  71.  
  72. /******************************************************************************/
  73. /*                                                                            */
  74. /*     S T A T I C   D E F I N I T I O N S   &   D E C L A R A T I O N S      */
  75. /*                                                                            */
  76. /******************************************************************************/
  77.  
  78. /*******************************************************************************
  79. ********************************************************************************
  80.  
  81.   Function:    get_args
  82.  
  83.   Purpose:    Process the command-line arguments, setting the flags for
  84.         what arguments are specified and determining the slot width.
  85.         Also calculate the entry size memory allocation factor for
  86.         allocating memory pools.
  87.  
  88.   Global variables:
  89.  
  90.     Name            Examine/Modify/Use/Read/Write
  91.     ----            -----------------------------
  92.     opt_size           X      X     X
  93.     optarg               X        X
  94.  
  95.   Return Codes:
  96.  
  97.     Code            Reason
  98.     ----            ------
  99.     none
  100.  
  101. ********************************************************************************
  102. *******************************************************************************/
  103.  
  104. void get_args(argc,argv,args)
  105.                     /*******   FORMAL  PARAMETERS   *******/
  106.      int      argc;            /* number of run-time arguments          */
  107.      char      **argv;        /* run-time arguments              */
  108. register ARG_DEF  *args;        /* run-time argument flags          */
  109.  
  110. {    /*** get_args ***/
  111.                     /********   LOCAL  VARIABLES   ********/
  112.      int      c;            /* argument from getopt()          */
  113.      size_t      opt_size;        /* length of an option string          */
  114.  
  115.  
  116.    /* start parsing the arguments; when we're done, look at what they
  117.     * are and set some values accordingly
  118.     */
  119.  
  120.    args->sort = FILENAME;        /* assume we want to sort by filename */
  121.  
  122.    while((c = getopt(argc,argv,"acdfgopstwAFS:")) != EOF)
  123.    {
  124.       switch(c)
  125.       {
  126.      case('a'):
  127.  
  128.         args->dot_files = TRUE;
  129.         break;
  130.  
  131.      case('A'):
  132.  
  133.         args->auto_feed = TRUE;
  134.         break;
  135.  
  136.      case('c'):
  137.  
  138.         args->confirm = TRUE;
  139.         break;
  140.  
  141.      case('d'):
  142.  
  143.         args->date = TRUE;
  144.         break;
  145.  
  146.      case('f'):
  147.  
  148.         args->date = TRUE;
  149.         args->size = TRUE;
  150.         args->prot = TRUE;
  151.         args->owner = TRUE;
  152.         args->group = TRUE;
  153.         break;
  154.  
  155.      case('g'):
  156.  
  157.         args->group = TRUE;
  158.         break;
  159.  
  160.      case('o'):
  161.  
  162.         args->owner = TRUE;
  163.         break;
  164.  
  165.      case('p'):
  166.  
  167.         args->prot = TRUE;
  168.         break;
  169.  
  170.      case('s'):
  171.  
  172.         args->size = TRUE;
  173.         break;
  174.  
  175.      case('t'):
  176.  
  177.         args->text = DISPLAY_TEXT;
  178.         args->text_startup = TRUE;
  179.         break;
  180.  
  181.      case('w'):
  182.  
  183.         args->wide = TRUE;
  184.         break;
  185.  
  186.      case('S'):
  187.  
  188.         /* see what we should sort by */
  189.  
  190.         opt_size = strlen(optarg);
  191.  
  192.         if(opt_size)
  193.         {
  194.            /* something specified after the option; see what it is */
  195.  
  196.            if(strncmp("date",optarg,opt_size) == 0)
  197.            {
  198.           args->sort = DATE;
  199.            }
  200.            else if(strncmp("size",optarg,opt_size) == 0)
  201.            {
  202.           args->sort = SIZE;
  203.            }
  204.            else if(strncmp("filename",optarg,opt_size) == 0)
  205.            {
  206.           args->sort = FILENAME;
  207.            }
  208.            else if(strncmp("none",optarg,opt_size) == 0)
  209.            {
  210.           args->sort = 0;
  211.            }
  212.            else
  213.            {
  214.           fprintf(stderr,"maint -- illegal sort option %s\n",optarg);
  215.           exit(1);
  216.            }
  217.         }
  218.  
  219.         break;
  220.  
  221.      case('F'):
  222.  
  223.         args->filemarks = TRUE;
  224.         break;
  225.  
  226.      default:
  227.  
  228.         exit(1);
  229.       }
  230.    }
  231.  
  232.    return;
  233.  
  234. }    /*** get_args ***/
  235.