home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 December / VPR9712A.ISO / OLS / OS2 / LHA2P205 / LHA2P205.LZH / lha2-2.05pre / source.lzh / src / getopt.c < prev    next >
C/C++ Source or Header  |  1995-10-15  |  3KB  |  125 lines

  1. /*
  2.  * getopt.c --- get options
  3.  *   Copyright (C) 1988-1992, Haruyasu YOSHIZAKI
  4.  *   Copyright (C) 1991-1995, Satoshi HIRAMATSU (OS/2 HPFS version)
  5.  *
  6.  * $Log$
  7.  */
  8.  
  9.  
  10. #include <stdio.h>
  11. #include <ctype.h>
  12. #include <stddef.h>
  13. #include <string.h>
  14. #include <time.h>
  15. #include "port2.h"
  16. #include "typedef.h"
  17. #include "lh.h"
  18.  
  19.  
  20. char flg_r = 0, flg_p = 0, flg_x = 0, flg_m = 0, flg_a = 1,
  21.   flg_c = 0, flg_n = 0, flg_t = 0, flg_u = 0, flg_v = 0,
  22.   flg_w = 0, flg_i = 1, flg_h = 1, flg_o = 0, flg_z = 0,
  23. #ifdef __SUPPORT_EA__
  24.   flg_e = 0, 
  25. #endif /* __SUPPORT_EA__ */
  26.   flg_l = 0, flg_s = 0, flg_at = 0, flg_d = 0, flg_f = 0;
  27.  
  28.  
  29. /* get options */
  30. int
  31. getopt(char *p)
  32. {
  33. #ifdef __SUPPORT_EA__
  34.   static char flg[] = "rpxmacntuvwihozls-dfe";
  35.   static char *flgpos[] = {
  36.     &flg_r, &flg_p, &flg_x, &flg_m, &flg_a, 
  37.     &flg_c, &flg_n, &flg_t, &flg_u, &flg_v, 
  38.     &flg_w, &flg_i, &flg_h, &flg_o, &flg_z,
  39.     &flg_l, &flg_s, &flg_at, &flg_d, &flg_f,
  40.     &flg_e};
  41. #else
  42.   static char flg[] = "rpxmacntuvwihozls-df";
  43.   static char *flgpos[] = {
  44.     &flg_r, &flg_p, &flg_x, &flg_m, &flg_a, 
  45.     &flg_c, &flg_n, &flg_t, &flg_u, &flg_v, 
  46.     &flg_w, &flg_i, &flg_h, &flg_o, &flg_z,
  47.     &flg_l, &flg_s, &flg_at, &flg_d, &flg_f};
  48. #endif /* __SUPPORT_EA__ */
  49.   static char val[] = "0-1+2";
  50.   int i;
  51.   char s;
  52.   char *q;
  53.  
  54.   while((s = tolower(*p)) != 0)
  55.     {
  56.       p++;
  57.       q = strchr(flg, s);    /* search switch */
  58.       if(q)
  59.     {
  60.       i = q - flg;
  61.       if(*p && (q = strchr(val, *p)) != NULL)
  62.         {
  63.           *flgpos[i] = (q - val) / 2;
  64.           p++;
  65.         }
  66. #ifdef __SUPPORT_EA__
  67.       else if(s == 'h' && *p == '3')
  68.         {
  69.           flg_h = 3;
  70.           p++;
  71.         }
  72. #endif
  73. #if 0
  74.       else if(s == 'v' && *p)
  75.         {
  76.           if(flg_v == 0)    /* process of '/vSTRING' */
  77.         flg_v = 1;
  78.           pager = p;
  79.           p = "";
  80.         }
  81. #endif
  82.       else if(s == 'z' && *p)
  83.         {
  84.           flg_z = 2;    /* process of '/zSTRING' */
  85.           regext(p);
  86.           p = "";
  87.         }
  88.       else if(s == 'w' && *p)
  89.         {
  90.           flg_w = 1;    /* process of '/wSTRING' */
  91.           strcpy(workdir, p);
  92.           p = "";
  93.         }
  94.       else
  95.         {
  96.           /* flip-flop */
  97.           *flgpos[i] = !*flgpos[i];
  98.         }
  99.     }
  100. #if 0
  101.       else if(s == 'k')
  102.     {
  103.       keyword = p;
  104.       p = "";
  105.     }
  106. #endif
  107.       else
  108.     {
  109.       if(s == '?')
  110.         usage();
  111.       return 1;
  112.     }
  113.     }
  114. #ifdef __SUPPORT_EA__
  115.   if(flg_e)
  116.     {
  117.       flg_h = 3;        /* use level-3 header */
  118.       if(flg_x)
  119.     flg_d = 1;        /* for directory's EA */
  120.     }
  121. #endif
  122.  
  123.   return 0;
  124. }
  125.