Use getopt for argument processing; fixes a bug. - sam - An updated version of … | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit faf04a03721d852086ec2c89ff28c0a94d583f01 | |
parent c2604deb4126d67aceda979a48ade345a327606b | |
Author: Rob King <[email protected]> | |
Date: Wed, 18 May 2016 00:26:14 -0500 | |
Use getopt for argument processing; fixes a bug. | |
Diffstat: | |
sam/io.c | 4 ++-- | |
sam/sam.c | 97 ++++++++++++++----------------- | |
2 files changed, 46 insertions(+), 55 deletions(-) | |
--- | |
diff --git a/sam/io.c b/sam/io.c | |
@@ -246,12 +246,12 @@ connectto(char *machine) | |
} | |
void | |
-startup(char *machine, int Rflag, char **argv, char **end) | |
+startup(char *machine, int Rflag, char **arg, char **end) | |
{ | |
if(machine) | |
connectto(machine); | |
if(!Rflag) | |
- bootterm(machine, argv, end); | |
+ bootterm(machine, arg, end); | |
downloaded = 1; | |
outTs(Hversion, VERSION); | |
} | |
diff --git a/sam/sam.c b/sam/sam.c | |
@@ -1,6 +1,8 @@ | |
/* Copyright (c) 1998 Lucent Technologies - All rights reserved. */ | |
#include "sam.h" | |
+#include <unistd.h> | |
+ | |
Rune genbuf[BLOCKSIZE]; | |
int io; | |
int panicking; | |
@@ -35,59 +37,48 @@ void usage(void); | |
int main(int argc, char *argv[]) | |
{ | |
- int i; | |
+ int i, o; | |
String *t; | |
- char **ap, **arg; | |
- | |
- arg = argv++; | |
- ap = argv; | |
- while(argc>1 && argv[0] && argv[0][0]=='-'){ | |
- switch(argv[0][1]){ | |
- case 'e': | |
- *ap++ = *argv++; | |
- --argc; | |
- expandtabs++; | |
- break; | |
- | |
- case 'd': | |
- dflag++; | |
- break; | |
- | |
- case 'r': | |
- *ap++ = *argv++; | |
- *ap++ = *argv; | |
- --argc; | |
- if(argc == 1) | |
- usage(); | |
- machine = *argv; | |
- | |
- rsamname = RXSAMNAME; | |
- break; | |
- | |
- case 'R': | |
- Rflag++; | |
- break; | |
- | |
- case 't': | |
- --argc, argv++; | |
- if(argc == 1) | |
- usage(); | |
- samterm = *argv; | |
- break; | |
+ char *arg[argc + 1], **ap; | |
+ int targc = 1; | |
+ | |
+ ap = &arg[argc]; | |
+ arg[argc] = NULL; | |
+ while ((o = getopt(argc, argv, "edRr:t:s:")) != -1){ | |
+ switch (o){ | |
+ case 'e': | |
+ arg[targc++] = "-e"; | |
+ break; | |
+ | |
+ case 'd': | |
+ dflag = 1; | |
+ break; | |
+ | |
+ case 'r': | |
+ machine = optarg; | |
+ rsamname = RXSAMNAME; | |
+ arg[targc++] = "-r"; | |
+ arg[targc++] = optarg; | |
+ break; | |
+ | |
+ case 'R': | |
+ Rflag = 1; | |
+ break; | |
+ | |
+ case 't': | |
+ samterm = optarg; | |
+ break; | |
+ | |
+ case 's': | |
+ rsamname = optarg; | |
+ | |
+ default: | |
+ usage(); | |
+ } | |
+ } | |
+ argv += optind; | |
+ argc -= optind; | |
- case 's': | |
- --argc, argv++; | |
- if(argc == 1) | |
- usage(); | |
- rsamname = *argv; | |
- break; | |
- | |
- default: | |
- dprint("sam: unknown flag %c\n", argv[0][1]); | |
- exits("usage"); | |
- } | |
- --argc, argv++; | |
- } | |
Strinit(&cmdstr); | |
Strinit0(&lastpat); | |
Strinit0(&lastregexp); | |
@@ -103,8 +94,8 @@ int main(int argc, char *argv[]) | |
startup(machine, Rflag, arg, ap); | |
Fstart(); | |
notify(notifyf); | |
- if(argc>1){ | |
- for(i=0; i<argc-1; i++) | |
+ if(argc > 0){ | |
+ for(i=0; i<argc; i++) | |
if(!setjmp(mainloop)){ | |
t = tmpcstr(argv[i]); | |
Straddc(t, '\0'); |