vim:set tw=70; set ft=text; set ai

########################################################################
#          PRÜFZIFFERBERECHNUNG VON DEUTSCHEN KONTONUMMERN             #
#                           C-/Perl/PHP-Bibliothek                     #
########################################################################
#                                                                      #
# Autor             : Michael Plugge <m.plugge@hs-mannheim.de>         #
# Version           : 2.95                                             #
# Datum             : 13.01.2009                                       #
########################################################################

Versionen der deutschen Bibliothek:

  01.05.02  Version 0.1:
                 erste Version (nur privat, wenige Methoden)

  13.06.02  Version 0.2:
                 Berechnungsmethoden umgeschrieben, zusätzliche
                 Methoden eingefügt.

                 Jede implementierte Methode wird mit dem Perl-Modul
                 Business::konto.pm von Andreas Butzko
                 <andreas@butzko.net> mit mindestens 40000
                 Testkontonummern (oft auch mehr) getestet.

  10.07.02  Version 0.3:
                 weitere Berechnungsmethoden; zusätzliche Datei
                 blz_utils.c mit diversen Hilfsfunktionen für
                 (wesentlich) schnelleren Zugriff auf die Prüfziffer-
                 methoden (unter VMS ergab sich für eine Testdatei mit
                 knapp 200 Einträgen eine Beschleunigung von 4,9s auf
                 0,13s (mit einem remote filesystem); bei Linux (mit
                 lokalem Filesystem und blz.txt/blz.lut im Cache) von
                 175 ms auf 2,4 ms).

                 Für die Brechnung wird nicht mehr auf die Datei der
                 Deutschen Bundesbank zugegriffen, sondern nur noch
                 auf eine generierte Binärdatei (blz.lut); sie kann
                 mit der Funktion generate_lut() aus der Bundesbank-
                 datei erzeugt werden.

 ----------------------------------------------------------------------

  13.9.02  Version 1.0:
                 Die Berechnungsmethoden sind jetzt komplett;  bis
                 auf Methode 87 (Pascalcode) wurden alle Methoden mit
                 dem Perl-Modul konto.pm mit jeweils ca. 50000...
                 100000 Testkontonummern überprüft (dabei wurden auch
                 einige Fehler im Perl-Modul aufgedeckt und
                 beseitigt).

                 Die Funktionen aus blz_utils.c sind jetzt in die
                 Hauptdatei integriert; diese kann als stand-alone
                 Programm oder als library verwendet werden.

   10.10.02 Version 1.0.1:
                 Einige kleine Fehler wurden noch korrigiert und die
                 main() Funktion etwas erweitert.

   06.11.02 Version 1.0.2:
                 main() Routine mit Hilfefunktion, DOS-Exe in das
                 pub-Verzeichnis

   04.02.03 Version 1.0.3:
                 Bugfixes:
                 - Fehler in den Methoden 47, 52, 87 und 93 behoben
                 - falls der 1. Parameter (BLZ/Prüfziffermethode) nur
                   zweistellig angegeben wird, wurde die Funktion
                   init_w() nicht aufgerufen, so daß etliche Varibalen
                   undefiniert blieben.
                 - Lizenzbedingungen: Unterschied der LGPL zur normalen
                   GPL im readme und am Programmanfang deutlicher
                   gesagt (nicht nur Hinweis auf den Text)
                 - neues blz.lut aus der Datei blz0212.exe

   13.03.03 Version 1.1.0:
                 Bugfixes:
                 - Methode 95: Ausnahmekonten 0001999999 etc. gelten als
                   richtig (ohne Test; Im Vergleich wurde auf kleiner
                   getestet statt auf kleiner/gleich)

                 Weitere Änderungen:
                 - Die Konstanten MAYBE_OK/MAYBE_FALSE werden nicht
                   mehr benutzt und wurden entfernt (dadurch ändern
                   sich die numerischen Rückgabewerte, nicht jedoch die
                   symbolischen).
                 - Datei konto_check.h geschrieben mit public interface
                   und möglichen Rückgabewerten.
                 - die Methode A1 wird zum 9.6.2003 geändert; das neue
                   Berechnungsverfahren kann über eine globale Variable
                   ausgewählt werden.
                 - Die Methoden A2...A5 wurden implementiert (neue
                   Verfahren)
                 - Neues Dateiformat für die Datei blz.lut: sie enthält
                   jetzt eine Infozeile, in der das Erzeugungsdatum
                   und der Name der ursprünglichen Bankleitzahlendatei
                   festgehalten wird.
                 - neue Funktionen get_lut_info(): gibt (beim neuen
                   Format) die Infozeile der LUT-Datei zurück.
                 - neue Funktion get_kto_check_version() zur Versions-
                   kontrolle
                 - main() Routine in eigene Datei ausgelagert
                 - Test von Untermethoden mit dreistelliger "BLZ"

   25.03.03 Version 1.1.1:
                 - zusätzlicher Test in read_lut(), ob die LUT-Datei
                   gelesen wurde.
                 - eine Reihe Untermethoden wurde anders numeriert
                   (dies betrifft nur die Debug-Version und ist nur für
                   Tests relevant; es hat keine Auswirkung auf das
                   normale Programm).
                 - neue Variable pz_str (char[4]), in der die benutzte
                   Prüfmethode und Untermethode zurückgegeben wird.
                   Falls die Untermethode unerwünscht ist, kann sie mit
                   pz_str[2]=0 gelöscht werden.
                   Die Methode entspricht der Notation der Deutschen
                   Bundesbank (00 bis A5), für die Untermethoden werden
                   kleine Buchstaben benutzt (a, b, c...).

   10.06.03 Version 1.1.2:
                 - Fehler in Methode 21 behoben (Quersumme der Faktoren
                   fehlte)
                 - Methode A1 auf neues Berechnungsverfahren umgestellt
                 - (Bei dem Generator für die Testkonten wurde noch
                   einige Pattern berichtigt)

   28.01.04 Version 1.1.3 (aus 2.0-Alpha1 hinzugefügt in 1.1.2)=
                 - Die Fehler in Methode 76.2 und 80 (s.u., Version
                   2.0-Alpha1 wurden korrigiert

                 - Die neu definierten Methoden (A6 bis A9) sind jetzt
                   iplementiert.

                 - Methode A1 alt gelöscht

   12.10.04 Version 1.1.4 (aus 2.0-Beta-1)
                 - Methoden B1 und B2 neu
                 - Marker für vim folding eingeführt

   16.12.04 Version 1.1.5 (aus 2.0-Beta-2)
                 - Methoden B0 und B3 neu

 ----------------------------------------------------------------------

   16.01.04 Version 2.0-Alpha-1
                 - Geschwindigkeitsoptimierung aller Methoden sowie der
                   Hilfsfunktionen und der main() Routine

                 - Methode 80: Der Sonderfall mit 99 an der 3. und 4.
                   Stelle wird jetzt nur noch für die Variante 2
                   angenommen, nicht global.

                 - In Methode 76.2 wurde die 1. Stelle auf 1,2,3,5
                   getestet; aufgrund der Verschiebung muß jedoch die
                   3. Stelle getestet werden.

                 - Die neu definierten Methoden (A6 bis A9) sind jetzt
                   iplementiert.

                 - Methode A1 alt gelöscht

   16.01.04 Version 2.0-Alpha-2
                 - DLL-Support für Windows eingeführt

   12.10.04 Version 2.0-Beta-1
                 - Methoden B1 und B2 neu
                 - Marker für vim folding eingeführt

   16.12.04 Version 2.0-Beta-2
                 - library threadfest gemacht (optional; noch Testphase)
                 - Methoden B0 und B3 neu

   06.08.05 Version 2.0 final
                 - Makefiles aktualisiert
                 - sharable library für Linux/Unix
                 - Fehler bei BLZ-Lookup beseitigt (nicht existierende
                   BLZ wurde u.U. auf die 1. BLZ-Methode geführt)
                 - Methoden B1, B2 und B4 bis B8 neu implementiert
                 - Die Datei pruefziffermethoden_0509.pdf wurde noch
                   einmal mit den implementierten Methoden verglichen;
                   die Methoden 73, 80, 81, 84, 86, 87, 90, 91, A4, A8
                   wurden danach aktualisiert
                 - Variable methode_a1_alt herausgenommen (obsolet)
                 - set_globals() an mehreren Stellen in
                   generate_lut() eingefügt (in der threadfesten
                   Version wurde der Rückgabetext nicht in die
                   globalen Variablen eingesetzt, da die Funktion
                   direkt aufgerufen wird).

   01.12.05 Version 2.0.1
                 - Methoden B9 und C0 implementiert

   26.05.06 Version 2.0.2
                 - Methoden C1 und C2 implementiert
                 - neues BLZ-Dateiformat (Bundesbank) eingebaut
                 - Variable methode_a1_alt gelöscht

   23.08.06 Version 2.0.3
                 - Default für lut_version in generate_lut() auf 2
                   (vorher war kein Defaultwert definiert; bei einem
                   ungültigem Wert für lut_version wurde eine fehler-
                   hafte blz.lut Datei generiert, jedoch fälschlich OK
                   zurückgegeben.

   20.11.06 Version 2.0.4
                 - falsche Berechnung in Methode B6 korrigiert
                 - falsche Berechnung in Methode 74b korrigiert

   13.03.07 Version 2.0.5
                 - Methoden C3 und C4 implementiert

   26.05.07 Version 2.1
                 - falls die LUT-Datei nicht gefunden wurde, stürzte
                   das Programm beim nächsten Aufruf mit einer access
                   violation ab; korrigiert.
                 - falls als Dateiname für die LUT-Datei ein Leerstring
                   angegeben wird, wird jetzt der Defaultname benutzt.
                 - die main() Routine kann jetzt auch im Filterbetrieb
                   arbeiten
                 - Fehler in Methode 74 beseitigt: wenn die Unterkonto-
                   nummer nicht angegeben war, wurde bei einer Prüf-
                   ziffer von 10 gleich INVALID_KTO zurückgegeben, statt
                   den Test mit Unterkontonummer "00" zu wiederholen.
                 - einige Deklarationen mit long ersetzt durch INT4,
                   da auf 64 Bit Systemen Probleme entstanden (betrifft
                   vor allem die Funktion adler32)
                 - erste Perl-Version mittels h2xs generiert
                 - einige Anpassungen für Perl, Perl Dokumentation


   22.08.07 Version 2.2
                    Diese Version ist nur ein Zwischenrelease, um die
                    neu definierten Prüfmethoden C5 und C6, die ab
                    September gültig werden, in die Library einzufügen.
                    Ansonsten wurden in der kleinere Details geändert.
                    Die Threadfestigkeit wurde zwar angegangen, ist bis
                    jetzt allerdings nur in der Entwicklerversion
                    implementiert (braucht noch einige Tests).

                  - Methoden C5 und C6 implementiert
                  - einige Aufräumarbeiten, unbenutzte Prototypen für
                    das LUT2 Datei-Format entfernt. Die Funktionen
                    werden in der nächsten größeren Version eingeführt.

   25.08.07 Version 2.3
                    Bugfix-Release für den Perl-Port von Version 2.2. 

                  - In Version 2.2 (Perl) fehlten die beiden Dateien
                    testkonten.txt und testkonten-at.txt. Bei make test ein
                    Fehler zurückgeliefert (eigentlich unkritisch, aber nicht
                    sehr schön).

                  - neuer Rückgabewert OK_TEST_BLZ_USED für die Methoden 52,
                    53, B6 und C0 (keine Warnung mehr nach stderr, falls die
                    Prüfziffermethode direkt angegeben wird, ohne BLZ).
   13.11.07 Version 2.4
                   Diese Version ist wieder ein Zwischenrelease, um die
                   neu definierte Prüfmethode C7 (gültig ab Dezember)
                   in die Library einzufügen; außerdem wurde ein Fehler
                   in der Methode B9 beseitigt.

                 - Methoden C7 implementiert

                 - In Methode B9 war für den Test auf 3 führende Nullen
                   irrtümlich if(kto[3]!='0') (statt if(kto[2]!='0') )
                   geschrieben; korrigiert.

                 - Die Funktion kto_check_test_vars() gibt den Wert
                   der übergebenen Variablen auch in einem String
                   zurück, um so auch Anwendungen zu unterstützen, die
                   die Ausgabe von stderr unterdrücken (insbesondere
                   DLL-Anwendungen unter Windows).

                 - neue Funktion kto_check_str(), die dieselbe Funktio-
                   nalität hat wie kto_check(), jedoch als Rückgabe
                   einen kurzen String als Ergebnis liefert (war schon
                   in 2.2 eingeführt).

   16.02.08 Version 2.5
                   Diese Version ist ein Übergangsrelease, da in der
                   Version 3.0 sehr viel Code neu geschrieben wurde;
                   die Version 2.5 enthält noch den alten Code mit
                   einigen kleineren Bugfixes und kann als stabile
                   Variante angesehen werden (3.0 ist noch etwas
                   experimentell, und macht unter Windows in Zusammen-
                   hang mit VB ziemlig Probleme; die C- und Perlversion
                   scheinen dagegen zu laufen).

                 - Methode 50b wird nur noch angewendet, falls die
                   Kontonummer nicht mehr als sieben Stellen hat; nur
                   in dem Fall scheint es möglich zu sein, daß ein
                   Unterkonto weggelassen wurde.

                 - Bei Methode 74b wird die Prüfziffer (aus der 10.
                   Stelle) modulo 5 genommen, da bei mindestens einer
                   Bank Prüfziffern für 74b >5 vorkommen.

                 - Falls in der Bundesbankdatei für eine Bank mehrere
                   Prüfverfahren angegeben sind, wird das der Haupt-
                   stelle benutzt. Die alte Version nutzte als Prüf-
                   zifferverfahren dasjenige, das in der Bankdatei als
                   letztes aufgeführt wurde; dieses ist oft von einer
                   Nebenstelle und ist somit i.A. nicht korrekt.

   10.04.08 Version 2.6
                   Diese Version ist wieder ein Zwischenrelease zur
                   Version 3.0, da zum nächsten Termin am 9.6.2008 zwei
                   neue Prüfziffermethoden eingeführt wurden. Die
                   erste Betaversion zu 3.0 (2.91) wird praktisch
                   gleichzeitig mit dieser Version freigegeben.

                 - Methoden C8 und C9 implementiert

                 - in der Funktion read_lut() wurde Speicher allokiert,
                   der im Fehlerfall nicht wieder freigegeben wurde;
                   das ist jetzt (an etlichen Stellen) berichtigt.

                 - erste Version eines PHP-Moduls. Die PHP-Version wurde
                   aus 2.91 rückportiert und enthält nur die beiden
                   Funktionen kto_check() und kto_check_str(); aber
                   für einen ersten Test ist sie schon brauchbar.

   23.08.08 Version 2.7 (gleichzeitig mit 2.92)
                   Diese Version ist wieder ein Zwischenrelease zur
                   Version 3.0, da zum nächsten Termin am 8.9.2008 zwei
                   neue Prüfziffermethoden eingeführt wurden. Die
                   zweite Betaversion zu 3.0 (2.92) wird gleichzeitig
                   mit dieser Version freigegeben.

                 - Methoden D0 und D1 implementiert

                 - in Methode 53 und B6 wurde eine Rückgabe vergessen;
                   dadurch konnten unter Umständen Konten fälschlich
                   als richtig klassifiziert werden.

                 - Methode 57 wurde zum 4.12.2006 ziemlig stark
                   geändert; die Änderungen sind jetzt berücksichtigt.

                 - Die Windows-DLL wird jetzt sowohl in cdecl als auch
                   mit stdcall kompiliert; dann kann jeder die Version
                   benutzen, die für ihn passend ist.

                 - Die PHP-Version wurde für die Version 2.7 entfernt,
                   da die Version aufgrund mangelnder Threadfestigkeit
                   und fehlender Initialisierungsfunktionen u.a. für
                   PHP nicht geeignet ist.

   23.04.08 Version 2.91
                   Dies ist die erste Beta-Version für das 3.0 Release
                   von konto_check. Die Dateien 0_history.txt und
                   00liesmich.txt sind noch weitgehend von 2.6; es gibt
                   sehr viele Änderungen in den Funktionen und im API.
                   Das alte API kann jedoch auch weiterhin benutzt
                   werden; es wird intern auf die neuen Funktionen
                   abgebildet.

   23.08.08 Version 2.92
                   Diese Version ist das zweite Beta-Release für die
                   Version 3.0. Sie enthält die Korrekturen der Version
                   2.7 sowie noch eine Reihe kleinerer Bugfixes etc.
                   Die folgenden Änderungen finden sich nur in 2.92:

                 - Es gibt ein zweitesa Demo-Programm konto_check_mini,
                   das die zu prüfenden Konto/BLZ-Kombinationen von der
                   Kommandozeile liest; außerdem werden noch Tests von
                   IBAN und Strukturiertem Verwendungszweck unterstützt.

                 - Die main-Routine im Beispielsprogramm wurde etwas
                   erweitert; falls keine Datei angegeben wird, geht
                   das Programm in einen interaktiven Modus, in dem
                   interaktiv diverse Tests gemacht werden können sowie
                   die LUT-Datei neu geladen werden kann; außerdem kann
                   auch das benutzte Systemdatum gesetzt werden, um
                   einen Datumswechsel zu simulieren. Hilfe gibt es in
                   dem Batchmodus mit dem Kommando -h.

                 - Für die LUT-Datei können jetzt mehrere Suchpfade
                   angegeben werden, die nacheinander durchsucht werden;
                   außerdem sind mehrere Default-Dateinamen möglich.
                   Falls bei der Initialisierung kein Dateiname für die
                   LUT-Datei angegeben wird, werden in allen Default-
                   Verzeichnissen die Defaultnamen probiert; falls eine
                   passende Datei gefunden wird, wird diese genommen.
                   Die Default-Namen und -Pfade können in konto_check.h
                   definiert werden (es sind die Makros DEFAULT_LUT_NAME
                   und  DEFAULT_LUT_PATH).

                 - Die Funktion lut_init() ist jetzt nicht mehr eine
                   Kopie der Funktion kto_check_init(), sondern eine
                   eigene Funktion mit vereinfachtem Aufrufinterface,
                   die i.A. eine inkrementelle Initialisierung macht
                   (näheres in konto_check.c).

                 - Es gibt eine neue Funktion get_lut_id(), die die
                   Datei-ID einer LUT-Datei liefert. Diese Funktion
                   wird vor allem für inkrementelle Initialisierung
                   benötigt.

                 - Es gibt eine neue Funktion kto_check_retval2utf8(),
                   die das Ergebnis einer Rückgabe in einen UTF-8
                   kodierten String umwandelt.

                 - In einigen Prüfziffermethoden der Debugversion wurde
                   retvals->pz nicht gesetzt; korrigiert.

                 - Einige Beschreibungen der Prüfziffermethoden wurden
                   leicht angepasst; alte Versionsbeschreibungen
                   gelöscht.

                 - Die Funktion rebuild_blzfile() funktioniert jetzt
                   (wieder); sie dient als Härtetest für die LUT2
                   Routinen, da eine BLZ-Datei der Bundesbank aus einer
                   LUT-Datei wiederhergestellt wird.

                 - Die Testroutinen der Perl-Version wurden komplett
                   neu geschrieben, um aus den automatisierten Tests
                   der CPAN-Tester bessere Rückschlüsse auf Programm-
                   fehler zu erhalten.

                 - Die Perl-Version enthält eine abgespeckte Version
                   der ZLIB, damit bei Fehlen des zlib-development
                   Pakets die Kompilierung nicht mit einem Fehler
                   abbricht (das Vorhandensein wird in Makefile.PL
                   überprüft).

                 - Die Windows-DLL macht in Verbindung mit PHP oder
                   Access öfters Probleme; die Ursache dafür wurde noch
                   nicht gefunden, wird aber bald angegangen.

   08.09.08 Version 2.93
                   Diese Version ist ein Bugfix-Release, das einen
                   Fehler in der Funktion get_lut_info2() behebt. Für
                   den verwendeten Ausgabebuffer wurde ein realloc()
                   gemacht, um die Buffergröße auf den tatsächlich
                   verwendeten Wert zu reduzieren; es wurde allerdings
                   die alte Adresse zurückgegeben. Auf Systemen, bei
                   denen das realloc nur den Speicherbereich ver-
                   keinerte, trat kein Fehler auf; bei anderen wurde
                   der Buffer jedoch verschoben, und wenn das Anwender-
                   programm den Buffer dann freigeben wollte, stürzte
                   es natürlich ab (besonders gern bei den CPAN Tests).

   13.01.09 Version 2.94
                   Diese Version behebt einen Fehler in der Funktion
                   read_lut_block_int(), der auf 64 Bit-Rechnern die
                   Initialisierung fehlschlagen ließ. Die Variable len
                   war als UINT4 (4 Byte Integer) deklariert; sie wurde
                   **by reference** an die Funktion uncompress() (aus zlib)
                   übergeben, die an der Stelle allerdings eine long-Variable
                   (auf 64 Bit Maschinen üblicherweise mit 8 Byte) erwartete.
                   Dadurch schlug die Initialisierung auf diesen Maschinen
                   üblicherweise fehl, während sie auf 32 Bit Rechnern keine
                   Probleme machte.

                   Außerdem wurden noch die Prüfziffermethoden D2 und D3 und
                   für die Prüfziffermethode C6 die neue Version (gültig ab
                   9.3.2009) implementiert, in Methode 28 ein kleiner Fehler
                   beseitigt (falls eine Unterkontonummer weggelassen wurde
                   (=> 8stellige Kontonummer) ist der Test nochmal mit der
                   gedachten Unterkontonummer 00 zu wiederholen).

                   Der Code wurde insgesamt noch etwas überarbeitet, um diverse
                   Compiler-Warnungen (bzw. -Fehler) zu beseitigen.

   13.01.09 Version 2.95
                   Diese Version behebt einen Fehler in den Testroutinen (es
                   waren zwei Bankleitzahlen ungültig geworden); der Code ist
                   unverändert.

   02.03.09 Version 2.97
                 - Der PHP-Port wurde sehr stark überarbeitet; es gibt jetzt
                   ein neues PHP API, das alte ist allerdings ebenfalls
                   noch verfügbar.

                 - Neue Dokumentation in 00liesmich.pdf (noch nicht
                   komplett, aber ein Anfang ist gemacht :-) )

                 - Diverse kleinere Änderungen und Bugfixes

   04.04.09 Version 2.98
                 - Fehler in Prüfziffermethoden 16,74,79,97 berichtigt
                 - write_lut(): directory slots können wiederverwendet werden
                 - einige bug fixes in write_lut_block() und lut_info()
                 - bug fix in konto_check-at.c der die smoke tests auf S-390-linux*
                   komplett fehlschlagen ließ (auf dieser Plattform ist der
                   Datentyp char defaultmäßig unsigned; das führte zu Fehlern in adler32().
                   Oliver Paukstadt hat kräftig mitgeholfen, den Fehler zu finden :-).

   23.11.09 Version 3.00
                 Für Perl ist dieses Release vor allem ein Bugfix-Release. Es
                 wurden eine Reihe Speicherlecks beseitigt.
                 
                 Unter C und PHP sind außerdem Suchfunktionen implementiert
                 (lut_suche_bic(), lut_suche_namen(), lut_suche_namen_kurz(),
                 lut_suche_ort(), lut_suche_blz(), lut_suche_pz(), lut_suche_plz());
                 diese werden bald auch unter Perl verfügbar gemacht werden.


##############################################################################
#          PRÜFZIFFERBERECHNUNG VON ÖSTERREICHISCHEN KONTONUMMERN            #
#                           C-/Perl-Bibliothek                               #
##############################################################################
#                                                                            #
# Autor             : Michael Plugge <m.plugge@fh-mannheim.de>               #
# Version           : 1.3                                                    #
# Datum             : 16.01.2008                                             #
##############################################################################

Versionen der österreichischen Bibliothek:


Version 0.1 (13.7.06, initiale Version)
==============================

 - Prüffunktionalität komplett
 - die Datei blz-at.lut wird von einem externen Programm generiert


Version 0.2 (20.7.06):
======================

 - einige VIM-Faltungen eingefügt

 - exit in etlichen Funktionen durch return mit Fehlercode ersetzt

 - kto_check_msg herausgenommen wegen Kollision mit der deutschen Version,
   funktional ersetzt durch kto_check_retval2txt().

 - kleine Änderungen der main() Routine

 - falls eine BLZ als erstes Zeichen ein - enthält, wird das Konto auch
   getestet, falls die BLZ gelöscht ist; die Rückgabewerte sind in dem Fall
   dann OK_GELOESCHT, OK_NO_CHK_GELOESCHT oder FALSE_GELOESCHT.

 - Geschwindigkeitsoptimierungen:

    * search_blz() für die Methodensuche ersetzt durch Array,
      in dem die Methoden gespeichert sind

    * atoi() zur Umwandlung der BLZ in Integer ersetzt durch eigene Funktion.
      Eine Arrayvariante zur Umwandlung bringt keinen Geschwindigkeitsvorteil.

    * l_datum (globale Variable) ersetzt durch Array (binär); das Löschdatum
      erhält man nun über die Funktion get_loesch_datum()

      Die beiden ersten Funktionen waren im Vergleich zur insgesamt benötigten
      Zeit unverhältnismäßig langsam. Daher wurde die zugehörige Prüftabelle und
      die Information, ob eine Bankleitzahl gelöscht ist, in zwei Byte-Arrays
      mit jeweils 100.000 Elementen transferiert; die Arrayabfrage ist natürlich
      wesentlich schneller als der Funktionsaufruf. Durch diese Umstellung wird
      die Variable l_datum nicht mehr gesetzt; falls man setzen wollte, müßte
      der Index für jede Bankleitzahl gespeichert werden. In diesem Fall müßte
      man für das Array für das Löschdatum ein Integer-Array (4 Byte Integer)
      benutzen; da das Löschdatum aber wohl nicht oft benötigt wird, wird es
      nicht mehr in jedem Fall bestimmt, sondern nur noch durch den
      Funktionsaufruf.


 - Fehlerkorrekturen:

   * im Makro ZIFFERNSUMME_7:
      if(pz1>59)pz1-=56;  ersetzt durch if(pz1>59)pz1-=54;
      (falsche Ziffer eingefügt => Ziffernsumme wird falsch)

   * in der Funktion kto_check_at (Rechenvorgang der Prüfziffer):
      methode=*ptr++-'0'; ersetzt durch methode=char2num[*ptr++];
      (die alte Variante stimmt nur für einen Rechenvorgang bis 9)

   * in der Funktion kto_check_at (Array-Version, nach Rechenvorgang der Prüfziffer):
      wichtung-='0';  ersetzt durch    wichtung=char2num[wichtung];
      stelle_1-='1';  ersetzt durch    stelle_1=char2num[stelle_1]-1;
      (die alte Variante stimmt nur für Werte bis 9)


Version 1.0 (1.9.06):
=====================

 - weitere Tests mit realen Konten, noch keine weiteren Fehler gefunden

 - einige Kommentare eingefügt

 - noch einige VIM-Faltungen eingefügt

 - CRC-Test für die lut-Datei (mit adler32 als Prüfsumme)

 - optional bei generate_lut_at(): Ausgabe der Bankdaten auch als plain-Datei
   in frei wählbarem Format

 - neue Funktion dump_lutfile(), die den Inhalt einer lut-Datei als Klartext
   ausgibt (Ausgabefelder: BLZ, Löschdatum, Prüftabelle/-parameter).

 - Funktion generate_lut_at in die Bibliothek integriert; inpar2lut.c ist dadurch
   obsolet geworden (bzw. nur noch für spezielle Prüfzwecke relevant), und daher
   aus der Distribution herausgenommen. Die Umlaute werden von CP 850 auf
   iso-8859-1 umgesetzt (aktuell nur für die plain Ausgabe; es ist jedoch für
   eine spätere Erweiterung der lut-Datei auf zusätzliche Ausgabefelder
   relevant).

 - das Präprozessor-Makro HTML_UMLAUTE in kto_check_retval2txt() ist jetzt
   obsolet; stattdessen gibt es eine zusätzliche Funktion
   kto_check_retval2html(), die HTML-Umlaute liefert.

 - kleine Änderungen in der Sortier-Routine für generate_lut. Dadurch ändern
   sich für einige Bankleitzahlen der lut-Datei das Löschdatum, da nun
   Hauptstellen vor Zweigstellen sortiert werden (es wird nur eine Bank
   pro BLZ in die lut-Datei aufgenommen; manchmal werden allerdings laut der
   Bankleitzahlendatei Hauptstellen vor Zweigstellen gelöscht - schwer
   verständlich, aber so steht es da). Ansonsten ist die lut-Datei mit der alten
   Version identisch (läßt sich leicht mittels dump_lutfile() überprüfen ;-) ).

 - die library ist jetzt threadfest (sogar ohne Sonderfunktionen wie bei der
   deutschen Variante).

 - beim Lesen und Schreiben der lut-Datei ist der Modus auf rb bzw. wb gesetzt
   (das Programm war noch nicht unter Windows getestet).

 - die Prüfroutinen liefern denselben Wert wie Version 0.2 (getestet mit einer
   Spezialversion, die die Prüfziffer noch vor der Bildung des Modulus
   berücksichtigt). Ein Problem ist nur die BLZ 00001: in der inporwo.txt finden
   sich für die BLZ 00001 die folgenden Einträge:

