Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!ucbvax!DBIUNI11.BITNET!UPSYF173 From: UPSYF173@DBIUNI11.BITNET (Wolfgang Thiel) Newsgroups: comp.sys.atari.st Subject: stmain.c RE: C Source Message-ID: <9003060802.AA07098@ucbvax.Berkeley.EDU> Date: 5 Mar 90 15:02:54 GMT Sender: usenet@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 104 /* This is an example for simple ARGV parsing without complicated (and complicating) getarg/getopt stuff: It can handle : - no options - single and/or multiple options: -xyz or -x -y -z - options with directly following specification: -b100 - options with specification after a blank: -f name - all mixed together. and it prints use() after -?, -h, or ?. Wolfgang Thiel (UPSYF173@DBIUNI11.BITNET) */ #define _V 0x0001 #define _W 0x0002 #define NULL ((char *)0) extern long strtol(); int flag; long blksiz; char file[80]; use() { printf("use: -vw] [-b#[k]] [-f name] [arg ...]\r\n"); exit(0); } int main(argc, argv) int argc; char **argv; { char *cp; int c; char *next; flag = 0; blksiz = 0l; file[0] = 0; while((cp = *++argv) != NULL && *cp++ == '-') { while((c = (int) *cp++) != 0) { switch(c) { case 'v': flag |= _V; break; case 'w': flag |= _W; break; case 'b': blksiz = strtol(cp, &next, 10); if (next == cp) { printf("no number found after -b\r\n"); use(); } if (*next == 'k') { blksiz *= 1024l; ++next; } cp = next; break; case 'f': if (*cp) { printf("blank expected after -f\r\n"); use(); } if ( *++argv == NULL) { --argv; printf("file name expected after -f\r\n"); use(); } if (**argv == '-') { printf("file name expected after -f\r\n"); use(); } strcpy(file, *argv); break; default: printf("unknown option: -%c\r\n", c); /* thru */ case '?': case 'h': use(); break; } } } printf("Flag:x%04x Blk:%ld File:'%s'\r\n", flag, blksiz, file); if (*argv != NULL && **argv == '?') use(); while((cp = *argv++) != NULL) printf("Arg: %s\r\n", cp); return 0; }