von Michael Christoph
Die Taglisten gewinnen bei der utility.library unter AmigaOS 4 mehr an Bedeutung. Sie lassen sehr flexible Erweiterungen an den Bibliotheksfunktionen zu. Es muss nicht die Anzahl der übergebenen Argumente erweitert werden, sondern es wird einfach ein neuer Eintrag in den Taglisten aufgenommen. Unbekannte Tags ignoriert man. Viele neue Funktionen der Utility-Bibliothek helfen beim Erzeugen, Durchsuchen und Filtern der angelegten Taglisten. Prüfziffern Dabei wird der SHA-1-Algorithmus verwendet. Im Vergleich zu den CRC16- bzw. CRC32-Prüfsummen (mit 2 bzw. 4 Byte) können so wesentlich größere Datenbereiche auf Eindeutigkeit geprüft werden. Damit wird verhindert, dass es zur Wiederholung einzelner Summen kommt und die Checksumme nicht mehr eindeutig ist. Zuvor muss jedoch die Datenstruktur initialisiert werden, was von MessageDigest_SHA_Init() übernommen wird. Danach ist der Funktion MessageDigest_SHA_Update() der Speicherbereich und dessen Größe zu übergeben, für die die Summe berechnet werden soll. Die Funktion kann auch mehrfach hintereinander auf unterschiedliche Speicherbereiche angewendet werden. So muss, z.B. für die Checksumme auf eine Datei, diese nicht vollständig im Speicher vorliegen, sondern kann auch blockweise berechnet werden. Nach abschließendem Aufruf von MessageDigest_SHA_Final() ist die generierte Checksumme unter mdsha->mdsha_Code zu finden. Beachtet werden muss, dass der String nicht mit einem Null-Byte abgeschlossen ist und daher mit strncpy() umkopiert/weiterverarbeitet werden muss. In kompakter Schreibweise würde er wie in Listing 2 aussehen. Da es sich um einen bitweisen Prüfwert handelt, ist die Ausgabe/Anzeige mit Hilfe von Printf nicht unbedingt sinnvoll, da auch Steuerzeichen etc. dabei herauskommen können. Der Wert ist anhand von strncmp bzw. StriCmp mit dem Referenzwert zu vergleichen. Als externe Prüfziffer, die z.B. in Textdateien weitergegeben wird, ist diese Funktion also nicht geeignet. Standard-C-Funktionen Auch zum Setzen von Speicherbereichen gibt es jetzt in Anlehnung an memset eine SetMem-Funktion. Als Argumente sind neben der Startadresse im Speicher der zu setzende Wert anzugeben. Normalerweise ist es eine 0 zum Löschen des Speicherbereichs - zusätzlich übergeben Sie die Anzahl der zu ändernden Bytes. Die Reihenfolge entspricht der wie bei memset. Kürzer ist die Schreibweise mit ClearMem. Diese verlangt nur die Startadresse und die Anzahl der zu löschenden Bytes. Eine weitere Funktion, die mit Speicherbereichen arbeitet, ist MoveMem. Wie der Name schon vermuten lässt, dient sie zum Verschieben von Speicherbereichen. Der Quellbereich wird allerdings nicht verändert, wodurch man richtigerweise von «Bereich kopieren» sprechen muss. Die Funktion ist vergleichbar mit CopyMem aus der exec.library, erlaubt darüber hinaus aber auch überlappende Speicherbereiche. Sichergestellt werden muss, dass der Zielbereich auch groß genug ist, die Daten aufzunehmen. Und natürlich muss dieser auch für das eigene Programm reserviert worden sein. Mit »verschärftem« Speicherschutz ist ansonsten das Programm recht schnell vom Betriebssystem stillgelegt. Zufallszahlen
und Hilfsfunktionen Mit der Funktion GetUniqueID() lässt sich eine eindeutige Zahl ermitteln. Allerdings gilt das nur solange der Rechner nicht ausgeschaltet wird. Sie eignet sich also nicht für den langfristigen Einsatz oder auf Festplatte gespeicherte Dateinamen. Wenn z.B. mehrere Hintergrund-Tasks arbeiten und jede temporäre Daten auslagern will, kann hiermit ein eindeutiger Dateiname zusammengestellt werden. Auch der lha-Packer oder pgp-Tools arbeiten mit temporären Dateien, damit sie mehrfach gleichzeitig laufen können. Hierzu finden Sie in Listing 5 ein simples Beispiel, wie sich ein eindeutiger Name erzeugen lässt Teilweise sind die hier besprochenen Funktionen erst in der utility.library Version 51 zu finden. Zum Ausprobieren der Beispiele müssen Sie sich die letzte Version des SDK`s bei Hyperion besorgen. Eine PDF-Datei mit weiteren Informationen zu den Funktionen der utility.library finden Sie auf der CD zur nächsten Ausgabe. In der nächsten Ausgabe geht es dann um die gadtools.library und Reaction. Während erstere praktisch keine Bedeutung mehr hat, findet man bei Reaction wieder neue Funktionen. lb
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Download: | enthält: |
---|---|
OeffneInterface.c : Interface öffnen BerechnePruefziffer.c : CRC-Prüffziffer erzeugen LottoGenerator.c : generieren von Zufallszahlen SpeicerFunks.c : Speicherbereiche manipulieren |
|
os4prog-8-utility-src.lha, 104.311 bytes |
Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster
AMIGA schicken.
Zuletzt aktualisiert am 23. Juli 2005, Michael Christoph.