projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
syntax-gen.c : Allow conversion specifiers of the form %.20f
[pspp]
/
src
/
ui
/
syntax-gen.c
diff --git
a/src/ui/syntax-gen.c
b/src/ui/syntax-gen.c
index 50f884a3ff2dbba7b28b21f0253dba80a6865fb1..e2795d7b3a2b5aa5c11ad654334b264766481a41 100644
(file)
--- a/
src/ui/syntax-gen.c
+++ b/
src/ui/syntax-gen.c
@@
-232,6
+232,8
@@
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));
char directive;
size_t copy = strcspn (format, "%");
ds_put_substring (output, ss_buffer (format, copy));
@@
-242,6
+244,17
@@
syntax_gen_pspp_valist (struct string *output, const char *format,
assert (*format == '%');
format++;
directive = *format++;
assert (*format == '%');
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':
switch (directive)
{
case 's':
@@
-271,12
+284,21
@@
syntax_gen_pspp_valist (struct string *output, const char *format,
case 'f':
case 'g':
{
case 'f':
case 'g':
{
- char conv[3];
+ char conv[3
2
];
double d = va_arg (args, double);
double d = va_arg (args, double);
- conv[0]='%';
- conv[1]=directive;
- conv[2]='\0';
- ds_put_c_format (output, conv, d);
+ int x = 0;
+ conv[x++] = '%';
+ conv[x] = '\0';
+ if (precision != -1)
+ {
+ strcat (conv, ".");
+ strcat (conv, qualifier);
+ x += strlen (qualifier) + 1;
+ }
+ conv[x++] = directive;
+ conv[x++] = '\0';
+
+ ds_put_c_format (output, conv, d);
break;
}
break;
}