X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvariable.h;h=a3005cf14d2575cfe6fea8b57e281a003f455f0e;hb=65e61cc92b48297625bc71cf31b8a19e301eb6c1;hp=4a22d2488525a4afeeb511d597406cbb831230a5;hpb=dcf9b154cbcaa35c3d8459a201b77eec8bcb30bd;p=pspp diff --git a/src/data/variable.h b/src/data/variable.h index 4a22d24885..a3005cf14d 100644 --- a/src/data/variable.h +++ b/src/data/variable.h @@ -28,8 +28,6 @@ #include "format.h" #include "missing-values.h" -/* Script variables. */ - /* Variable type. */ enum var_type { @@ -40,6 +38,12 @@ enum var_type const char *var_type_adj (enum var_type); const char *var_type_noun (enum var_type); +/* Maximum lengths of short and long variable names. + Most operations support long variable names, + but some file formats are limited to short names. */ +#define SHORT_NAME_LEN 8 /* Short name length. */ +#define LONG_NAME_LEN 64 /* Long name length. */ + /* A variable's dictionary entry. */ struct variable { @@ -58,8 +62,7 @@ struct variable /* Case information. */ int fv, nv; /* Index into `value's, number of values. */ - bool init; /* True if needs init and possibly reinit. */ - bool reinit; /* True: reinitialize; false: leave. */ + bool leave; /* Leave value from case to case? */ /* Data for use by containing dictionary. */ int index; /* Dictionary index. */ @@ -83,8 +86,9 @@ 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 *); +bool var_is_plausible_name (const char *name, bool issue_error); +int compare_var_names (const void *, const void *, const void *); +unsigned hash_var_name (const void *, const void *); /* Short names. */ void var_set_short_name (struct variable *, const char *); @@ -92,8 +96,8 @@ 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 *); +int compare_var_ptr_names (const void *, const void *, const void *); +unsigned hash_var_ptr_name (const void *, const void *); /* Variable auxiliary data. */ void *var_attach_aux (struct variable *, @@ -121,110 +125,6 @@ struct vector struct variable **var; /* Vector of variables. */ int cnt; /* Number of variables. */ }; - -void discard_variables (void); - -/* This is the active file dictionary. */ -extern struct dictionary *default_dict; - -/* Transformation state. */ - -/* PROCESS IF expression. */ -extern struct expression *process_if_expr; - -/* TEMPORARY support. */ - -/* 1=TEMPORARY has been executed at some point. */ -extern int temporary; - -/* If temporary!=0, the saved dictionary. */ -extern struct dictionary *temp_dict; - -/* If temporary!=0, index into t_trns[] (declared far below) that - gives the point at which data should be written out. -1 means that - the data shouldn't be changed since all transformations are - temporary. */ -extern size_t temp_trns; - -void cancel_temporary (void); - -struct ccase; -void dump_split_vars (const struct ccase *); - -/* Transformations. */ - -/* trns_proc_func return values. */ -#define TRNS_CONTINUE -1 /* Continue to next transformation. */ -#define TRNS_DROP_CASE -2 /* Drop this case. */ -#define TRNS_ERROR -3 /* A serious error, so stop the procedure. */ -#define TRNS_NEXT_CASE -4 /* Skip to next case. INPUT PROGRAM only. */ -#define TRNS_END_FILE -5 /* End of input. INPUT PROGRAM only. */ - -typedef int trns_proc_func (void *, struct ccase *, int); -typedef bool trns_free_func (void *); - -/* A transformation. */ -struct transformation - { - trns_proc_func *proc; /* Transformation proc. */ - trns_free_func *free; /* Garbage collector proc. */ - void *private; /* Private data. */ - }; - -/* Array of transformations */ -extern struct transformation *t_trns; - -/* Number of transformations, maximum number in array currently. */ -extern size_t n_trns, m_trns; - -/* Index of first transformation that is really a transformation. Any - transformations before this belong to INPUT PROGRAM. */ -extern size_t f_trns; - -void add_transformation (trns_proc_func *, trns_free_func *, void *); -size_t next_transformation (void); -bool cancel_transformations (void); - -struct var_set; - -struct var_set *var_set_create_from_dict (const struct dictionary *d); -struct var_set *var_set_create_from_array (struct variable *const *var, - size_t); - -size_t var_set_get_cnt (const struct var_set *vs); -struct variable *var_set_get_var (const struct var_set *vs, size_t idx); -struct variable *var_set_lookup_var (const struct var_set *vs, - const char *name); -bool var_set_lookup_var_idx (const struct var_set *vs, const char *name, - size_t *idx); -void var_set_destroy (struct var_set *vs); - -/* Variable parsers. */ - -enum - { - PV_NONE = 0, /* No options. */ - PV_SINGLE = 0001, /* Restrict to a single name or TO use. */ - PV_DUPLICATE = 0002, /* Don't merge duplicates. */ - PV_APPEND = 0004, /* Append to existing list. */ - PV_NO_DUPLICATE = 0010, /* Error on duplicates. */ - PV_NUMERIC = 0020, /* Vars must be numeric. */ - PV_STRING = 0040, /* Vars must be string. */ - PV_SAME_TYPE = 00100, /* All vars must be the same type. */ - PV_NO_SCRATCH = 00200 /* Disallow scratch variables. */ - }; - -struct pool; -struct variable *parse_variable (void); -struct variable *parse_dict_variable (const struct dictionary *); -int parse_variables (const struct dictionary *, struct variable ***, size_t *, - int opts); -int parse_var_set_vars (const struct var_set *, struct variable ***, size_t *, - int opts); -int parse_DATA_LIST_vars (char ***names, size_t *cnt, int opts); -int parse_mixed_vars (char ***names, size_t *cnt, int opts); -int parse_mixed_vars_pool (struct pool *, - char ***names, size_t *cnt, int opts); /* Return a string representing this variable, in the form most @@ -234,4 +134,7 @@ int parse_mixed_vars_pool (struct pool *, const char * var_to_string(const struct variable *var); +int width_to_bytes(int width); + + #endif /* !variable.h */