reference/ocr-new/system.cc
author viric@llimona
Thu, 18 May 2006 23:12:51 +0200
changeset 0 6b8091ca909a
permissions -rw-r--r--
Init from working directory of svn repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     1
#include "system.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
#include "Point.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
// Global Variables
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     6
Point NOPNT(-1,-1);      // Used for default entries
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     7
/* Global variables used to fine tune OCR.  These can be adjusted
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
   without recompiling by setting them in link_vars.tcl */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
int NoiseTolerance = 1;      // Minumum number of pixels in a line of text
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
int MinLineSize = 5;        // Minimum number of rows in a line of text
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
int MinVertSeparation = 0;  // Minimum number of rows between lines of text
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    12
int MinHorizSeparation = 1; // Minimum number of cols between characters
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    13
int ConfidenceThreshold = 150; //Minimum confidence for some operations
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    14
int JoinTolerance = 6;        // Max number of pixels joining fused chars.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    15
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    16
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
/* Number of properties in property vector for Components **/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
int numProperties = 30;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    20
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    21
/* Grid size for gray scale analysis */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
int NumHorizDiv = 5;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
int NumVertDiv = 5;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
// The next four are used in character grouping set in Page::extractComponents
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
/* Group 0 - amo
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
   Group 1 - Descenders yjp
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    28
   Group 2 - Ascenders JPK
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    29
   Group 3 - Both descenders and Ascenders ()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    30
   Group 4 - floaters * - `
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    31
*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
unsigned int NumCharGroups=5; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
int MaxVertSize = 50;        // Max vert pixels in char (used for baseline)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
int BaseLineTolerance = 10;  // How far in 1/x of line size from base is okay
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
int TopLineTolerance  = 10; // How far in 1/x of line size from top is okay
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
                                // 20 = 5%, 10 = 10%
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
int MinComponentSize = 16;  // Minimum number of pixels in smallest character
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
uchar CharBitsSet[256];    // Table of number of bits set in each num 0-256
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
                           // Used for determining gray scale and pixel counts
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    42
/** Some globals set in learn() or readLearnedChars(). These are just starting
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    43
     values  **/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
double MaxHWRatio = 0.0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
double MinHWRatio = 1000; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
int MinWidth = 1000;        // Min component width in learned set
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    52
Component * LearnedChars;   // Learned character averages  /** NOT USED **/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    53
Components * LearnedGroups=NULL; //Learned character list array by group type
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    54
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    56
/*** Some values for TCL/TK interface.  These variables can be 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    57
   set in the file link_vars.tcl without recompiling ***/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
