home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 6 File / 06-File.zip / HPFSLS.ZOO / lsgetopt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-17  |  5.0 KB  |  177 lines

  1. /*
  2.  * Prepara le opzioni.
  3.  * (C)1990 by redmax@alessia.dei.unipd.it (Massimo A. Santin)
  4.  * $Log:    lsgetopt.c $
  5.  * Revision 1.1  91/05/08  20:01:44  Unknown
  6.  * Initial revision
  7.  * 
  8.  */
  9.  
  10. #include "ls.h"
  11.  
  12. static char rcsid[] = "$Header: d:/usr/utils/ls/rcs/lsgetopt.c 1.1 91/05/08 20:01:44 Unknown Exp $";
  13.  
  14. int get_options(int argc, char **argv, unsigned *pattrs, option_type *popt)
  15. {
  16.    int j, opt_counter = 0;
  17.    char *p;
  18.  
  19.    *pattrs = FILE_NORMAL | FILE_ARCHIVED | FILE_DIRECTORY;
  20.    popt->recursive = 0;
  21.    popt->attributes = 0;
  22.    popt->size = 0;
  23.    popt->effectiveSize = 0;
  24.    popt->time = 0;
  25.    popt->all = 0;
  26.    popt->k = 0;
  27.    popt->wide = 0;
  28.    popt->reverse = 0;
  29.    popt->dirSlash = 0;
  30.    popt->exeStar = 0;
  31.    popt->ea = 0;
  32.    popt->volume = 0;
  33.  
  34.    for (j = 1; j < argc; j++) {
  35.       if (argv[j] && argv[j][0] == '-') {
  36.          opt_counter++;
  37.          p = &argv[j][1];
  38.          while (*p) {
  39.             switch (*p) {
  40.                case 'l':
  41.                   popt->attributes = 1;
  42.                   popt->size = 1;
  43.                   popt->time = LASTWRITE;
  44.                   break;
  45.  
  46.                case 'a':
  47.                   *pattrs = FILE_NORMAL | FILE_ARCHIVED | FILE_DIRECTORY
  48.                      | FILE_HIDDEN | FILE_SYSTEM;
  49.                   popt->all = 1;
  50.                   break;
  51.  
  52.                case 'n':
  53.                   *pattrs = FILE_NORMAL;
  54.                   if (p[1] == 'a' || p[1] == 'h' || p[1] == 's' || p[1] == 'd') {
  55.                      while (p[1] == 'a' || p[1] == 'h' || p[1] == 's' || p[1] == 'd') {
  56.                       switch (p[1]) {
  57.                            case 'a':
  58.                               *pattrs |= FILE_ARCHIVED;
  59.                               p++;
  60.                                break;
  61.                          case 's':
  62.                               *pattrs |= FILE_SYSTEM;
  63.                               p++;
  64.                              break;
  65.                            case 'h':
  66.                               *pattrs |= FILE_HIDDEN;
  67.                               p++;
  68.                                break;
  69.                             case 'd':
  70.                               *pattrs |= FILE_DIRECTORY;
  71.                               p++;
  72.                             break;
  73.                         }
  74.                      } /* while */
  75.                   } /* else */
  76.                   break;
  77.  
  78.                case 's':
  79.                   popt->size = 1;
  80.                   while (p[1] == 'k' || p[1] == 'e') {
  81.                       switch (p[1]) {
  82.                         case 'e':
  83.                            popt->effectiveSize = 1;
  84.                            p++;
  85.                           break;
  86.                         case 'k':
  87.                            popt->k = 1;
  88.                            p++;
  89.                            break;
  90.                      }
  91.                   }
  92.                   break;
  93.  
  94.                case 't':
  95.                   switch (p[1]) {
  96.                      case 'c':
  97.                         popt->time = CREATION;
  98.                         p++;
  99.                         break;
  100.                      case 'a':
  101.                         popt->time = LASTACCESS;
  102.                         p++;
  103.                         break;
  104.                      case 'w':
  105.                         popt->time = LASTWRITE;
  106.                         p++;
  107.                         break;
  108.                      default:
  109.                         popt->time = LASTWRITE;
  110.                         break;
  111.                   }
  112.                   break;
  113.  
  114.                case 'x':
  115.                   popt->wide = 1;
  116.                   popt->ea = 0;
  117.                   break;
  118.  
  119.                #if 0
  120.                case 'r':
  121.                   popt->reverse = 1;
  122.                   break;
  123.                #endif
  124.  
  125.                case 'R':
  126.                   popt->recursive = 1;
  127.                   break;
  128.  
  129.                case 'p':
  130.                   popt->dirSlash = 1;
  131.                   break;
  132.  
  133.                case 'F':
  134.                   popt->dirSlash = 1;
  135.                   popt->exeStar = 1;
  136.                   break;
  137.  
  138.                   popt->dirSlash = 1;
  139.                   break;
  140.  
  141.                case 'E':
  142.                   #ifndef OS2_ONLY
  143.                   fprintf(stderr, "option -E not supported.\n");
  144.                   #endif
  145.                   popt->wide = 0;
  146.                   popt->ea = 1;
  147.                   break;
  148.  
  149.                case 'V':
  150.                   popt->volume = 1;
  151.                   break;
  152.  
  153.                case 'h':
  154.                case '?':
  155.                   print_help();
  156.                   break;
  157.  
  158.                case ' ':
  159.                case '\t':
  160.                case '\n':
  161.                case '-':
  162.                   /* ignore blanks */
  163.                   break;
  164.  
  165.                default:
  166.                   fprintf(stderr, "LS: option -%c not recognized.\n", *p);
  167.                   exit(1);
  168.  
  169.             }
  170.             p++;
  171.          }
  172.          argv[j] = NULL;
  173.       }
  174.    }
  175.    return opt_counter;
  176. } /* get_options */
  177.