struct LearndDaten
{
 unsigned char Zeichen[4];   /* max. 3 gelernte Zeichen */
 unsigned char WsaAchsenWerte[128];
 unsigned char Klasse;     /* Abstandsklasse zum UrSprung */
 unsigned char Elemente;   /* Elementeanzahl*/
 unsigned char Flag;       /* 
                             Bit 0  : x-Spiegel 
                             Bit 1  : y-Spiegel 
                             Bit 2  : untergrosses Zeichen
                             Bit 3  : obergrosses Zeichen
                             Bit 4-7: =0 
                           */                          
};

struct  LearndListe
{
 struct LearndDaten Daten;
 struct LearndListe *NextPtr;
 struct LearndListe *JumpPtr;
 long Wert;
};

struct BitBlockListe
{
 long xx,yy,x,y,Bytes_pro_Zeile,dx,dy,ddx;
 long Startx,Starty;
 short int Bild,Geloescht;
 long SpaltenNummer;
 long SegmentNummer;
 short int Elemente,Klasse;
 short int XSpiegel,YSpiegel;
 long Untere_Zeile,Obere_Zeile;
 char Text[4];
 unsigned char BildDaten[32];
 short int WsaAchsenWerte[128];
 struct BitBlockListe *NextPtr,*NextSegmentBlockPtr,*NextPtrInSegment;
 struct BitBlockListe *NextZeileInSegment,*NextPtrInZeile;
}; 

struct LearndListe  *AnalysiereAlleWerteEinesSegments();
void WoerterbuchUndSemantikCheck();
void SpeichereGelerntesZeichen();
void Bloecke_in_Segmente();
void FindeZeilen();
void VerschmelzeBitBloeckeInZeile();
void VergleicheAufSymetrieUndWsa();
void Finde_SegmentBloecke();
unsigned long leselong();
void Finde_Bloecke();
void OcrInit();
void MemoryError();
