int t;
settings = xzalloc (sizeof *settings);
- for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
+ for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t)
fmt_number_style_init (&settings->styles[t]);
fmt_settings_set_decimal (settings, '.');
{
int t;
- for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
+ for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t)
fmt_number_style_destroy (&settings->styles[t]);
free (settings->styles);
int t;
new = xmalloc (sizeof *new);
- for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
+ for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t)
fmt_number_style_clone (&new->styles[t], &old->styles[t]);
return new;
}
}
+/* Translate U32, which is in the form found in SAV and SPV files, into a
+ format specification, and stores the new specification in *F.
+
+ If LOOSE is false, checks that the format specification is appropriate as an
+ output format for a variable with the given WIDTH and reports an error if
+ not. If LOOSE is true, instead adjusts the format's width and decimals as
+ necessary to be suitable.
+
+ Return true if successful, false if there was an error.. */
+bool
+fmt_from_u32 (uint32_t u32, int width, bool loose, struct fmt_spec *f)
+{
+ uint8_t raw_type = u32 >> 16;
+ uint8_t w = u32 >> 8;
+ uint8_t d = u32;
+
+ msg_disable ();
+ f->w = w;
+ f->d = d;
+ bool ok = fmt_from_io (raw_type, &f->type);
+ if (ok)
+ {
+ if (loose)
+ fmt_fix_output (f);
+ else
+ ok = fmt_check_output (f);
+ }
+ if (ok)
+ ok = fmt_check_width_compat (f, width);
+ msg_enable ();
+
+ return ok;
+}
+
/* Returns true if TYPE may be used as an input format,
false otherwise. */
bool
break;
case FMT_TIME:
- s1 = "H:MM";
- s2 = "H:MM:SS";
+ s1 = "HH:MM";
+ s2 = "HH:MM:SS";
break;
case FMT_DTIME: