© 2017 W.Ehrhardt Letzte Änderung 03. Aug. 2017
Start CRC/Hash Krypto Sonstiges Info Links English

Sonstiges

Hier findet man eine wachsende Liste von Utility- und Einzel-Quellcodes, die nicht CRC/Hash oder Krypto zuzuordnen sind: Util, PRNG, MPArith, AMath, DAMath, zlib, Delphi CRT.

Das Archiv std.zip enthält immer die neuesten Versionen der Includedatei std.inc (Compiler­erkennung, Standard­definitionen, Optionen) und der BTypes-Unit (gemeinsame Basistyp-Deklarationen).

Vor dem Herunterladen von Software von diesen Seiten bitte diesen rechtlichen Hinweis beachten.


Util

Das Archiv util_2017-06-04.zip enthält eine Ansammlung kleiner Units, die zum Teil früher separat angeboten wurden. Hilfedateien gibt es als Windows .hlp und als .tph für die BP7 IDE.

Letzte Änderungen: Korrektur eines Range-Check-Fehlers in Base2N im Debug-Modus.

PRNG

Letzte Änderungen:  D17/64-Bit-Anpassungen

Das Archiv prng_2013-01-07.zip enthält sechs schnelle Pseudo-Zufallszahlen-Generatoren mit wesentlich größeren Periodenlängen als die Pascal-Funktion random:  taus88 und taus113 (Pierre L'Ecuyer), tt800 und mt19937 (Makoto Matsumoto et al, mt19937 ist der bekannte Mersenne Twister), kiss123 (George Marsaglia), sowie xor4096 (Richard P. Brent). Alle benutzen Kontextrecords, so daß mehrere Generatoren unabhängig gleichzeitig benutzt werden können, sie sind nicht kryptographisch sicher.

Zusätzlich gibt es noch drei kryptographische Generatoren: Die Units und Testprogramme können mit den üblichen Compilern übersetzt werden: Pascal (TP5/5.5/6, BP7, VP 2.1, FPC 1.0/2.0-2.6/3.x) und Delphi (1..7/9-10/12/17-18). Die meisten Testprogramme brauchen die ministat- und/oder die hrtimer-Unit. Alle Generatoren exportieren folgende Funktionen (einige spezielle Prozeduren sind hier nicht aufgeführt):

procedure generic_init(var ctx: generic_ctx; seed: longint);
  {-Init context from seed}

procedure generic_init0(var ctx: generic_ctx);
  {-Init context from randseed}

procedure generic_next(var ctx: generic_ctx);
  {-Next step of PRNG}

procedure generic_read(var ctx: generic_ctx; dest: pointer; len: longint);
  {-Read len bytes from the PRNG to dest}

function  generic_long(var ctx: generic_ctx): longint;
  {-Next random positive longint}

function  generic_dword(var ctx: generic_ctx): {$ifdef HAS_CARD32}cardinal{$else}longint{$endif};
  {-Next 32 bit random dword (cardinal or longint)}

function  generic_word(var ctx: generic_ctx): word;
  {-Next random word}

function  generic_double(var ctx: generic_ctx): double;
  {-Next random double [0..1) with 32 bit precision}

function  generic_double53(var ctx: generic_ctx): double;
  {-Next random double in [0..1) with 53 bit precision}

function  generic_selftest: boolean;
  {-Simple self-test of PRNG}
Tabelle der Generatoreigenschaften (C/B: CPU-Zyklen pro Byte, MB/s: Millionen Bytes pro Sekunde. Mit 1.7 GHz Pentium 4 / Windows 98: BP7 = Borland Pascal 7 Realmode mit 386 BASM und D6 = Delphi 6; mit Win7/64 Core i3-2350M: D18/64 = Delphi 18 64-bit. Hinweis: isaac wurde kompiliert mit {$define testing}):

BP7 BP7 D6 D6 D18/64 D18/64
Generator ctx Größe Periode ca. C/B MB/s C/B MB/s C/B MB/s
random (4) 2**32 79.0 21.4 7.5 226.0 5.8 399.1
taus88 16 2**88 79.0 21.5 8.0 211.9 10.8 213.5
taus113 20 2**113 85.0 20.0 8.0 211.9 13.5 170.0
kiss123 20 2**123 114.0 14.9 13.3 127.9 15.0 153.0
tt800 106 2**800 308.3 5.5 18.5 91.7 18.0 126.7
xor4096 522 2**4096 80.0 21.0 6.5 260.7 12.3 187.3
mt19937 2502 2**19937 227.4 7.4 8.3 204.5 12.6 181.5
aesr 290 2**128 211.2 8.0 28.4 59.7 60.2 38.1
salsar 202 2**70 108.3 15.7 15.4 110.3 31.1 73.8
isaac 2066 2**8295 122.0 13.9 9.0 189.3 12.8 178.9


MPArith

mparith_2017-08-03.zip: Dieses Archiv enthält Pascal-Quellcodes für Multipräzisions-Arithmetik für ganze, rationale, reelle und komplexe Zahlen. Die Basisroutinen können mit den üblichen Pascalversionen übersetzt werden, die const-Parameter unterstützen (getestet mit BP 7.0, VP 2.1, FPC 1.0/2.0/2.2/2.4/2.6/3x und Delphi-Versionen 1..7/9/10/12/17/18/25S).

Separate Informationen gibt es auf der (englischen) Einführungsseite; Windows- und BP7-Hilfedateien befinden sich im Archiv.

Letzte Änderungen: Version 1.35.07 hat folgende neue/geänderte Funktionen: Eine vollständige Liste mit kurzer Beschreibung findet man in der Funktionsliste:

Es gibt Testprogramme für die Verifikation der Funktionen und der Kompilierung; Demoprogramme sind enthalten u.a. für Pi-Berechnung, Ausdruckszerlegung und -Auswertung (inkl. zwei interaktive Multipräzisions-Rechner), Faktorisierung mit Pollards rho- und (p-1)-, Williams (p+1)- und ECM-Methoden sowie Angriffe auf RSA usw.

Meine Pascal-Routinen basieren auf vielen öffentlich zugänglichen Ressourcen (Quellcode-Bibliotheken, Bücher, Artikel); Links findet man im Referenzabschnitt.


AMath

Das Archiv amath_2017-08-03.zip enthält Units für akkurate mathematische Methoden ohne Benutzung von Multipräzisions-Arithmetik. Diese hohe Genauigkeit wird jedoch nur mit der Standard-Rundungsart rmNearest erreicht, bei den anderen Rundungsarten nimmt sie ab. AMath wurde für den 80-Bit-Extended Datentyp entwickelt und kann deshalb nicht mit 64-Bit-Code auf 64-Bit-Systemen verwendet werden (für diese gibt es das entsprechende DAMath-Paket). Weitere Informationen gibt es auf der (englischen) Einführungsseite.

Die Units und Basistestprogramme können mit den folgenden Compilern übersetzt werden: Pascal (BP7, VP 2.1, FPC 1.0/2.0/2.2/2.4/2.6/3x) und Delphi (2..7/9/10/12/17/18/25S). Die Test laufen ohne Warnung über relative Fehler auf Intel-CPUs unter Win98, Win2000 (siehe Logdateien), WinXP und Win7. Bei anderen Prozessoren oder Betriebssystemen können vereinzelt solche Warnungen auftreten, dies sind i.d.R. keine AMath-Bugs sondern Features der Prozessoren (und können durch kleine Vergrößerung der Fehlertoleranzen unterdrückt werden).

Letzte Änderungen: Unit AMath mit den neuen akkuraten Hilfsfunktionen ln1pexp, logaddexp, logsubexp; den ext2-Prozeduren xmul12, xadd12, xdivrem; und der Funktion isRMNearest, die ohne FPU-Kontrolle testet, ob roundig_to_nearest verwendet wird. Spezielle Funktionen mit den Fresnel-Hilfsfunktionen FresnelF/G, Bessel Lambda-Funktionen, akkuraten Zwei-Parameter Fehlerfunktionen erfh und erf2, und der Chi-Verteilung chi_pdf/cdf/inv. Unit AMTools verbessert jetzt auch komplexe Nullstellen.

DAMath

Das Archiv damath_2017-08-03.zip enthält ebenfalls Units für akkurate mathematische Methoden ohne Benutzung von Multipräzisions-Arithmetik oder Assembler; anders als AMath verwenden sie jedoch Double-Datentypen. Der Hauptzweck ist die Bereitstellung der AMath-Funktionen für 64-Bit-Systeme ohne Extended-Genauigkeit oder 387-FPU, allerdings werden auch noch 32-Bitsysteme unterstützt. Der Quellcode kann mit den üblichen Pascalversionen übersetzt werden, die const-Parameter unterstützen (getestet mit BP 7.0, VP 2.1, FPC 1.0/2.0/2.2/2.4/2.6/3x und Delphi-Versionen 1..7/9/10/12/17/18/25S).

Die Units setzen IEEE-754 53-Bit-Doubleprecision (Binary64) und die Standard-Rundungsart rmNearest voraus; seit Aug. 2017 gibt es die separate Unit DFPU mit 64-bit/ARM kompatiblen Funktionen für Rundungsart- und Genauigkeitskontrolle basierend auf der Math-Unit des Compilers. Detaillierte Beschreibungen der Units/Funktionen werden hier nicht wiederholt, sie sind analog zu AMath.

Letzte Änderungen: Die neue Unit DFPU implementiert 64-Bit- und ARM-kompatible Funktionen für Rundungsart und Genauigkeit basierend auf den math-Units der Compiler. Unit DAMath mit den neuen akkuraten Hilfsfunktionen ln1pexp, logaddexp, logsubexp; den dbl2-Prozeduren dmul12, dadd12, ddivrem; und der Funktion isRMNearest, die ohne FPU-Kontrolle testet, ob roundig_to_nearest verwendet wird. Spezielle Funktionen mit den Fresnel-Hilfsfunktionen FresnelF/G, Bessel Lambda-Funktionen, akkuraten Zwei-Parameter Fehlerfunktionen erfh und erf2, und der Chi-Verteilung chi_pdf/cdf/inv.

zlib

zlibw114_2015-09-14.zip ist meine Pascal-Portierung der Version 1.1.4 von zlib, der freien, allgemeinen Bibliothek zur verlustfreien Daten-Komprimierung. Der Quellcode basiert auf PASZLIB 1.0 von Jacques Nomssi Nzali (entspricht zlib 1.1.2). Mein Code enthält offizielle Patches und Änderungen bis V1.1.4 und einige Ergebnisse einer E-Mail-Korrespondenz mit Mark Adler.

Weitere Änderungen sind in gzio/minigzip, inffixed.inc, minizip, zdeflate (Code für $ifdef FASTEST ist jetzt benutzbar), zlibh (z_assign als Workaround für einen lästigen D6/7/9-Bug), zutil, example (Fehler in test_sync usw. beseitigt).

Andere Erweiterungen: 1) zlibex-Unit mit anpassbaren deflate- und inflate-Routinen (incl. Testprogramm), die Unit wird im FZCA-Demoprogramm benutzt.   2) Pascal-Port des zpipe-Beispiels.  3) Code-Verbesserungen: BUILDFIXED und assert funktionieren jetzt, Bugfix in gzerror, usw.

