1 /* PSPP - computes sample statistics.
2 Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
3 Written by Ben Pfaff <blp@gnu.org>.
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 /* Display format types. */
27 /* See the definitions of these functions and variables when modifying
29 misc.c:convert_fmt_ItoO()
30 sys-file-reader.c:parse_format_spec()
31 data-in.c:parse_string_as_format() */
32 #define DEFFMT(LABEL, NAME, N_ARGS, IMIN_W, IMAX_W, OMIN_W, OMAX_W, \
33 CAT, OUTPUT, SPSS_FMT) \
42 /* Describes one of the display formats above. */
45 char name[9]; /* `DATETIME' is the longest name. */
46 int n_args; /* 1=width; 2=width.decimals. */
47 int Imin_w, Imax_w; /* Bounds on input width. */
48 int Omin_w, Omax_w; /* Bounds on output width. */
49 int cat; /* Categories. */
50 int output; /* Output format. */
51 int spss; /* Equivalent SPSS output format. */
54 /* Display format categories. */
57 FCAT_BLANKS_SYSMIS = 001, /* 1=All-whitespace means SYSMIS. */
58 FCAT_EVEN_WIDTH = 002, /* 1=Width must be even. */
59 FCAT_STRING = 004, /* 1=String input/output format. */
60 FCAT_SHIFT_DECIMAL = 010, /* 1=Automatically shift decimal point
61 on output--used for fixed-point
63 FCAT_OUTPUT_ONLY = 020 /* 1=This is not an input format. */
69 int type; /* One of the above constants. */
71 int d; /* Number of implied decimal places. */
92 bool measure_is_valid(enum measure m);
93 bool alignment_is_valid(enum alignment a);
96 /* Descriptions of all the display formats above. */
97 extern struct fmt_desc formats[];
101 /* Maximum length of formatted value, in characters. */
102 #define MAX_FORMATTED_LEN 256
104 /* Flags for parsing formats. */
107 FMTP_ALLOW_XT = 001, /* 1=Allow X and T formats. */
108 FMTP_SUPPRESS_ERRORS = 002 /* 1=Do not emit error messages. */
111 /* Common formats. */
112 extern const struct fmt_spec f8_2; /* F8.2. */
114 int check_input_specifier (const struct fmt_spec *spec, int emit_error);
115 int check_output_specifier (const struct fmt_spec *spec, int emit_error);
116 bool check_specifier_type (const struct fmt_spec *, int type, bool emit_error);
117 bool check_specifier_width (const struct fmt_spec *,
118 int width, bool emit_error);
119 void convert_fmt_ItoO (const struct fmt_spec *input, struct fmt_spec *output);
120 int get_format_var_width (const struct fmt_spec *);
121 int parse_string_as_format (const char *s, int len, const struct fmt_spec *fp,
122 int fc, union value *v);
123 int translate_fmt (int spss);
124 bool data_out (char *s, const struct fmt_spec *fp, const union value *v);
125 char *fmt_to_string (const struct fmt_spec *);
126 void num_to_string (double v, char *s, int w, int d);
127 struct fmt_spec make_input_format (int type, int w, int d);
128 struct fmt_spec make_output_format (int type, int w, int d);
130 #endif /* !format_h */