-   53791 00001 00032 GELOESCHT - BANKHAUS CARL SPAENGLER & CO.
-   53813 00001 00032 BANKKOMMANDITGESELLSCHAFT ANTONI, HACKER & CO.
+   76040 00001 00032 VORARLBERGER LANDESBANK-HOLDING
+  116408 00001 00013 ANTEILSVERWALTUNGSSPARKASSE STOCKERAU
+  163902 00001 00000 GELOESCHT - BANK AUSTRIA TREUHAND & BETEILIGUNGSFONDS AKTIENGESELLSCHAFT
-  166286 00001 00032 Kathrein & Co. Bankkommanditgesellschaft
-  184195 00001 00032 BANKHAUS SCHELHAMMER & SCHATTERA
-  196053 00001 00032 GELOESCHT - Bankhaus Krentschker & Co. Zweigniederlassung Wien
-  267511 00001 00032 GELOESCHT - RAIFFEISENBANK HARD REG.GEN.M.B.H.
- 1337939 00001 00032 GELOESCHT - SECURITY KAPITAL-ANLAGEGESELLSCHAFT M.B.H.
- 4888804 00001 00032 Verwaltungsgenossenschaft der vbankdirekt AG reg.Gen.m.b.H.

   Die drei Einträge mit einem + in der ersten Spalte werden in die blz-at.lut
   Datei übernommen; falls eine BLZ 00001 auftaucht, wird allerdings der Eintrag
   mit der ID 163902 (Tabelle 0, immer ok) benutzt. In der Version 0.2 wurde
   stattdessen der Eintrag mit der ID 76040 (Tabelle 32) benutzt (aufgrund der
   geänderten Sortierroutine). Die BLZ scheint allerdings keine reale BLZ zu
   sein, sondern nur ein Testfall, da die Banken auf den ersten Blick nichts
   miteinander zu tun haben und drei verschiedene Prüfverfahren (0, 13 und 32)
   angegeben sind.


