X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fformat.h;h=b01faa42c43a88431f7f4b58eb9152be24b9c583;hb=95cde62bdf5210c1c60dad5598a888b864f93161;hp=1cb7bc6b7feb027573c82c5468b951942d01b6b0;hpb=da67dbb8a63ee516a6ae69c6099fde077dc20dcc;p=pspp diff --git a/src/data/format.h b/src/data/format.h index 1cb7bc6b7f..b01faa42c4 100644 --- a/src/data/format.h +++ b/src/data/format.h @@ -25,6 +25,7 @@ #include "libpspp/str.h" struct fmt_settings; +struct msg_location; /* How a format is going to be used. */ enum fmt_use @@ -75,8 +76,8 @@ enum ATTRIBUTE ((packed)) fmt_type struct fmt_spec { enum fmt_type type; /* One of FMT_*. */ - uint16_t w; /* Width. */ uint8_t d; /* Number of decimal places. */ + uint16_t w; /* Width. */ }; /* Maximum width of any numeric format. */ @@ -85,21 +86,29 @@ struct fmt_spec /* Constructing formats. */ struct fmt_spec fmt_for_input (enum fmt_type, int w, int d) PURE_FUNCTION; struct fmt_spec fmt_for_output (enum fmt_type, int w, int d) PURE_FUNCTION; -struct fmt_spec fmt_for_output_from_input (const struct fmt_spec *, +struct fmt_spec fmt_for_output_from_input (struct fmt_spec, const struct fmt_settings *); struct fmt_spec fmt_default_for_width (int width); /* Verifying formats. */ -bool fmt_check (const struct fmt_spec *, enum fmt_use); -bool fmt_check_input (const struct fmt_spec *); -bool fmt_check_output (const struct fmt_spec *); -bool fmt_check_type_compat (const struct fmt_spec *, enum val_type); -bool fmt_check_width_compat (const struct fmt_spec *, int var_width); +bool fmt_check (struct fmt_spec, enum fmt_use); +bool fmt_check_input (struct fmt_spec); +bool fmt_check_output (struct fmt_spec); +bool fmt_check_type_compat (struct fmt_spec, enum val_type); +bool fmt_check_width_compat (struct fmt_spec, int var_width); + +char *fmt_check__ (struct fmt_spec, enum fmt_use); +char *fmt_check_input__ (struct fmt_spec); +char *fmt_check_output__ (struct fmt_spec); +char *fmt_check_type_compat__ (struct fmt_spec, const char *varname, + enum val_type); +char *fmt_check_width_compat__ (struct fmt_spec, const char *varname, + int var_width); /* Working with formats. */ -int fmt_var_width (const struct fmt_spec *); -char *fmt_to_string (const struct fmt_spec *, char s[FMT_STRING_LEN_MAX + 1]); -bool fmt_equal (const struct fmt_spec *, const struct fmt_spec *); +int fmt_var_width (struct fmt_spec); +char *fmt_to_string (struct fmt_spec, char s[FMT_STRING_LEN_MAX + 1]); +bool fmt_equal (struct fmt_spec, struct fmt_spec); bool fmt_resize (struct fmt_spec *, int new_width); void fmt_fix (struct fmt_spec *, enum fmt_use); @@ -159,6 +168,7 @@ struct fmt_number_style struct fmt_affix neg_suffix; /* Negative suffix. */ char decimal; /* Decimal point: '.' or ','. */ char grouping; /* Grouping character: ',', '.', or 0. */ + bool include_leading_zero; /* Format as ".5" or "0.5"? */ /* A fmt_affix may require more bytes than its display width; for example, U+00A5 (Â¥) is 2 bytes in UTF-8 but occupies only one display column. @@ -187,6 +197,11 @@ struct fmt_settings { int epoch; /* 0 for default epoch. */ char decimal; /* '.' or ','. */ + + /* Format F, E, COMMA, and DOT with leading zero (e.g. "0.5" instead of + ".5")? */ + bool include_leading_zero; + struct fmt_number_style *ccs[FMT_N_CCS]; /* CCA through CCE. */ }; #define FMT_SETTINGS_INIT { .decimal = '.' }