Use getopt for argument processing; fixes a bug. - sam - An updated version of the sam text editor.
(HTM) git clone git://vernunftzentrum.de/sam.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit faf04a03721d852086ec2c89ff28c0a94d583f01
(DIR) parent c2604deb4126d67aceda979a48ade345a327606b
(HTM) Author: Rob King <jking@deadpixi.com>
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(-)
---
(DIR) 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);
}
(DIR) 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');