home *** CD-ROM | disk | FTP | other *** search
- /*
- * Prepara le opzioni.
- * (C)1990 by redmax@alessia.dei.unipd.it (Massimo A. Santin)
- * $Log: lsgetopt.c $
- * Revision 1.1 91/05/08 20:01:44 Unknown
- * Initial revision
- *
- */
-
- #include "ls.h"
-
- static char rcsid[] = "$Header: d:/usr/utils/ls/rcs/lsgetopt.c 1.1 91/05/08 20:01:44 Unknown Exp $";
-
- int get_options(int argc, char **argv, unsigned *pattrs, option_type *popt)
- {
- int j, opt_counter = 0;
- char *p;
-
- *pattrs = FILE_NORMAL | FILE_ARCHIVED | FILE_DIRECTORY;
- popt->recursive = 0;
- popt->attributes = 0;
- popt->size = 0;
- popt->effectiveSize = 0;
- popt->time = 0;
- popt->all = 0;
- popt->k = 0;
- popt->wide = 0;
- popt->reverse = 0;
- popt->dirSlash = 0;
- popt->exeStar = 0;
- popt->ea = 0;
- popt->volume = 0;
-
- for (j = 1; j < argc; j++) {
- if (argv[j] && argv[j][0] == '-') {
- opt_counter++;
- p = &argv[j][1];
- while (*p) {
- switch (*p) {
- case 'l':
- popt->attributes = 1;
- popt->size = 1;
- popt->time = LASTWRITE;
- break;
-
- case 'a':
- *pattrs = FILE_NORMAL | FILE_ARCHIVED | FILE_DIRECTORY
- | FILE_HIDDEN | FILE_SYSTEM;
- popt->all = 1;
- break;
-
- case 'n':
- *pattrs = FILE_NORMAL;
- if (p[1] == 'a' || p[1] == 'h' || p[1] == 's' || p[1] == 'd') {
- while (p[1] == 'a' || p[1] == 'h' || p[1] == 's' || p[1] == 'd') {
- switch (p[1]) {
- case 'a':
- *pattrs |= FILE_ARCHIVED;
- p++;
- break;
- case 's':
- *pattrs |= FILE_SYSTEM;
- p++;
- break;
- case 'h':
- *pattrs |= FILE_HIDDEN;
- p++;
- break;
- case 'd':
- *pattrs |= FILE_DIRECTORY;
- p++;
- break;
- }
- } /* while */
- } /* else */
- break;
-
- case 's':
- popt->size = 1;
- while (p[1] == 'k' || p[1] == 'e') {
- switch (p[1]) {
- case 'e':
- popt->effectiveSize = 1;
- p++;
- break;
- case 'k':
- popt->k = 1;
- p++;
- break;
- }
- }
- break;
-
- case 't':
- switch (p[1]) {
- case 'c':
- popt->time = CREATION;
- p++;
- break;
- case 'a':
- popt->time = LASTACCESS;
- p++;
- break;
- case 'w':
- popt->time = LASTWRITE;
- p++;
- break;
- default:
- popt->time = LASTWRITE;
- break;
- }
- break;
-
- case 'x':
- popt->wide = 1;
- popt->ea = 0;
- break;
-
- #if 0
- case 'r':
- popt->reverse = 1;
- break;
- #endif
-
- case 'R':
- popt->recursive = 1;
- break;
-
- case 'p':
- popt->dirSlash = 1;
- break;
-
- case 'F':
- popt->dirSlash = 1;
- popt->exeStar = 1;
- break;
-
- popt->dirSlash = 1;
- break;
-
- case 'E':
- #ifndef OS2_ONLY
- fprintf(stderr, "option -E not supported.\n");
- #endif
- popt->wide = 0;
- popt->ea = 1;
- break;
-
- case 'V':
- popt->volume = 1;
- break;
-
- case 'h':
- case '?':
- print_help();
- break;
-
- case ' ':
- case '\t':
- case '\n':
- case '-':
- /* ignore blanks */
- break;
-
- default:
- fprintf(stderr, "LS: option -%c not recognized.\n", *p);
- exit(1);
-
- }
- p++;
- }
- argv[j] = NULL;
- }
- }
- return opt_counter;
- } /* get_options */
-