Version 1.1 (8.9.06):
=======================

Diese Version enthält einige kleine Änderungen, die sich für das cgi-Programm
als nützlich erwiesen haben, sowie zwei Bugfixes:

 - falls in kto_check_at() für den Parameter lut_name NULL übergeben wird,
   werden nur die Arrays initialisiert, aber keine lut-Datei geladen. Dies ist
   nützlich, falls statt einer Bankleitzahl direkt die Prüfparameter angegeben
   werden (mit vorgestelltem p). Falls für den Parameter lut_name ein Leerstring
   übergeben wird, wird versucht, die Datei DEFAULT_LUT_NAME zu lesen.

 - der Filedeskriptor trace ist jetzt als globale Variable (in der DLL auch
   exportiert) deklariert; damit kann die trace-Datei auch aus einem anderen
   Modul initialisiert werden. Die Trace-Version ist natürlich nicht threadfest,
   aber sie wird ja nur zur Fehlersuche benötigt.

 - in der Funktion generate_lut_at werden einige große Array-Variablen allokiert
   (ca. 3,5 MB bei MAX_BLZ_CNT_AT=30000); sie sind jetzt als static deklariert,
   da ansonsten unter Windows das Programm beim Generieren einer lut-Datei mit
   einer Schreibschutzverletzung abstürzt.

 - die Funktion dump_lutfile() lieferte keine vernünftigen Werte, da während der
   Entwicklung (kurzzeitig) die Arrays per malloc allokiert wurden, und später
   wieder als Arrays deklariert wurden; in der Funktion war noch die
   malloc-Version, und die Adressierung ging schief.

 - kleine Änderungen in der main() Routine

 - die Fehlermeldungen die von kto_check_retval2txt() geliefert werden, sind
   jetzt reine Fehlermeldungen, ohne in ### eingeschlossen zu sein


