tesseract/cutil/variables.h
2007-03-07 20:03:40 +00:00

169 lines
5.9 KiB
C

/* -*-C-*-
********************************************************************************
*
* File: variables.h (Formerly variables.h)
* Description: Variable handler for control flags
* Author: Mark Seaman, OCR Technology
* Created: Tue Dec 12 09:03:49 1989
* Modified: Fri Jan 12 16:57:36 1990 (Mark Seaman) marks@hpgrlt
* Language: C
* Package: N/A
* Status: Experimental (Do Not Distribute)
*
* (c) Copyright 1989, Hewlett-Packard Company.
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** http://www.apache.org/licenses/LICENSE-2.0
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*
*********************************************************************************/
#ifndef VARIABLES_H
#define VARIABLES_H
#include "cutil.h"
#include "oldlist.h"
/*----------------------------------------------------------------------
T y p e s
----------------------------------------------------------------------*/
typedef union
{
float float_part;
int int_part;
void *ptr_part;
const char *char_part;
} VALUE;
class VARIABLE;
typedef void (*variables_io) (VARIABLE * variable, char *string);
class VARIABLE
{
public:
void *address;
const char *string;
VALUE default_value;
variables_io type_reader;
variables_io type_writer;
};
extern VALUE dummy; /* Needed for macros */
/*----------------------------------------------------------------------
M a c r o s
----------------------------------------------------------------------*/
/* To hide variable names for relase to UNLV DONT put the variable names in
the executable: Toggle be either defining or not defining SECURE_NAMES*/
/* #define SECURE_NAMES defined in secnames.h when necessary */
#ifdef SECURE_NAMES
/**********************************************************************
* float_variable
*
* Create a floating point variable that can be read and written from
* a configuration file.
**********************************************************************/
#define float_variable(name,string,default) \
dummy.float_part = default; \
add_32bit_variable (&name, "", dummy, float_read, float_write)
/**********************************************************************
* string_variable
*
* Create a string point variable that can be read and written from
* a configuration file.
**********************************************************************/
#define string_variable(name,string,default) \
dummy.char_part = default; \
add_ptr_variable (&name, "", dummy, string_read, string_write)
/**********************************************************************
* int_variable
*
* Create a int point variable that can be read and written from
* a configuration file.
**********************************************************************/
#define int_variable(name,string,default) \
dummy.int_part = default; \
add_32bit_variable (&name, "", dummy, int_read, int_write)
#else
/**********************************************************************
* float_variable
*
* Create a floating point variable that can be read and written from
* a configuration file.
**********************************************************************/
#define float_variable(name,string,default) \
dummy.float_part = default; \
add_32bit_variable (&name, string, dummy, float_read, float_write)
/**********************************************************************
* string_variable
*
* Create a string point variable that can be read and written from
* a configuration file.
**********************************************************************/
#define string_variable(name,string,default) \
dummy.char_part = default; \
add_ptr_variable (&name, string, dummy, string_read, string_write)
/**********************************************************************
* int_variable
*
* Create a int point variable that can be read and written from
* a configuration file.
**********************************************************************/
#define int_variable(name,string,default) \
dummy.int_part = default; \
add_32bit_variable (&name, string, dummy, int_read, int_write)
#endif
/*--------------------------------------------------------------------------
Public Function Prototoypes
----------------------------------------------------------------------------*/
void free_variables();
void add_ptr_variable(void *address,
const char *string,
VALUE default_value,
variables_io reader,
variables_io writer);
void add_32bit_variable(void *address,
const char *string,
VALUE default_value,
variables_io reader,
variables_io writer);
void float_read(VARIABLE *variable, char *string);
void float_write(VARIABLE *variable, char *string);
void int_read(VARIABLE *variable, char *string);
void int_write(VARIABLE *variable, char *string);
void read_variables(const char *filename);
int same_var_name(void *item1, //VARIABLE *variable,
void *item2); //char *string)
void string_read(VARIABLE *variable, char *string);
void string_write(VARIABLE *variable, char *string);
char *strip_line(char *string);
#endif