⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 variables.cpp

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 CPP
字号:
/* -*-C-*- ******************************************************************************** * * File:        variables.c  (Formerly variables.c) * Description:  Variable handler for control flags * Author:       Mark Seaman, OCR Technology * Created:      Tue Dec 12 09:03:49 1989 * Modified:     Thu Apr  4 11:01:37 1991 (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. * *********************************************************************************//*----------------------------------------------------------------------          I n c l u d e s----------------------------------------------------------------------*/#include <stdio.h>#include <stdlib.h>#include "variables.h"#include "callcpp.h"#include "listio.h"#include "globals.h"#include "scanutils.h"/*----------------------------------------------------------------------          V a r i a b l e s----------------------------------------------------------------------*/static LIST variable_list = NIL;//extern char                                   *demodir;VALUE dummy;/*----------------------------------------------------------------------            Macros----------------------------------------------------------------------*//********************************************************************** * scan_int * * Scan in an integer value from a string.  It might be in decimal or * hex.  Read it into "integer". **********************************************************************/#define scan_int(stripped,integer)             \if (stripped [2] == 'x')                     \	sscanf (&stripped[3], "%x", &integer);    \else                                         \	sscanf (&stripped[1], "%d", &integer)/*----------------------------------------------------------------------          F u n c t i o n s----------------------------------------------------------------------*/void free_variables() {  destroy_nodes(variable_list, free);  variable_list = NIL;}/********************************************************************** * add_ptr_variable * * Add a new ptr variable to the global variable list.  Initalize its * value. **********************************************************************/void add_ptr_variable(void *address,                      const char *string,                      VALUE default_value,                      variables_io reader,                      variables_io writer) {  VARIABLE *this_var;  this_var = (VARIABLE *) malloc (sizeof (VARIABLE));  this_var->address = address;  this_var->string = string;  this_var->default_value = default_value;  this_var->type_reader = reader;  this_var->type_writer = writer;  *((void **) this_var->address) = default_value.ptr_part;  variable_list = push (variable_list, this_var);}/********************************************************************** * add_32bit_variable * * Add a new 32bit variable to the global variable list.  Initalize * its value. **********************************************************************/void add_32bit_variable(void *address,                        const char *string,                        VALUE default_value,                        variables_io reader,                        variables_io writer) {  VARIABLE *this_var;  this_var = (VARIABLE *) malloc (sizeof (VARIABLE));  this_var->address = address;  this_var->string = string;  this_var->default_value = default_value;  this_var->type_reader = reader;  this_var->type_writer = writer;  *((int *) this_var->address) = default_value.int_part;  variable_list = push (variable_list, this_var);}/********************************************************************** * float_read * * Read an integer value and save it in a variable structure. **********************************************************************/void float_read(VARIABLE *variable, char *string) {  float f;  #ifdef EMBEDDED    // We have no sscanf with float functionality here    *((float *) variable->address) = strtofloat(strip_line (string));  #else    sscanf (strip_line (string), "%f", &f);    *((float *) variable->address) = f;  #endif}/********************************************************************** * float_write * * Read an integer value and save it in a variable structure. **********************************************************************/void float_write(VARIABLE *variable, char *string) {  float *f;  f = (float *) variable->address;  sprintf (string, "%s\t%4.2f", variable->string, *f);}/********************************************************************** * int_read * * Read an integer value and save it in a variable structure. **********************************************************************/void int_read(VARIABLE *variable, char *string) {  char *stripped;  int integer;  stripped = strip_line (string);  /* Add the value */  if (stripped[0] == '+') {    scan_int(stripped, integer);    *((int *) variable->address) += integer;  }  else if (stripped[0] == '|') {    scan_int(stripped, integer);    *((int *) variable->address) = integer | *((int *) variable->address);  }                              /* Subtract the value */  else if (stripped[0] == '_') {    scan_int(stripped, integer);    *((int *) variable->address) = (~integer) &      *((int *) variable->address);  }  else {                                 /* Set the value */    if (stripped[1] == 'x') {      sscanf (&stripped[2], "%x", &integer);    }    else {      sscanf (stripped, "%d", &integer);    }    *((int *) variable->address) = integer;  }}/********************************************************************** * int_write * * Read an integer value and save it in a variable structure. **********************************************************************/void int_write(VARIABLE *variable, char *string) {  sprintf (string, "%s\t%d", variable->string, *((int *) variable->address));}/********************************************************************** * read_variables * * Read a file that contains assignments for all the desired variables. * This type of file can be written using the function write_variables. **********************************************************************/void read_variables(const char *filename) {  int x = 0;  char *this_string;  LIST var_strings;  char name[1024];  FILE *fp;  VARIABLE *this_var;  /* Read the strings */  if (filename == NULL || filename[0] == '\0')    return;  strcpy(name, demodir);  strcat (name, "tessdata/tessconfigs/");  strcat(name, filename);  if ((fp = fopen (name, "r")) == NULL)    strcpy(name, filename);  else    fclose(fp);  var_strings = read_list (name);  iterate(var_strings) {    /* Get the name string */    this_string = (char *) first (var_strings);    if (this_string[0] != '#') {      for (x = 0;        x < strlen (this_string) && this_string[x] != ' '        && this_string[x] != '\t'; x++);      this_string[x] = '\0';      /* Find variable record */      this_var = (VARIABLE *) first (search (variable_list, this_string,        same_var_name));      if (this_var == 0) {        cprintf ("error: Could not find variable '%s'\n", this_string);        exit (1);                //?err_exit ();      }      /* Read the value */      this_string[x] = '\t';      (*(this_var->type_reader)) (this_var, this_string);    }  }}/********************************************************************** * same_var_name * * Return TRUE if the VARIABLE has the name string in it. **********************************************************************/int same_var_name(void *item1,    //VARIABLE *variable,                  void *item2) {  //char     *string)  VARIABLE *variable;  char *string;  variable = (VARIABLE *) item1;  string = (char *) item2;  if (strcmp (variable->string, string))    return (FALSE);  else    return (TRUE);}/********************************************************************** * string_read * * Read an integer value and save it in a variable structure. **********************************************************************/void string_read(VARIABLE *variable, char *string) {  char *value;  value = strsave (strip_line (string));  *((char **) variable->address) = value;}/********************************************************************** * string_write * * Read an integer value and save it in a variable structure. **********************************************************************/void string_write(VARIABLE *variable, char *string) {  sprintf (string, "%s\t%s", variable->string,    *((char **) variable->address));}/********************************************************************** * strip_line * * Remove the name off the front of the line and strip the white space * before and after the value. **********************************************************************/char *strip_line(char *string) {  int x;  int y;  /* Skip over name */  for (x = 0;    x < strlen (string) && string[x] != '\t' && string[x] != ' '; x++);  /* Skip over whitespace */  while (x < strlen (string) && (string[x] == '\t' || string[x] == ' '))    x++;  /* Strip trailing whitespace */  for (y = strlen (string);    y >= 0 && (string[y - 1] == '\t' || string[y - 1] == ' '); y--)  string[y] = '\0';  /* Return result */  return (&string[x]);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -