#include #include #include #include #include #include "../src/support.h" /* pars -- end with L is lowercase par, end with U is uppercase, non-alpha spelled out */ enum { AL, AU, CL, CU, DL, FL, FU, GL, IL, KL, LL, ML, NL, OL, PL, QL, RL, RU, SL, SU, TL, UL, XL, ONE, }; int main(int argc, char **argv) { char pars[23] = {0}; int i; DIR *dp; struct dirent *dirp; i = 0; dp = 0; dirp = 0; /* process our parameters */ for(; (i = getopt(argc, argv, "ikqrsglnoAaCmx1FpHLRdSftcu")) != -1; i = 0) { switch(i) { case 'a': pars[AL] = 1; pars[AU] = 0; break; case 'A': pars[AU] = 1; pars[AL] = 0; break; case 'c': pars[CL] = 1; break; case 'C': if(pars[ML] || pars[XL] || pars[ONE] ) { throw(NEEDARG_FAIL, " ls [-ikqrsglno] [-A|-a] [-C|-m|-x|-l]\n\t[-F|-p] [-H|-L] [-R|-d] [-S|-f|-t] [-c|-u] [path ...]"); } pars[CU] = 1; break; case 'd': pars[DL] = 1; pars[RU] = 0; break; case 'f': pars[FL] = 1; pars[SU] = 0; pars[TL] = 0; break; case 'F': pars[FU] = 1; pars[PL] = 0; break; case 'g': pars[GL] = 1; break; case 'i': pars[IL] = 1; break; case 'k': pars[KL] = 1; break; case 'l': pars[LL] = 1; break; case 'm': if(pars[CU] || pars[XL] || pars[ONE] ) { throw(NEEDARG_FAIL, " ls [-ikqrsglno] [-A|-a] [-C|-m|-x|-l]\n\t[-F|-p] [-H|-L] [-R|-d] [-S|-f|-t] [-c|-u] [path ...]"); } pars[ML] = 1; pars[CU] = 0; pars[XL] = 0; pars[ONE] = 0; break; case 'n': pars[NL] = 1; break; case 'o': pars[OL] = 1; break; case 'p': pars[PL] = 1; pars[FU] = 0; break; case 'q': pars[QL] = 1; break; case 'r': pars[RL] = 1; break; case 'R': pars[RU] = 1; pars[DL] = 0; break; case 's': pars[SL] = 1; break; case 'S': pars[SU] = 1; pars[FL] = 0; pars[TL] = 0; break; case 't': pars[TL] = 1; pars[SU] = 0; pars[FL] = 0; break; case 'u': pars[UL] = 1; pars[CL] = 0; break; case 'x': if(pars[ML] || pars[CU] || pars[ONE] ) { throw(NEEDARG_FAIL, " ls [-ikqrsglno] [-A|-a] [-C|-m|-x|-l]\n\t[-F|-p] [-H|-L] [-R|-d] [-S|-f|-t] [-c|-u] [path ...]"); } pars[XL] = 1; break; case '1': if(pars[ML] || pars[XL] || pars[CU] ) { throw(NEEDARG_FAIL, " ls [-ikqrsglno] [-A|-a] [-C|-m|-x|-l]\n\t[-F|-p] [-H|-L] [-R|-d] [-S|-f|-t] [-c|-u] [path ...]"); } pars[ONE] = 1; break; case ':': case '?': default: throw(NEEDARG_FAIL, mastrcat(argv[0], " ls [-ikqrsglno] [-A|-a] [-C|-m|-x|-l]\n\t[-F|-p] [-H|-L] [-R|-d] [-S|-f|-t] [-c|-u] [path ...]")); break; } } i = optind; do { if(!argv[i]) { argv[i] = "."; } if( !(dp = opendir(argv[i]))) { throw(MISC_FAIL, mastrcat(argv[0], mastrcat(": could not access named file or directory: ", argv[i]))); } for(;(dirp = readdir(dp));) { if(dirp->d_name[0] == '.' && !pars[AL]) { continue; } printf("%s\n", dirp->d_name); } i++; } while(i < argc); exit(EXIT_SUCCESS); }