Letzte Änderungen:  Anpassungen für Delphi 17+ und FPC 3.x

Die Bibliothek kann kompiliert werden mit BP7 (DOS/Win/DPMI), Delphi 1-7/9-10/12/17-18, Virtual Pascal V2.1 und Free Pascal 1/2/3.x. Die Unit-Struktur ist leicht geändert verglichen mit PASZLIB: zlib (Funktionen), zlibh (Typen/Konstanten), gzio (gz-Funktionen) sollten die einzigen Units in uses-Anweisungen der zlib-Applikationen sein.

Bitte beachten:

Delphi CRT-Unit

Während der Entwicklung des MPArith-Ausdrucksparsers wurden ein paar Abweichungen von Will de Witts bewährter Delphi-CRT-Unit im Vergleich zu BP7 festgestellt; ich habe deshalb eine etwas kompatiblere Unit erstellt.

Letzte Änderungen:  Anpassungen für Delphi 17 (XE3)

dcrt_2013-01-07.zip ist eine vereinfachte Version von Will DeWitts Code mit einigen Fehlerkorrekturen (readkey, Zeileneingabe, erweiterte Tastencodes etc) Wills 'unit was based heavily off of the Borland CBuilder 5 RTL'. Wegen des unklaren Lizenzstatus von Wills Unit gilt für diese meine Unit auch nicht die zlib-Lizenz, sondern sie wird mit folgendem Ausschlußhinweis veröffentlicht:

