R E S A U C E ================================= geschrieben in GFA-Basic 2.02 von Tilman Neumann 1990 --------------- Allgemeine Informationen zum Programm --------------------- 'RESAUCE' ist ein Utility-Paket, daž Programmierern beim Umgang mit GEM-Resourcen etwas mehr Komfort bringen soll. Der gesamte Funktionsumfang von 'RESAUCE' steht nur den den GFA-Basic- Programmierern offen, da einige Funktionen Sourcecode fr diese Sprache erzeugen. 'RESAUCE' wurde aus folgenden Grnden geschrieben: 1.) Ich wužte noch nicht, wie man RSC-Dateien per GEM in eigene Programme einbindet und wollte mir dieses durch RESAUCE erleichtern. 2.) Ich wollte direkter als gew”hnlich auf die Resourcen zugreifen k”nnen, da dann Manipulationen leichter durchzufhren sind. 3.) Es nervte mich, daž die Resourcen als separate Dateien auf dem gleichen Pfad wie das Hauptprogramm vorliegen mssen und beim Kopieren leicht vergessen werden k”nnen. ------------------- Funktionsgruppen von 'RESAUCE' ------------------------ 1.) Speicher-Monitor. Mit dem Speichermonitor kann man ein bižchen im RAM und ROM rumst”bern. Er ist jedoch ziemlich primitiv und enth„lt keine komplexeren Befehle. ACHTUNG: Fehlerhafte Zugriffe werden nicht abgefangen !! 2.) Datei-Monitor zur Edierung von Dateien beliebigen Formats. 3.) Analyse und Manipulation von RSC-Dateien. Alle Routinen im Manipulations-Men habe ich ursprnglich geschrieben, weil deren Funktionen auch von der AES-Routine 'rsrc_load' ausgefhrt werden, die ich nachgebildet habe (wird auf Wunsch beim Umwandeln der RSC-Datei in GFA-Basic-DATAs miterzeugt !). Mit den Analyse-Funktionen konnte ich so problemlos berprfen, ob die Routinen funktionieren. Da seit der Version 1.2 in den Analyse-Funktionen stets die absolute und relative Adresse von Strukturen usw. angegeben werden, hat zumindest die Funktion zur Adrež-Umwandlung keinen grožen Wert mehr, da man die Ver„nderungen in 'RESAUCE' nicht mehr erkennen kann. Ich habe die Routine der Komplettheit halber aber dringelassen. 4.) Optimierung von RSC-Dateien. Diese Funktion verkrzt RSC-Dateien, indem doppelte Strings und Bilder gel”scht werden und deren Zeiger entsprechend umgesetzt werden. Die Optimierung bringt im Schnitt ca. 10%, die Funktionstchtigkeit des Resultats zu 99% gew„hrleistet. Man k”nnte zwar durch das L”schen identischer Strukturen noch eine weitere Optimierung erreichen; dies habe ich jedoch nicht eingebaut, da der Mehraufwand erheblich w„re (ca. 20 kB !) und die weitere Verkrzung nicht mehr so viel bringen wrde. 5.) Umwandlung von RSC-Dateien in GFA-Basic. Die DATAs werden an eine Routine angeh„ngt, die die DATAs in ein reserviertes Speicherstck l„dt und diese Resource dann wie die AES- Funktion 'rsrc_load' initialisiert. 6.) Analyse von Definitionsdateien. Diese Dateien enthalten die Namen der Variablen, die man den Objekten und B„umen im RCS gegeben hat. Man kann solche Dateien von 'RESCAUCE' auswerten und auch in GFA-Basic umwandeln lassen. šbrigens: Def.-Dateien mit der Endung '*.DEF' sind zum Kuma-Format kompatibel. Man muž also nur die Extension in '*.RSD' umbenennen und kann die Def.-Datei dann mit 'RESAUCE' laden. ------------- Differenzierte Beschreibung aller Funktionen ---------------- 1. šber RESAUCE: Kurzinfos ber dieses Programm 2. Lade-Men 1. RSC-Datei unver„ndert laden: šber diesen Menpunkt wird eine RSC-Datei in den Speicher geladen. Der n”tige Speicher wird mit GEMDOS 'Malloc' reserviert, um jeden Zugriff anderer Programme oder des GEM auf diese Datei zu verhindern. Die geladene Datei wird in keinster Weise ver„ndert. Alle folgenden Funktionen beziehen sich auf diese Datei, bis eine neue geladen oder RESAUCE beendet wird. ACHTUNG: Es wird nicht berprft, ob der Benutzer wirklich eine RSC-Datei geladen hat! Das Laden anderer Dateien ber diesen Menpunkt fhrt mit Sicherheit zu schweren Fehlern, da die Strukturen der Datei berprft und sogar ge„ndert werden k”nnen. Zum Laden von Nicht-RSC-Dateien benutzen Sie bitte den Menpunkt 2.5! 2. RSC-Datei mittels AES 'Rsrc_load' laden: Durch diesen Menpunkt wird eine RSC-Datei mittels der AES- Funktion 'Rsrc_load' geladen. Diese fhrt folgende T„tig- keiten durch: - Speicher reservieren - RSC-Datei per AES 'shel_write' suchen - RSC-Datei in reservierten Speicher laden - alle Objektkoordinaten mittels AES 'rsrc_obfix' umrechnen - Zeiger aller Strukturen von relativer auf absolute Adressierung umrechnen - Zeiger in der Liste von Zeigern auf die Objektb„ume umrechnen - einige Werte im AES-internen GLOBAL[]-Feld setzen ACHTUNG: Der RSC-Header wird N I E M A L S ver„ndert !! 3. Definitionsdatei im Format von Kuma (*.RSD) laden: Definitionsdateien sind Dateien, in denen das RCS zu einer RSC- Datei die vom Programmierer angegebenen Variablennamen der B„ume/ Objekte abspeichert. Mit 'RESAUCE' ist es m”glich, solche Dateien zwischen den Formaten von Kuma und DRI zu konvertieren. Dadurch kann man mit beiden RCS- Programmen an derselben RSC-Datei arbeiten. Zur Konvertierung muž man die Definitionsdatei nur laden und im gewnschten Format wieder abspeichern. ANMERKUNG: Es gibt auch noch Definitions-Dateien mit der Extension *.DEF. Diese sind vom alten DRI-RCS. Ihr Format ist mit dem Kuma-Format fast identisch, so daž diese bei diesen Dateien nur die Extension in *.RSD umbenannt werden muž. Dies ist auch „užerst sinnvoll, da sich die Extension *.DEF zum Standard fr Modula 2-Definitionsmodule ent- wickelt hat. 4. Definitionsdatei im DRI-Format laden: Siehe unter 2.3 ! 5. Beliebige Datei laden: Eine Datei wird in per GEMDOS 'Malloc' reservierten Speicher geladen. Diese Datei kann angezeigt, editiert und abgespeichert werden, letzteres auch als DATAs fr Basic. 3. Analyse-Men 1. Speichermonitor: Theoretisch kann man sich hiermit den gesamten Adrežraum des ST anzeigen lassen. Praktisch sind jedoch nur zug„nglich: - RAM-Adrežbereich: $0 - $3FFFFF - ROM-Adrežbereich: $FA0000 - $FEFFFF (normalerweise !) Folgende Tasten sind belegt: - '0'-'9' und 'A'-'F': Eingabe eines HEX-Bytes an der aktuellen Cursorposition - 'S': Ab Adresse ... anzeigen. Sie k”nnen die Adresse hexadezimal ('$' am Anfang) oder dezimal eingeben. - 'M': Schreib-Modus: Es gibt zwei Schreib-Modi: Im Normal- Modus kann man bestimmte Adressen, die System- variablen, nur lesen und nicht beschreiben. Das Beschreiben ist nur im Supervisor-Modus erlaubt. - Pfeil hoch, links, rechts, runter: Cursor-Steuerung. - Ctrl Pfeil links, rechts: Cursor an Seitenrand. - Ctrl Pfeil hoch, runter: Seite zeilenweise scrollen. ACHTUNG: Fehlerhafte Zugriffe werden nicht abgefangen !! 2. Dateimonitor: Hiermit k”nnen Sie sich Dateien anzeigen lassen und Žnderungen vornehmen. Die Steuerung erfolgt wie im Speicher-Monitor. 3. RSC-Header anzeigen: Der RSC-Header wird vollst„ndig ausgewertet. Es kann jedoch vorkommen, daž die Daten nicht der Norm entsprechen, z.B. setzt Megamax Modula's RCS immer das 1. Word auf 1 !! Durch diesen Aufruf werden gleichzeitig einige wichtige Variablen initialisiert, weshalb er nach jedem Laden einer RSC-Datei automatisch vorkommt. 4. Objektbaum in logischer Reihenfolge anzeigen: Vom ersten Objekt eines beliebigen Baums ausgehend, wird dieser in seiner hierarchischen Verknpfung angezeigt. Wenn im jeweiligen Objekt vorhanden, kann auch eine weitere Struktur angezeigt werden (String, TEDINFO, BITBLK, ICONBLK oder USERBLK). Erkl„rung der Objektdaten: - Wenn neben der Objektart ein X und eine Zahl stehen, bedeutet das, daž der Objekttyp im Highbyte die angegebene Zahl als Erweiterung enth„lt. - Anstelle des Zeigers kann das Objekt auch eine Erl„uterung des Aussehens des Objekts enthalten (OBJ+12). Hierbei gilt: DRi. = Dicke des Rahmens (innen) DRa. = Dicke des Rahmens (aužen) RF. = Rahmenfarbe TF. = Textfarbe T = transparent D = deckend FF. = Fllfarbe IF. = Innenfarbe Der Rest erkl„rt sich von selbst. 5. Objekte in physikalischer Reihenfolge anzeigen: Die Objekte werden in der Reihenfolge angezeigt, in der sie im Objektfeld vorliegen. Dazu wird zu jedem Objekt die logische Baum- und Objektnummer ausgerechnet. Auch hier kann man sich die weiteren Strukturen anzeigen lassen. 6. Objektfeld durchsuchen: Hiermit kann man das gesamte Objektfeld entweder nach Nullzeigern oder nach Objekten einer bestimmten Art durchsuchen lassen. Wenn man ein Objekt gefunden hat, daž das Suchkriterium erfllt, wird dieses automatisch angezeigt. Dann hat man noch die Wahl, ob man sich eine evtl. vorhandene zum Objekt geh”rende weitere Struktur anzeigen lassen m”chte oder ob das n„chste Objekt dieses Typs gesucht werden soll. 7. Freie Strings anzeigen: Hiermit kann man sich alle freien Strings, die die Resource ent- h„lt, hintereinander anzeigen lassen. Bei freien Strings handelt es sich meistens um die Texte von Alertboxen. 8. Freie Images anzeigen: Hiermit kann man sich die BITBLK-Strukturen der freien Images anzeigen lassen. 9. Def.-Datei anzeigen: Hiermit kann man sich alle Variablen anzeigen lassen. Weiterhin wird bei Objekten auf den Namen des Baums, zu dem das Objekt geh”rt, angegeben. 10. GLOBAL[]-Feld anzeigen: Man kann sich hiermit das GLOBAL[]-Feld anzeigen lassen. Dieses Feld ist eine Struktur, in der sich das AES von jedem aktiven Prozež wichtige Daten merkt (da der ST kein Multitasking beherrscht, gibts nur eine Struktur davon!). 4. RSC-Manipulations-Men 1. GLOBAL[]-Feld setzen: Hiermit kann man die Werte in das AES-interne GLOBAL[]-Feld eintra- gen, die auch beim Laden einer Datei mit AES 'rsrc_load' gesetzt werden: L„nge und Adresse des reservierten Bereichs, Anfangsadresse der Objektbaum-Tabelle. 2. Objektkoordinaten umrechnen: Rechnet die Koordinaten, an denen das Objekt positioniert werden soll, von Zeichen- in Pixelaufl”sung um. Bei den brigen Strukturen (TEDINFO usw.) liegen die Koordinaten schon in Pixel vor. 3. Zeiger der RSC-Datei umrechnen: In der unver„nderten RSC-Datei haben alle Adressen Wordl„nge und beziehen sich auf den Anfang der RSC-Datei im Speicher. Mit diesem Menpunkt werden alle Adressen auf absolute Longwerte umgerechnet. Umgerechnet werden alle Adressen im Objektfeld, die Adressen der freien Images und Strings sowie alle Adressen aus der Objketbaum- Tabelle. 5. Optimierung von RSC-Dateien Hiermit werden RSC-Dateien durch L”schen doppelter Strings und Bilder sowie dem Umsetzen deren Zeiger verkrzt. Die Optimierung bringt im Schnitt ca. 10%, die Funktionstchtigkeit des Resultats bleibt zu 99% (oder gar 100% ?) gew„hrleistet. Man k”nnte zwar durch das L”schen identischer Strukturen noch eine weitere Optimierung erreichen; dies habe ich jedoch nicht eingebaut, da der Mehraufwand erheblich w„re (ca. 20 kB Code !) und die weitere Verkrzung nicht mehr so viel bringen wrde. WICHTIG: Wenn man in der Resource nur Platz reservieren m”chte, um dort zum Beispiel Rechenergebnisse zur sp„teren Ausgabe abzulegen, dann darf dieser Platzhalter logischerweise nicht mitoptimiert werden. Aus diesem Grunde werden von RESAUCE Strings, die aus lauter Neunen bestehen, nicht mitoptimiert !! 6. Speicher-Men 1. Datei speichern unter ... Die Datei wird in dem Format, in dem sie vorlag, wieder abgespeichert. Žnderungen werden bernommen. 2-4. Datei als DATAs fr GFA-Basic abspeichern: Die ASCII-Werte der einzelnen Bytes werden als DATAs gespeichert. Hierbei gibt es verschiedene Stufen, wie grož die dazuge- h”rigen Routinen ausfallen: 2. nur die DATAs inklusive einer Routine, die die DATAs in ein Speicherstck l„dt. 3. Dazu werden die Adressen einer RSC-Datei umge- rechnet und das AES-Global[]-Feld erg„nzt. Diese Auswahl ist nur sinnvoll, wenn die RSC- Datei normal geladen wurde und die Koordinaten schon umgerechnet wurden. In diesem Falle l„uft die Datei problemlos in der Aufl”sung, die bei der Behandlung der Resource eingestellt war !! 4. Die Routine rechnet auch noch die Koordinaten um, so daž die Resource in allen Aufl”sungen lauff„hig ist. Hierzu darf die Datei noch nicht mit AES-Mitteln manipuliert worden sein. 5. Definitionsdatei im Kuma-Format speichern: Wenn man eine Definitionsdatei geladen hat, kann man diese hiermit im Kuma-Format, also mit der Endung '*.RSD', abspeichern. Siehe 2.3 !! 6. Definitionsdatei im DRI-Format speichern: Wenn man eine Definitionsdatei geladen hat, kann man diese hiermit im Format des RCS V2.0 von Digital Research, also mit der Endung '*.RSD', abspeichern. Siehe 2.3 !! Esc. Ende des Programms !! --------------------------- Eine kleine Bitte ----------------------------- Falls Sie Fehler oder Verbesserungsm”glichkeiten gefunden haben, schicken Sie diese bitte an die folgende (meine) Adresse: Tilman Neumann Zum Walde 11 3155 Edemissen Wenn Sie eine Diskette plus frankiertem Rckumschlag mitschicken, gibt's m”glichst schnell die verbesserte Version zurck. Also denne, viel Spaž bei der Benutzung.