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
29 #include "missing-values.h"
34 NUMERIC, /* A numeric variable. */
35 ALPHA /* A string variable. */
38 const char *var_type_adj (enum var_type);
39 const char *var_type_noun (enum var_type);
41 /* Maximum lengths of short and long variable names.
42 Most operations support long variable names,
43 but some file formats are limited to short names. */
44 #define SHORT_NAME_LEN 8 /* Short name length. */
45 #define LONG_NAME_LEN 64 /* Long name length. */
47 /* A variable's dictionary entry. */
50 /* Dictionary information. */
51 char name[LONG_NAME_LEN + 1]; /* Variable name. Mixed case. */
52 enum var_type type; /* NUMERIC or ALPHA. */
53 int width; /* Size of string variables in chars. */
54 struct missing_values miss; /* Missing values. */
55 struct fmt_spec print; /* Default format for PRINT. */
56 struct fmt_spec write; /* Default format for WRITE. */
57 struct val_labs *val_labs; /* Value labels. */
58 char *label; /* Variable label. */
59 enum measure measure; /* Nominal, ordinal, or continuous. */
60 int display_width; /* Width of data editor column. */
61 enum alignment alignment; /* Alignment of data in GUI. */
63 /* Case information. */
64 int fv, nv; /* Index into `value's, number of values. */
65 bool leave; /* Leave value from case to case? */
67 /* Data for use by containing dictionary. */
68 int index; /* Dictionary index. */
70 /* Short name, used only for system and portable file input
71 and output. Upper case only. There is no index for short
72 names. Short names are not necessarily unique. Any
73 variable may have no short name, indicated by an empty
75 char short_name[SHORT_NAME_LEN + 1];
77 /* Each command may use these fields as needed. */
79 void (*aux_dtor) (struct variable *);
81 /* Values of a categorical variable. Procedures need
82 vectors with binary entries, so any variable of type ALPHA will
83 have its values stored here. */
84 struct cat_vals *obs_vals;
88 bool var_is_valid_name (const char *, bool issue_error);
89 bool var_is_plausible_name (const char *name, bool issue_error);
90 int compare_var_names (const void *, const void *, const void *);
91 unsigned hash_var_name (const void *, const void *);
94 void var_set_short_name (struct variable *, const char *);
95 void var_set_short_name_suffix (struct variable *, const char *, int suffix);
96 void var_clear_short_name (struct variable *);
98 /* Pointers to `struct variable', by name. */
99 int compare_var_ptr_names (const void *, const void *, const void *);
100 unsigned hash_var_ptr_name (const void *, const void *);
102 /* Variable auxiliary data. */
103 void *var_attach_aux (struct variable *,
104 void *aux, void (*aux_dtor) (struct variable *));
105 void var_clear_aux (struct variable *);
106 void *var_detach_aux (struct variable *);
107 void var_dtor_free (struct variable *);
109 /* Classes of variables. */
112 DC_ORDINARY, /* Ordinary identifier. */
113 DC_SYSTEM, /* System variable. */
114 DC_SCRATCH /* Scratch variable. */
117 enum dict_class dict_class_from_id (const char *name);
118 const char *dict_class_to_name (enum dict_class dict_class);
120 /* Vector of variables. */
123 int idx; /* Index for dict_get_vector(). */
124 char name[LONG_NAME_LEN + 1]; /* Name. */
125 struct variable **var; /* Vector of variables. */
126 int cnt; /* Number of variables. */
130 /* Return a string representing this variable, in the form most
131 appropriate from a human factors perspective.
132 (IE: the label if it has one, otherwise the name )
134 const char * var_to_string(const struct variable *var);
137 int width_to_bytes(int width);
140 #endif /* !variable.h */