Version 1.2 (11.9.06):
=======================

 - kleiner Fehler in der Trace-Version: falls trace==NULL war, wurden einige
   Berechnungen nicht gemacht, und das Ergebnis meist als richtig angesehen
   (dies betrifft nur die Trace-Version, nicht die normale; wurde beim
   cgi-Programm entdeckt).

 - Die Dateien mit dem INPAR Handbuch und -Vertrag werden nach Rücksprache mit
   First Data (H. Krickel) nicht mehr in das Paket aufgenommen, sondern sollten
   direkt bei First Data (Andreas.Krickl@firstdata.at) angefragt, bzw. von der
   Website von First Data Austria heruntergeladen werden (näheres in der Datei
   00liesmich unter Punkt 4. Prüfparameter).

Version 2.1 (4.6.07):
=======================
 - Die Versionszählung läuft jetzt synchron mit der deutschen Version von
   konto_check, da die beiden Pakete für die Perl-Version zusammen verwendet
   werden
 - einige kleinere Änderungen für die Anpassung an Perl
 - Der Datentyp von adler32 wurde von unsigned long auf UINT4 geändert, um
   Probleme mit modernen 64 Bit Compilern zu beheben.

Version 1.3 (16.1.08):
======================
 - Die eigene Versionszählung für das österreichische Modul wird doch wieder
   eingeführt.

 - diese Version implementiert das INPAR-Dateiformat; das Programm kann jetzt
   beide Dateiformate lesen

 - die Funktion dump_lutfile() mußte auf dump_lutfile_at() umbenannt werden,
   da in der neuen deutschen Bibliothek jetzt auch eine Funktion mit demselben
   Namen, aber wesentlich erweiterter Funktionalität als Teil der LUT2
   Routinen vorkommt (diese Funktion ist allerdings nicht nach perl
   exportiert).

 - einige kleinere Aufräumarbeiten