int ENABLE_USER_INTERFACE = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
int VERY_LOW_CONFIDENCE = 150;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    61
int LOW_CONFIDENCE = 200;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    62
int DISPLAY_LINE_BOUNDARIES = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    63
int DISPLAY_BOUNDING_BOXES = 0;  // boxes around components 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    64
int SPELLCHECK = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    65
int DISPLAY_IMAGE = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    66
int DESKEW_METHOD = BITMAP_DESKEW;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
double ZONING_SCALE_FACTOR = .50;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
double SCALE_FACTOR = 0.5;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    69
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    70
TclMode mode = REGULAR;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    72
void initCharBitsSet()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    73
// Initializes lookup table for the number of bits set in a uchar
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
  int pixCount;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
  for (int c = 0; c<256;c++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    77
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    78
	pixCount = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
	for (int i = 7; i >=0; i--)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
	  pixCount +=((c>>i)&1);      // if this is a black pixel
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
	CharBitsSet[c]=pixCount;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    83
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    84
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    85
char* backslashify(char* w)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    86
/* backslashes all $ " [] {} () */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    87
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    88
  int length = strlen(w);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    89
  char* new_word = (char*)malloc(length*2);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    90
  int new_word_pos = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    91
  for(int i = 0; i < length; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    92
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    93
      if((w[i] == '$') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    94
	 (w[i] == '[') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    95
	 (w[i] == ']') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    96
	 (w[i] == '\\') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    97
	 (w[i] == '{') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    98
	 (w[i] == '}') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    99
	 (w[i] == '(') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   100
	 (w[i] == ')') ||
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   101
	 (w[i] == ';'))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   102
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   103
	  new_word[new_word_pos] = '\\';
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   104
	  new_word[new_word_pos+1] = w[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   105
	  new_word_pos += 2;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   106
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   107
      else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   108
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   109
	  new_word[new_word_pos] = w[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   110
	  new_word_pos += 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   111
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   112
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   113
  new_word[new_word_pos] = '\0';
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   114
  return new_word;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   115
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   116
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   117
void invertBitsInBuffer(uchar * buf, int size)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   118
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   119
  for(int i = 0; i < size; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   120
    buf[i] = ~buf[i] ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   121
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   122
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   123
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   124
void clearBitsInBuffer(uchar * buf, int size)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   125
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   126
  for(int i = 0; i < size; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   127
      buf[i]=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   128
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   129
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   130
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   131
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   132
short int countBitsSet(uchar c)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   133
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   134
  int pixCount = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   135
/*
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   136
  for (int i = 7; i >=0; i--)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   137
    pixCount +=((c>>i)&1);      // if this is a black pixel
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   138
*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   139
  if (!(CharBitsSet['f']))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   140
      initCharBitsSet();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   141
  return CharBitsSet[c];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   142
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   143
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   144
int pixelsBetween(uchar * ar, int start, int end)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   145
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   146
 // Counts the number of black pixels between start and end
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   147
  int startCharNum = start / 8;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   148
  int endCharNum = end / 8 ; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   149
  int pixCount=0, startOffset, endOffset;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   150
  uchar nextChar;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   151
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   152
  startOffset = start - startCharNum*8;  // first bit of range in first char
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   153
  endOffset = end- endCharNum*8 + 1 ; // first bit after end in last char
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   154
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   155
     // count the whole characters
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   156
      for (int i = startCharNum + 1; i < endCharNum; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   157
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   158
	  nextChar = ar[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   159
	  pixCount += countBitsSet(nextChar);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   160
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   161
	  // Now add in end peices
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   162
	  // Get our part of the starting character
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   163
	  // Add in just the last part of the  char (get rid of hi bits)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   164
	  nextChar = ar[startCharNum] << startOffset;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   165
	  if (startCharNum != endCharNum )
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   166
             {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   167
	       pixCount += countBitsSet(nextChar);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   168
	       // Get our part of the ending character, 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   169
	       // Add in just the first endOffset bits (get rid of lo bits)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   170
	       nextChar = ar[endCharNum] >> (8 - endOffset);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   171
	       pixCount += countBitsSet(nextChar);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   172
	     }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   173
         else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   174
	   {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   175
	     // just shift the adjusted starting char
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   176
	     int shift = (8-endOffset)+startOffset;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   177
	     pixCount += countBitsSet(nextChar >> shift);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   178
	   }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   179
  return pixCount;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   180
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   181
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   182
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   183
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   184
void setRange(uchar ar[], int start, int end)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   185
// Sets bits from position start to position end 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   186
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   187
  int startCharNum = start / 8;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   188
  int endCharNum = end / 8 ; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   189
  int startOffset, endOffset;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   190
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   191
  startOffset = start - startCharNum*8;  // first bit of range in first char
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   192
  endOffset = end- endCharNum*8 + 1 ; // first bit after end in last char
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   193
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   194
     // set the whole characters
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   195
      for (int i = startCharNum + 1; i < endCharNum; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   196
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   197
	  ar[i] = 255;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   198
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   199
	  // Now set end peices
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   200
	  if (startCharNum != endCharNum )
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   201
             {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   202
	       ar[startCharNum] |=  (255 >> startOffset);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   203
	       ar[endCharNum] |= (255 << (8 - endOffset));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   204
	     }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   205
         else  // start and end char are the same
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   206
	   {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   207
	     char mask = 255 >> startOffset;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   208
	     mask  &= 255 << (8-endOffset);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   209
	     ar[endCharNum] |= mask;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   210
	   }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   211
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   212
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   213
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   214
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   215
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   216
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   217
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   218
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   219
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   220
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   221
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   222
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   223
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   224
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   225
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   226
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   227
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   228
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   229
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   230
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   231
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   232
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   233
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   234
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   235
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   236
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   237
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   238
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   239
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   240
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   241
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   242