You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#if !var_h
#define var_h 1
+
#include <stddef.h>
-#include "bool.h"
+#include "config.h"
+#include <stdbool.h>
#include "format.h"
+#include "missing-values.h"
#include "val.h"
/* Script variables. */
enum
{
NUMERIC, /* A numeric variable. */
- ALPHA /* A string variable. (STRING is pre-empted by lexer.h) */
+ ALPHA /* A string variable.
+ (STRING is pre-empted by lexer.h.) */
};
-/* Types of missing values. Order is significant, see
- mis-val.c:parse_numeric(), sfm-read.c, sfm-write.c,
- sysfile-info.c:cmd_sysfile_info(), mis-val.c:copy_missing_values(),
- pfm-read.c:read_variables(), pfm-write.c:write_variables(),
- apply-dict.c:cmd_apply_dictionary(), and more (?). */
-enum
- {
- MISSING_NONE, /* No user-missing values. */
- MISSING_1, /* One user-missing value. */
- MISSING_2, /* Two user-missing values. */
- MISSING_3, /* Three user-missing values. */
- MISSING_RANGE, /* [a,b]. */
- MISSING_LOW, /* (-inf,a]. */
- MISSING_HIGH, /* (a,+inf]. */
- MISSING_RANGE_1, /* [a,b], c. */
- MISSING_LOW_1, /* (-inf,a], b. */
- MISSING_HIGH_1, /* (a,+inf), b. */
- MISSING_COUNT
- };
-
-#define MAX_VAR_NAME_LEN 8
-
/* A variable's dictionary entry. */
struct variable
{
- char name[MAX_VAR_NAME_LEN + 1]; /* As a string. */
- int index; /* Index into its dictionary's var[]. */
+ /* Basic information. */
+ char name[LONG_NAME_LEN + 1]; /* Variable name. Mixed case. */
int type; /* NUMERIC or ALPHA. */
-
int width; /* Size of string variables in chars. */
int fv, nv; /* Index into `value's, number of values. */
unsigned init : 1; /* 1=VFM must init and possibly reinit. */
unsigned reinit : 1; /* Cases are: 1=reinitialized; 0=left. */
+ /* Data for use by containing dictionary. */
+ int index; /* Dictionary index. */
+
/* Missing values. */
- int miss_type; /* One of the MISSING_* constants. */
- union value missing[3]; /* User-missing value. */
+ struct missing_values miss; /* Missing values. */
/* Display formats. */
struct fmt_spec print; /* Default format for PRINT. */
struct val_labs *val_labs; /* Value labels. */
char *label; /* Variable label. */
+ /* GUI display parameters. */
+ enum measure measure; /* Nominal ordinal or continuous */
+ int display_width; /* Width of data editor column */
+ enum alignment alignment; /* Alignment of data in gui */
+
+ /* Short name, used only for system and portable file input
+ and output. Upper case only. There is no index for short
+ names. Short names are not necessarily unique. Any
+ variable may have no short name, indicated by an empty
+ string. */
+ char short_name[SHORT_NAME_LEN + 1];
+
/* Per-command info. */
void *aux;
void (*aux_dtor) (struct variable *);
};
+/* Variable names. */
bool var_is_valid_name (const char *, bool issue_error);
int compare_var_names (const void *, const void *, void *);
unsigned hash_var_name (const void *, void *);
+
+/* Short names. */
+void var_set_short_name (struct variable *, const char *);
+void var_set_short_name_suffix (struct variable *, const char *, int suffix);
+void var_clear_short_name (struct variable *);
+
+/* Pointers to `struct variable', by name. */
int compare_var_ptr_names (const void *, const void *, void *);
unsigned hash_var_ptr_name (const void *, void *);
+/* Variable auxiliary data. */
void *var_attach_aux (struct variable *,
void *aux, void (*aux_dtor) (struct variable *));
void var_clear_aux (struct variable *);
struct vector
{
int idx; /* Index for dict_get_vector(). */
- char name[9]; /* Name. */
+ char name[LONG_NAME_LEN + 1]; /* Name. */
struct variable **var; /* Vector of variables. */
int cnt; /* Number of variables. */
};
\f
-\f
void discard_variables (void);
/* This is the active file dictionary. */
void cancel_temporary (void);
\f
-/* Functions. */
-
struct ccase;
void dump_split_vars (const struct ccase *);
-typedef int (* is_missing_func )(const union value *, const struct variable *);
-
-int is_num_user_missing (double, const struct variable *);
-int is_str_user_missing (const unsigned char[], const struct variable *);
-int is_missing (const union value *, const struct variable *);
-int is_system_missing (const union value *, const struct variable *);
-int is_user_missing (const union value *, const struct variable *);
-void copy_missing_values (struct variable *dest, const struct variable *src);
\f
/* Transformations. */