int main(int argc,const char *argv[]) { int rec = false; const char **args; int res = ca_parse(argc,argv,0,"r",&rec,&rec); if(res < 0) { printe("Invalid arguments: %s",ca_error(res)); usage(argv[0]); } if(ca_hasHelp() || ca_getFreeCount() == 0) usage(argv[0]); args = ca_getFree(); while(*args) { removeRec(*args,rec); args++; } return EXIT_SUCCESS; }
int main(int argc,const char *argv[]) { const char **args; int res = ca_parse(argc,argv,0,""); if(res < 0) { printe("Invalid arguments: %s",ca_error(res)); usage(argv[0]); } if(ca_hasHelp()) usage(argv[0]); args = ca_getFree(); while(*args) { if(mkdir(*args) < 0) printe("Unable to create directory '%s'",*args); args++; } return EXIT_SUCCESS; }
int main(int argc,const char *argv[]) { const char **args; FILE *in = stdin; int c,line,n = 5; /* parse args */ int res = ca_parse(argc,argv,CA_MAX1_FREE,"n=d",&n); if(res < 0) { printe("Invalid arguments: %s",ca_error(res)); usage(argv[0]); } if(ca_hasHelp()) usage(argv[0]); /* open file, if any */ args = ca_getFree(); if(args[0]) { in = fopen(args[0],"r"); if(!in) error("Unable to open '%s'",args[0]); } /* read the first n lines*/ line = 0; while(!ferror(stdout) && line < n && (c = fgetc(in)) != EOF) { putchar(c); if(c == '\n') line++; } if(ferror(in)) error("Read failed"); if(ferror(stdout)) error("Write failed"); /* clean up */ if(args[0]) fclose(in); return EXIT_SUCCESS; }
int main(int argc,const char **argv) { int first = 1,last = -1; char *fields = NULL; char *delim = (char*)"\t"; const char **args; int res = ca_parse(argc,argv,0,"f=s* d=s",&fields,&delim); if(res < 0) { printe("Invalid arguments: %s",ca_error(res)); usage(argv[0]); } if(ca_hasHelp()) usage(argv[0]); parseFields(fields,&first,&last); args = ca_getFree(); if(args[0] == NULL) handleFile(stdin,delim,first,last); else { FILE *f; while(*args) { if(isdir(*args)) { printe("'%s' is a directory!",*args); continue; } f = fopen(*args,"r"); if(!f) { printe("Unable to open '%s'",*args); continue; } handleFile(f,delim,first,last); fclose(f); args++; } } return EXIT_SUCCESS; }
int main(int argc,const char *argv[]) { char c; const char **args; size_t i,argCount; size_t freeArgs; FILE *file = stdin; const char *filename = NULL; /* parse args */ int res = ca_parse(argc,argv,0,"a=s",&filename); if(res < 0) { printe("Invalid arguments: %s",ca_error(res)); usage(argv[0]); } if(ca_hasHelp()) usage(argv[0]); /* open file? */ if(filename != NULL) { file = fopen(filename,"r"); if(file == NULL) error("Unable to open file '%s'",filename); } /* read arguments */ argCount = 0; while((c = fgetc(file)) != EOF) { if(isspace(c)) { appendArg(); argCount++; argPos = 0; } else { if(argPos < MAX_ARG_LEN) argBuf[argPos++] = c; else error("Argument too long"); } } if(ferror(file)) error("Read failed"); if(filename != NULL) fclose(file); /* append last one */ if(argPos > 0) { appendArg(); argCount++; } /* build args-array and copy arguments into it */ freeArgs = ca_getFreeCount(); if(freeArgs == 0) freeArgs = 1; args = (const char**)malloc(sizeof(char*) * (argCount + freeArgs + 1)); if(!args) error("Not enough mem"); i = 0; if(ca_getFreeCount() == 0) args[i++] = "echo"; else { for(i = 0; i < freeArgs; i++) args[i] = ca_getFree()[i]; } for(; first != NULL; i++) { args[i] = first->arg; first = first->next; } args[i] = NULL; /* exchange us with requested command */ execvp(args[0],args); return EXIT_SUCCESS; }
int main(int argc,const char *argv[]) { FILE *in = stdin; uint base = 16; char format = OUT_FORMAT_HEX; int i,count = -1; const char **args; int res = ca_parse(argc,argv,CA_MAX1_FREE,"n=d f=c",&count,&format); if(res < 0) { printe("Invalid arguments: %s",ca_error(res)); usage(argv[0]); } if(ca_hasHelp()) usage(argv[0]); /* TODO perhaps cmdargs should provide a possibility to restrict the values of an option */ /* like 'arg=[ohd]' */ if(format != OUT_FORMAT_DEC && format != OUT_FORMAT_HEX && format != OUT_FORMAT_OCT) usage(argv[0]); switch(format) { case OUT_FORMAT_DEC: base = 10; break; case OUT_FORMAT_HEX: base = 16; break; case OUT_FORMAT_OCT: base = 8; break; } args = ca_getFree(); if(args[0]) { in = fopen(args[0],"r"); if(!in) error("Unable to open '%s'",args[0]); } ulong shname; uchar *shmem; if(sharebuf(fileno(in),BUF_SIZE,(void**)&shmem,&shname,0) < 0) { if(shmem == NULL) error("Unable to mmap buffer"); } i = 0; while(!ferror(stdout) && (count < 0 || count > 0)) { size_t x,c; c = count >= 0 ? MIN(count,BUF_SIZE) : BUF_SIZE; c = fread(shmem,sizeof(char),c,in); if(c == 0) break; for(x = 0; x < c; x++, i++) { if(i % base == 0) { if(i > 0) printAscii(base,i); printf("%08x: ",i); } if(isprint(shmem[x]) && shmem[x] < 0x80 && !isspace(shmem[x])) ascii[i % base] = shmem[x]; else ascii[i % base] = NPRINT_CHAR; switch(format) { case OUT_FORMAT_DEC: printf("%03d ",shmem[x]); break; case OUT_FORMAT_HEX: printf("%02x ",shmem[x]); break; case OUT_FORMAT_OCT: printf("%03o ",shmem[x]); break; } } if(count >= 0) count -= c; } if(ferror(in)) error("Read failed"); if(ferror(stdout)) error("Write failed"); printAscii(base,i); destroybuf(shmem,shname); if(args[0]) fclose(in); return EXIT_SUCCESS; }