Die Software wird ohne jegliche Zusagen oder Garantien bezüglich Funktionalität oder Funktionsfähigkeit abgegeben. Die Autoren übernehmen keine Verantwortung für Schäden, die durch die Benutzung der Software verursacht werden. Wird die Software benutzt, bitte auf die Herkunft verweisen und die Referenzen auf die anderen Autoren und Quellen beibehalten.

Wie auch immer: Wills bzw. Borlands Unit wurde radikal umgeschrieben und umgestellt. Leitanforderung war weitgehende Kompatibilität zur BP7-Unit.

Die Idee der Hardware/Software-Trennung der Tonerzeugung stammt von Rudy Velthuis' Freeware-Konsoleunit, aber die Implementation ist verschieden.

Die unterstützten Tastenkombination bei der Zeileneingabe sind von BP7 (^A, ^H, ^D, ^F, ^M, ^S, ^Z), der Paradigmenwechsel von readkey zu keypressed als Arbeitspferd findet sich bei FP. Die Tastencodes, -Übersetzungen und -Funktionalitäten wurden dem Phoenix-BIOS-Buch und einem mit BP7 kompilierten Testprogramm entnommen.

Hier sind Links zu den beschriebenen Programmen.

Es bleiben noch einige Kleinigkeiten zu tun für seltene spezielle erweiterte Tastenkombinationen (nationale Spezialcodes etc); aber dies wird bei Bedarf erledigt, wenn Fehler und Probleme beseitigt werden müssen. Hinweis: Obwohl DCRT V1.32+ kompatibel zu D12+ ist, benutzt die Konsolausgabe weiterhin ANSI und nicht Unicode.

Start CRC/Hash Krypto Sonstiges Info Links English