Friday, 20. October 2006Größe eines struct members ohne Instanzierung ermitteln
Manchmal steht man vor dem Problem, die Größe eines einzelnen Eintrags einer Struktur wissen möchte, ohne die Struktur vorher instanzieren zu müssen, beispielsweise, um die Größe einer anderen Struktur entsprechend anzupassen.
Folgendes Beispiel soll dies verdeutlichen:
Natürlich funktioniert dieses Beispiel nicht, weil der sizeof() Operator nur auf "instanzierte" Strukturen angewandt werden kann, nicht auf die Typendefinition an sich. Was kann man in diesem Fall also tun? Eine Funktion zur Auflösung zu schreiben fällt aus, da die Größe ja schon zur Compilezeit feststehen muss. Nach einiger Überlegung kommt man dann zur eigentlich trivialen Lösung des Problems: Wenn der Compiler unbedingt eine "Instanz" haben will, dann soll er sie doch mittels eines Typecasts haben. Also erstellt man einfach einen Pointer auf die Struktur an Adresse 0, und verwendet dann wie gewohnt den sizeof()- Operator. Folgendes Makro bewerkstelligt die Aufgabe:
Die Definition von Struct2 auf dem obrigen Beispiel würde dann also folgendermaßen funktionieren:
Wednesday, 18. October 2006Cursed GTK package
Bei meinen Recherchen zu einem GUI-Toolkit, welcher Win32 und Linux unterstützt und wenn möglichst auch noch eine rudimentäre Terminal-Darstellung zur einfacheren Wartung bietet, bin ich auf das folgende geniale Projekt gestoßen:
Cursed GTK. Lädt man diese Bibliothek beim Laden einer GTK-Anwendung auf der Shell, so bekommt man eine ncurses-Oberfläche mit den wichtigsten Widgets. Somit ist es zumindest möglich, einfache Wartungsprogramme ohne viel Aufwand mit dem GLADE Userinterface builder zu basteln, welche gleichzeitig auch von der Shell aus noch bedienbar sind, sofern man sich auf einfache Widgets beschränkt. Das Projekt hat nur leider den Nachteil, dass es seit Ende 2003 nicht mehr weitergewartet wird. Dementsprechend basiert es auch auf etwas älteren Libraries und funktioniert u.A. mit aktuellen Versionen der libpango (Teil von GTK) nicht mehr. Eine ältere libPango lässt sich wiederum nicht mehr ohne herumpatchen mit einer neueren Freetype-Version kompilieren usw. Kurzum: Das Ganze ist leider recht mühselig einzurichten. Um einem diesen Aufwand zu ersparen, habe ich mir die Mühe gemacht, di ebenötigten Bibliotheken zu kompilieren und das Installationsscript der RPM-PAkete entsprechend zu fixen, sodass man eine Lösung hat, welche nur noch mit einem Shellscript installiert werden muss und dann automatisch mit den richtigen Bibliotheken out-of-the-box läuft. Das Paket kann man sich hier herunterladen. Sofern man rpm benutzen kann, muss man nur install.sh ausführen und im Besten Fall installiert sich das Paket von selbst. Es ist allerdings darauf zu achten, dass sich das Verzeichnis des PAkets nach der Installation nicht mehr ändern darf, da man die in dne Unterverzeichnissen enthaltenen Bibliotheken zum Laden der jeweiligen Applikation benutzen muss.Starten kann man eine GTK-Applikation im Textmodus mittels des enthaltenen Shellscripts runcursed.sh .Möchte man das Ganze wieder deinstallieren, so muss man nur uninstall.sh ausführen.Hat man Debian und damit kein RPM zur Verfügung, kann man sich mit ein wenig Bastelei mit alien behelfen.Auf jeden Fall ist das Ganze nach wie vor eine interessante Bibliothek. Bleibt nur zu hoffen, dass sich irgendwann wieder um dieses verwaiste Projekt annimmt. Tuesday, 10. October 2006Hohe CPU-Auslastung durch DOS-Programme in ntvdm vermeiden
Heute bin ich zufällig beim Surfen über folgenden interessanten Forumpost gestolpert:
http://www.softgames.de/forum/frage117849.html Der Autor vermindert damit das Problem, dass DOS-Programme, die sehr oft die Tastatur pollen, die CPU den Rechners, auf welchem sie in der NTVDM rennen, auf Vollast bringen. Eine einfache und dennoch sehr praktische Lösung in Form eines TSRs hat der Autor in seinem Beitrag vorgestellt.
(Seite 1 von 1, insgesamt 3 Einträge)
|
SucheBlog abonnierenTop ReferrerVerwaltung des Blog |