From 508abff2b860297cd753324fe1dde48a64838455 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 8 May 2022 20:28:02 -0700 Subject: Move decoding of -p params into function. --- pw.c | 83 ++++++++++++++++++++++++++++++++++++++------------------------------ 1 file 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; -- cgit v1.2.3