I believe this to be a foolproof and completely optimized way of parsing your particular options:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void wrong () {
puts("Usage: fold [-s] [-w width] file ...");
exit (-2);
}
int parse_w (char *arg) {
int i, retv;
if (sscanf(arg,"%d",&retv)!=1) wrong();
return retv;
}
int main (int argc, char *argv[]) {
int i, len, sflag=0, width=80;
FILE *fstRO;
for (i=1;i<argc;i++) {
if (strcmp(argv[i],"-s")==0) {sflag=1;continue;}
if (strncmp(argv[i],"-w",2)==0) {
if (strlen(argv[i])>2) {
if (sscanf(argv[i], "-w%d",&width)!=1) wrong();
continue;}
else if (i==argc-1) wrong();
width=parse_w(argv[i+1]);
i++; continue;
}
break;
}
if (!(fstRO=fopen(argv[i],"r"))) {
puts("File not openable");
return -1;}
printf("%s opened read-only\n",argv[i]);
if (sflag==1) puts("-s set");
printf("width set to %d\n",width);
fclose(fstRO);
return 0;
}
edit: except it doesn't parse the filename...oh well
edit2: okay now it does