diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-05-08 20:28:02 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-05-08 20:28:02 -0700 |
commit | 508abff2b860297cd753324fe1dde48a64838455 (patch) | |
tree | b02143e40652be86fba0bc91b1f2bfd7017b8cd0 | |
parent | 327a2242901a4c52cbd1130a1d155584549f877c (diff) | |
download | pw-508abff2b860297cd753324fe1dde48a64838455.tar.gz pw-508abff2b860297cd753324fe1dde48a64838455.tar.bz2 pw-508abff2b860297cd753324fe1dde48a64838455.zip |
Move decoding of -p params into function.
-rw-r--r-- | pw.c | 83 |
1 files changed, 46 insertions, 37 deletions
@@ -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; |