projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Change all instances of "help_page" to "help-page".
[pspp]
/
src
/
ui
/
syntax-gen.c
diff --git
a/src/ui/syntax-gen.c
b/src/ui/syntax-gen.c
index bcec18e5565bab56169eee50766d541c9f5e0999..27e61e4253b476607f37ef4f3ddecfb005db9e19 100644
(file)
--- a/
src/ui/syntax-gen.c
+++ b/
src/ui/syntax-gen.c
@@
-1,5
+1,5
@@
/* PSPPIRE - a graphical user interface for PSPP.
/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2008, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2010, 2011
, 2014
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-30,7
+30,9
@@
#include "libpspp/i18n.h"
#include "libpspp/message.h"
#include "libpspp/str.h"
#include "libpspp/i18n.h"
#include "libpspp/message.h"
#include "libpspp/str.h"
+#include "libpspp/misc.h"
+#include "gl/c-ctype.h"
#include "gl/ftoastr.h"
/* Appends to OUTPUT a pair of hex digits for each byte in IN. */
#include "gl/ftoastr.h"
/* Appends to OUTPUT a pair of hex digits for each byte in IN. */
@@
-176,7
+178,7
@@
syntax_gen_number (struct string *output,
{
char s[DBL_BUFSIZE_BOUND];
{
char s[DBL_BUFSIZE_BOUND];
- dtoastr (s, sizeof s, 0, 0, number);
+
c_
dtoastr (s, sizeof s, 0, 0, number);
ds_put_cstr (output, s);
}
}
ds_put_cstr (output, s);
}
}
@@
-194,10
+196,8
@@
syntax_gen_value (struct string *output, const union value *value, int width,
if (width == 0)
syntax_gen_number (output, value->f, format);
else
if (width == 0)
syntax_gen_number (output, value->f, format);
else
- {
- char *s = CHAR_CAST_BUG (char *, value_str (value, width));
- syntax_gen_string (output, ss_buffer (s, width));
- }
+ syntax_gen_string (output,
+ ss_buffer (CHAR_CAST (const char *, value->s), width));
}
/* Appends <low> THRU <high> to OUTPUT. If LOW is LOWEST, then
}
/* Appends <low> THRU <high> to OUTPUT. If LOW is LOWEST, then
@@
-231,6
+231,9
@@
syntax_gen_pspp_valist (struct string *output, const char *format,
{
for (;;)
{
{
for (;;)
{
+ char qualifier[16];
+ int precision = -1;
+ char directive;
size_t copy = strcspn (format, "%");
ds_put_substring (output, ss_buffer (format, copy));
format += copy;
size_t copy = strcspn (format, "%");
ds_put_substring (output, ss_buffer (format, copy));
format += copy;
@@
-239,7
+242,19
@@
syntax_gen_pspp_valist (struct string *output, const char *format,
return;
assert (*format == '%');
format++;
return;
assert (*format == '%');
format++;
- switch (*format++)
+ directive = *format++;
+ if (directive == '.')
+ {
+ int x = 0;
+ while (directive = *format++, c_isdigit (directive))
+ {
+ assert (x < 16);
+ qualifier[x++] = directive;
+ }
+ qualifier[x++] = '\0';
+ precision = atoi (qualifier);
+ }
+ switch (directive)
{
case 's':
{
{
case 's':
{
@@
-266,16
+281,23
@@
syntax_gen_pspp_valist (struct string *output, const char *format,
break;
case 'f':
break;
case 'f':
+ case 'g':
{
{
+ char conv[32];
double d = va_arg (args, double);
double d = va_arg (args, double);
- switch (*format++)
+ int x = 0;
+ conv[x++] = '%';
+ conv[x] = '\0';
+ if (precision != -1)
{
{
- case 'p':
- ds_put_format (output, "%f", d);
- break;
- default:
- NOT_REACHED ();
+ strcat (conv, ".");
+ strcat (conv, qualifier);
+ x += strlen (qualifier) + 1;
}
}
+ conv[x++] = directive;
+ conv[x++] = '\0';
+
+ ds_put_c_format (output, conv, d);
break;
}
break;
}
@@
-300,9
+322,7
@@
syntax_gen_pspp_valist (struct string *output, const char *format,
%d: Same as printf's %d.
%d: Same as printf's %d.
- %fp: The double argument is formatted precisely as a PSPP
- number, as if with a call to syntax_gen_number with a
- null FORMAT argument.
+ %f %g: Same as printf.
%%: Literal %.
%%: Literal %.