aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-05-08 20:28:02 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-05-08 20:28:02 -0700
commit508abff2b860297cd753324fe1dde48a64838455 (patch)
treeb02143e40652be86fba0bc91b1f2bfd7017b8cd0
parent327a2242901a4c52cbd1130a1d155584549f877c (diff)
downloadpw-508abff2b860297cd753324fe1dde48a64838455.tar.gz
pw-508abff2b860297cd753324fe1dde48a64838455.tar.bz2
pw-508abff2b860297cd753324fe1dde48a64838455.zip
Move decoding of -p params into function.
-rw-r--r--pw.c83
1 files changed, 46 insertions, 37 deletions
diff --git a/pw.c b/pw.c
index 2d9aca6..1e4ce19 100644
--- a/pw.c
+++ b/pw.c
@@ -673,6 +673,48 @@ static int getms(const char *str, char **err)
return msec;
}
+static int decodeparms(pwstate *pw, char *parms,
+ char *resbuf, size_t size)
+{
+ char *err;
+ char *hpos = strtok(parms, ", \t");
+ char *lpane = strtok(0, ", \t");
+ char *rpane = strtok(0, ", \t");
+ char *vs2pos = strtok(0, ", \t");
+ char *flags = strtok(0, ", \t");
+
+ if (hpos && (pw->hpos = getznn(hpos, &err)) < 0) {
+ snprintf(resbuf, size, "bad horizontal scroll offset %s: %s\n", hpos, err);
+ return 0;
+ }
+
+ if (lpane && (pw->vsplit1 = getznn(lpane, &err)) < 0) {
+ snprintf(resbuf, size, "bad left pane width %s: %s\n", lpane, err);
+ return 0;
+ }
+
+ if (rpane && (pw->vsplit2 = getznn(rpane, &err)) < 0) {
+ snprintf(resbuf, size, "bad right pane width %s: %s\n", rpane, err);
+ return 0;
+ }
+
+ if (vs2pos && (pw->vs2pos = getznn(vs2pos, &err)) < 0) {
+ snprintf(resbuf, size, "bad right pane view offset %s: %s\n", vs2pos, err);
+ return 0;
+ }
+
+ if (flags) {
+ int stat = getznn(flags, &err);
+ if (stat < 0) {
+ snprintf(resbuf, size, "bad flags %s: %s\n", flags, err);
+ return 0;
+ }
+ pw->stat = stat & stat_save;
+ }
+
+ return 1;
+}
+
static execode execute(pwstate *pw, const char *cmd, char *resbuf,
size_t size, int count)
{
@@ -1160,43 +1202,10 @@ int main(int argc, char **argv)
break;
case 'p':
{
- char *err;
- char *hpos = strtok(optarg, ", \t");
- char *lpane = strtok(0, ", \t");
- char *rpane = strtok(0, ", \t");
- char *vs2pos = strtok(0, ", \t");
- char *flags = strtok(0, ", \t");
-
- if (hpos) {
- if ((pw.hpos = getznn(hpos, &err)) < 0)
- error("-%c option: bad horizontal scroll offset %s: %s\n",
- opt, hpos, err);
- }
-
- if (lpane) {
- if ((pw.vsplit1 = getznn(lpane, &err)) < 0)
- error("-%c option: bad left pane width %s: %s\n",
- opt, lpane, err);
- }
-
- if (rpane) {
- if ((pw.vsplit2 = getznn(rpane, &err)) < 0)
- error("-%c option: bad right pane width %s: %s\n",
- opt, rpane, err);
- }
-
- if (vs2pos) {
- if ((pw.vs2pos = getznn(vs2pos, &err)) < 0)
- error("-%c option: bad right pane view offset %s: %s\n",
- opt, vs2pos, err);
- }
-
- if (flags) {
- int stat = getznn(flags, &err);
- if (stat < 0)
- error("-%c option: bad flags %s: %s\n",
- opt, flags, err);
- pw.stat = stat & stat_save;
+ int ok = decodeparms(&pw, optarg, pw.cmdbuf, cmdsize);
+ if (!ok) {
+ error("-%c option: %s\n", opt, pw.cmdbuf);
+ return EXIT_FAILURE;
}
}
break;