projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added coefficient-handling routines
[pspp-builds.git]
/
src
/
data-out.c
diff --git
a/src/data-out.c
b/src/data-out.c
index d21d2902e1e5fcfe383b0872c1dabed27ef75c88..c9c17a5e642fd6f14fcefe1472df9586dd44bdae 100644
(file)
--- a/
src/data-out.c
+++ b/
src/data-out.c
@@
-34,6
+34,9
@@
#include "str.h"
#include "var.h"
#include "str.h"
#include "var.h"
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
#include "debug-print.h"
\f
/* Public functions. */
#include "debug-print.h"
\f
/* Public functions. */
@@
-53,7
+56,7
@@
static string_converter convert_A, convert_AHEX;
/* Converts binary value V into printable form in the exactly
FP->W character in buffer S according to format specification
FP. No null terminator is appended to the buffer. */
/* Converts binary value V into printable form in the exactly
FP->W character in buffer S according to format specification
FP. No null terminator is appended to the buffer. */
-void
+bool
data_out (char *s, const struct fmt_spec *fp, const union value *v)
{
int cat = formats[fp->type].cat;
data_out (char *s, const struct fmt_spec *fp, const union value *v)
{
int cat = formats[fp->type].cat;
@@
-70,7
+73,7
@@
data_out (char *s, const struct fmt_spec *fp, const union value *v)
{
memset (s, ' ', fp->w);
s[fp->w - fp->d - 1] = '.';
{
memset (s, ' ', fp->w);
s[fp->w - fp->d - 1] = '.';
- return;
+ return
true
;
}
/* Handle decimal shift. */
}
/* Handle decimal shift. */
@@
-186,6
+189,8
@@
data_out (char *s, const struct fmt_spec *fp, const union value *v)
/* Error handling. */
if (!ok)
strncpy (s, "ERROR", fp->w);
/* Error handling. */
if (!ok)
strncpy (s, "ERROR", fp->w);
+
+ return ok;
}
/* Converts V into S in F format with width W and D decimal places,
}
/* Converts V into S in F format with width W and D decimal places,
@@
-960,7
+965,7
@@
year4 (int year)
static int
try_CCx (char *dst, const struct fmt_spec *fp, double number)
{
static int
try_CCx (char *dst, const struct fmt_spec *fp, double number)
{
- const struct
set_cust
_currency *cc = get_cc(fp->type - FMT_CCA);
+ const struct
custom
_currency *cc = get_cc(fp->type - FMT_CCA);
struct fmt_spec f;
struct fmt_spec f;
@@
-970,7
+975,7
@@
try_CCx (char *dst, const struct fmt_spec *fp, double number)
/* Determine length available, decimal character for number
proper. */
/* Determine length available, decimal character for number
proper. */
- f.type = cc->decimal == get_decimal() ? FMT_COMMA : FMT_DOT;
+ f.type = cc->decimal == get_decimal
() ? FMT_COMMA : FMT_DOT;
f.w = fp->w - strlen (cc->prefix) - strlen (cc->suffix);
if (number < 0)
f.w -= strlen (cc->neg_prefix) + strlen (cc->neg_suffix) - 1;
f.w = fp->w - strlen (cc->prefix) - strlen (cc->suffix);
if (number < 0)
f.w -= strlen (cc->neg_prefix) + strlen (cc->neg_suffix) - 1;
@@
-1116,6
+1121,7
@@
format_and_round (char *dst, double number, const struct fmt_spec *fp,
sprintf (buf, "%.*f", decimals, number);
sprintf (buf, "%.*f", decimals, number);
+ /* Omit integer part if it's 0. */
if (!memcmp (buf, "0.", 2))
memmove (buf, buf + 1, strlen (buf));
else if (!memcmp (buf, "-0.", 3))
if (!memcmp (buf, "0.", 2))
memmove (buf, buf + 1, strlen (buf));
else if (!memcmp (buf, "-0.", 3))
@@
-1215,6
+1221,10
@@
format_and_round (char *dst, double number, const struct fmt_spec *fp,
}
}
}
}
+ /* Omit `-' if value output is zero. */
+ if (buf[0] == '-' && buf[strspn (buf, "-.0")] == '\0')
+ memmove (buf, buf + 1, strlen (buf));
+
buf_copy_str_lpad (dst, fp->w, buf);
return 1;
}
buf_copy_str_lpad (dst, fp->w, buf);
return 1;
}