home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / SRC / unc.lzh / UNC / getparms.c < prev    next >
Text File  |  1991-06-10  |  2KB  |  101 lines

  1. int getparms(argc, argv)
  2. int argc;
  3. char *argv[];
  4. {
  5.    char  c, *parm, *getstr();
  6.    int   i;
  7.  
  8.    for (i=1; i < argc; i++)
  9.    {
  10.       parm = argv[i];
  11.       if(*parm != '-')
  12.       {
  13.          cmdindex = i;   /* ab hier beginnts Kommando */
  14.          return(0);
  15.       }
  16.       parm++;
  17.       while( (c = *parm++) != '\0') 
  18.          switch( tolower(c) )
  19.          {
  20.             case 'g': group = getint(&parm, group); break;
  21.             case 'u': user = getint(&parm, user); break;
  22.             case '?':  usage(); clean(0); break;
  23.             case 'v':  fputs(VERSION, stderr); exit(0);
  24.             case 'd':  debug = getint(&parm, 1); break;
  25.             default: 
  26.                usage();
  27.                clean(_errmsg(1, "illegal option '%c'\n", c)) ;
  28.          }
  29.    }
  30. }
  31.  
  32. /* getint(&par) und getstr(&par) untersuchen den String ab **par.
  33.  * *par wird erhöht und steht 1 hinter dem letzten erkannten Zeichen
  34.  * bei ungültigem oder nicht vorhandenem Argument wird der übergebene
  35.  * Defaultwert zurückgegeben.
  36.  */
  37. int getint(par, difauld)
  38. char    **par;
  39. int     difauld;
  40. {
  41.     int i;
  42.     if (**par == '=')
  43.         ++*par;
  44.     if (isdigit(**par))
  45.         i = atoi(*par); /* Zahl zurückgeben */
  46.     else 
  47.         i = difauld;
  48.     while (isdigit(**par))  /* skippen bis Zahlende */
  49.         ++*par;
  50.     return(i);
  51. }
  52.  
  53. int gethex(par, difauld)
  54. char    **par;
  55. int     difauld;
  56. {
  57.     int i;
  58.     if (**par == '=')
  59.         ++*par;
  60.     if (**par == '0' || **par == '$')
  61.         ++*par;
  62.     if (**par == 'x' || **par == 'X')
  63.         ++*par;
  64.     if (sscanf(*par, "%x", &i) != 1)
  65.         i = difauld; /* nix gefunden */
  66.     while (isxdigit(**par))  /* skippen bis Zahlende */
  67.         ++*par;
  68.     return(i);
  69. }
  70.  
  71. char *getstr(par, difauld)
  72. char    **par, *difauld;
  73. {
  74.     char    *cp;
  75.     if (**par == '=')
  76.         ++*par;
  77.     if (**par != '\0')
  78.     {
  79.         cp = *par;  /* Übergabe: Stringbeginn */
  80.         while(**par) ++*par;    /* skippen bis Stringende */
  81.         return(cp);
  82.     }
  83.     return(difauld);
  84. }    
  85.  
  86. void usage()
  87. {
  88.     fputs(
  89. "\
  90. Syntax: sus {-<opts>} <cmd>\n\
  91. Funkcion: execute <cmd> as member of a different group\n\
  92. Options:    -v    show version number\n\
  93. "          
  94.     , stderr); fputs("\
  95.             -g[=]<group>  set group id (default: 0)\n\
  96.             -u[=]<user>   set user id (default: current)\n\
  97. "             
  98.     , stderr);
  99. }
  100.  
  101.