diff options
author | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
---|---|---|
committer | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
commit | 094ca96844842928810f14844413109fc6cdd890 (patch) | |
tree | e60efbb980f38ba9308ccb4fb2b77b87bbc115f3 /pith/margin.c | |
download | alpine-094ca96844842928810f14844413109fc6cdd890.tar.xz |
Initial Alpine Version
Diffstat (limited to 'pith/margin.c')
-rw-r--r-- | pith/margin.c | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/pith/margin.c b/pith/margin.c new file mode 100644 index 00000000..90fdd209 --- /dev/null +++ b/pith/margin.c @@ -0,0 +1,138 @@ +#if !defined(lint) && !defined(DOS) +static char rcsid[] = "$Id: margin.c 1032 2008-04-11 00:30:04Z hubert@u.washington.edu $"; +#endif + +/* + * ======================================================================== + * Copyright 2006-2008 University of Washington + * Copyright 2013 Eduardo Chappa + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * ======================================================================== + */ + +/*====================================================================== + + margin.c + Implements message data gathering and formatting + + ====*/ + + +#include "../pith/headers.h" +#include "../pith/string.h" +#include "../pith/state.h" +#include "../pith/conf.h" + + +/* + * Internal prototypes + */ + + +/* + * format_view_margin - return sane value for vertical margins + */ +int * +format_view_margin(void) +{ + static int margin[2]; + char tmp[100], e[200], *err, lastchar = 0; + int left = 0, right = 0, leftm = 0, rightm = 0; + size_t l; + + memset(margin, 0, sizeof(margin)); + + /* + * We initially tried to make sure that the user didn't shoot themselves + * in the foot by setting this too small. People seem to want to do some + * strange stuff, so we're going to relax the wild shot detection and + * let people set what they want, until we get to the point of totally + * absurd. We've also added the possibility of appending the letter c + * onto the width. That means treat the value as an absolute column + * instead of a width. That is, a right margin of 76c means wrap at + * column 76, whereas right margin of 4 means to wrap at column + * screen width - 4. + */ + if(ps_global->VAR_VIEW_MARGIN_LEFT){ + strncpy(tmp, ps_global->VAR_VIEW_MARGIN_LEFT, sizeof(tmp)-1); + tmp[sizeof(tmp)-1] = '\0'; + removing_leading_and_trailing_white_space(tmp); + if(tmp[0]){ + l = strlen(tmp); + if(l > 0) + lastchar = tmp[l-1]; + + if(lastchar == 'c') + tmp[l-1] = '\0'; + + if((err = strtoval(tmp, &left, 0, 0, 0, e, sizeof(e), "Viewer-margin-left")) != NULL){ + leftm = 0; + dprint((2, "%s\n", err)); + } + else{ + if(lastchar == 'c') + leftm = left-1; + else + leftm = left; + + leftm = MIN(MAX(0, leftm), ps_global->ttyo->screen_cols); + } + } + } + + if(ps_global->VAR_VIEW_MARGIN_RIGHT){ + strncpy(tmp, ps_global->VAR_VIEW_MARGIN_RIGHT, sizeof(tmp)-1); + tmp[sizeof(tmp)-1] = '\0'; + removing_leading_and_trailing_white_space(tmp); + if(tmp[0]){ + l = strlen(tmp); + if(l > 0) + lastchar = tmp[l-1]; + + if(lastchar == 'c') + tmp[l-1] = '\0'; + + if((err = strtoval(tmp, &right, 0, 0, 0, e, sizeof(e), "Viewer-margin-right")) != NULL){ + rightm = 0; + dprint((2, "%s\n", err)); + } + else{ + if(lastchar == 'c') + rightm = ps_global->ttyo->screen_cols - right; + else + rightm = right; + + rightm = MIN(MAX(0, rightm), ps_global->ttyo->screen_cols); + } + } + } + + if((rightm > 0 || leftm > 0) && rightm >= 0 && leftm >= 0 + && ps_global->ttyo->screen_cols - rightm - leftm >= 8){ + margin[0] = leftm; + margin[1] = rightm; + } + + return(margin); +} + + +/* + * Give a margin for help and such + */ +int * +non_messageview_margin(void) +{ + static int margin[2]; + + margin[0] = 0; + margin[1] = 4; + + return(margin); +} |