X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fformat.h;h=8c54ba3a171448121cc0b4911b3146a21b34e510;hb=bc5c6c1953ada1737620e27e6a968392a38d8c8f;hp=21b75a14f534d7196f9df4ddacb12a8cc58b67c9;hpb=b0486442675e454c1e542a7098e5f127b2757787;p=pspp diff --git a/src/data/format.h b/src/data/format.h index 21b75a14f5..8c54ba3a17 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 @@ -56,7 +57,7 @@ enum fmt_category }; /* Format type. */ -enum fmt_type +enum ATTRIBUTE ((packed)) fmt_type { #define FMT(NAME, METHOD, IMIN, OMIN, IO, CATEGORY) FMT_##NAME, #include "format.def" @@ -75,8 +76,8 @@ enum fmt_type struct fmt_spec { enum fmt_type type; /* One of FMT_*. */ - int w; /* Width. */ - int d; /* Number of decimal places. */ + uint8_t d; /* Number of decimal places. */ + uint16_t w; /* Width. */ }; /* Maximum width of any numeric format. */ @@ -96,6 +97,10 @@ 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); +char *fmt_check__ (const struct fmt_spec *, enum fmt_use); +char *fmt_check_type_compat__ (const struct fmt_spec *, enum val_type); +char *fmt_check_width_compat__ (const struct fmt_spec *, 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]); @@ -159,6 +164,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 +193,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 = '.' }