Autor Thema: rsrc_gaddr und typ OBJECT  (Gelesen 16955 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline m0n0

  • Benutzer
  • Beiträge: 984
rsrc_gaddr und typ OBJECT
« am: Do 15.07.2010, 00:06:41 »
Hallo,

ich habe mal eine kleine Frage... ich kann rsrc_gaddr ja einen Typ übergeben und eine "Objekt ID"... woher sollte die Funktion nun aber wissen aus welchem Tree das Objekt meiner Begierde entspringen soll??

Ich bekomme immer ein Falsches Objekt Zurückgegeben, eines aus dem Menü... und zwar den Menüpunkt eines Acc's... das Accessory wird zwar nicht angezeigt, aber es ist einer diese Platzhalter von Resource Master.

Wenn ich die Platzhalter im Resourcemaster entferne stürzt das Programm ab, bzw. der ganze Atari.

Kann jemand dazu nähere Infos geben? Muss mann rsrc_gaddr evt. öffters aufrufen, bis man das richtige Objekt hat? Oder sowas?

Was ich halt komisch finde das die Objekt ID doppelt vergeben ist....

 
« Letzte Änderung: Do 15.07.2010, 00:12:00 von m0n0 »

Offline m0n0

  • Benutzer
  • Beiträge: 984
Re: rsrc_gaddr und typ OBJECT
« Antwort #1 am: Do 15.07.2010, 17:39:51 »
Ich verstehe zwar noch immer nicht wieso das passiert aber ich rechne mir die Adressen der Objekte nun selber aus in dem ich ObjektID * die grösse eines GEM Objekts + Startadress des Objektbaums rechne.

Aber es muss doch auch mit rsrc_gaddr gehen....

gstoll

  • Gast
Re: rsrc_gaddr und typ OBJECT
« Antwort #2 am: Do 15.07.2010, 18:58:56 »
Kann jemand dazu nähere Infos geben?

Was genau möchtest Du machen?

Mit rsrc_gaddr geht es nur wenn Du die tatsächliche Nummer einer bestimmten Struktur hast. Wenn Du die genau Adresse eines Objekt haben möchtest muß Du folgendes tun:

OBJECT *tree;
rsc_gaddr ( R_TREE, Nummer des Dialog, &tree);

Dann kannst Du mit

tree[Nummer des gewünschten Objekt].gewünschtes Attribut

weiter arbeiten.

Gerhard


Offline m0n0

  • Benutzer
  • Beiträge: 984
Re: rsrc_gaddr und typ OBJECT
« Antwort #3 am: Fr 16.07.2010, 08:41:21 »
Zitat
Was genau möchtest Du machen?

Die Flags / andere Felder des Objektes manipulieren. Geht mit meiner oder Deiner Lösung auch.
Bzw. um das zu tun möchte ich die Adresse des Objektes ermitteln.

Ich frage mich warum man denn bei rsrc_gaddr andere Objekttypen als R_TREE angeben kann, wenn das Ergebniss das man haben möchte, eh nicht geliefert wird. D.h. das ich gebe an das ich den Typ R_OBJECT haben möchte, und zwar mit dem Index 10 (kann ich zwar nicht angeben: aber ich möchte es aus dem Tree XY)... aber was bekomme ich? Ich bekomme einen Menüpunkt aus dem Tree MENU...

Wozu ist rsrc_gaddr denn gut wenn ich es mit anderen Typen als R_TREE aufrufe?

gstoll

  • Gast
Re: rsrc_gaddr und typ OBJECT
« Antwort #4 am: Sa 17.07.2010, 07:11:42 »
Ich frage mich warum man denn bei rsrc_gaddr andere Objekttypen als R_TREE angeben kann, wenn das Ergebniss das man haben möchte, eh nicht geliefert wird.

Doch das bekommst Du schon nur ist Deine Eingabe falsch. Die Objektnummer die Du benutzt ist bezogen auf das Wurzelobjekt (Root, Objekt 0) des von Dir gewünschten Baumes.

Du bräuchstest die absolute Nummer. Ich kenne jetzt nur kein Resource Programm das diese ausgibt. Alle mir bekannten Programme nutzt die von mir aufgezeigte Methode. Es wird einfach nach dem laden der Datei (rsc_load) in globalen Variabeln die Adressen der einzelnen Bäume gespeichert.

Wozu ist rsrc_gaddr denn gut wenn ich es mit anderen Typen als R_TREE aufrufe?

Einzig für was ich es noch nutze ist um den Zeiger der freien Strings zu bekommen.

Du könntest aber bei der Kenntnis der maximal Zahl z.B. aller Objekte diese alle in einer Schleife verändern.

Gerhard

guest2552

  • Gast
Re: rsrc_gaddr und typ OBJECT
« Antwort #5 am: Sa 17.07.2010, 11:08:16 »
Hallo m0n0,

Gerhard hat vollkommen recht.

Die Funktion rsrc_gaddr() bietet nur die Möglichkeit einen Index anzugeben.
Da sowohl die Bäume als auch die Objekte innerhalb der Bäume von '0' beginnend durchnummiert werden und es dadurch mehrere Objekte mit dem selben Index geben kann, hast Du keine Möglichkeit mitzuteilen für welchen Baum dieser Objektindex bestimmt ist.
Als Folge wird die Adresse des Objektes mit dem selben Index im 1. vorkommenden Baum zurückgeliefert.

Eine durchlaufende, baumunabhängige Nummerierung gibt es nur innerhalb der RSC-Datei.

Du hast also nur die (standardmäßig so angewendete) Möglichkeit Dir die Baumadressen zu holen und merken und über den Index und die evtl. definierte RSC-Objektstruktur oder den Strukturoffset (24 Byte) an die Daten zu kommen.

Gruß Charly

Offline m0n0

  • Benutzer
  • Beiträge: 984
Re: rsrc_gaddr und typ OBJECT
« Antwort #6 am: Sa 17.07.2010, 11:23:01 »
Dann versteh ich nicht warum man da andere Typen angeben kann als R_TREE.... Wenn man eh nur aus dem Tree 1 was auslsen kann.

"Die Objektnummer die Du benutzt ist bezogen auf das Wurzelobjekt (Root, Objekt 0) des von Dir gewünschten Baumes."

Ich kann den Baum aber nicht "wie gewünscht" angeben im Funktionsaufruf  ;)

guest2552

  • Gast
Re: rsrc_gaddr und typ OBJECT
« Antwort #7 am: Sa 17.07.2010, 14:42:55 »
Hi m0n0,

es gibt neben den Bäumen eben auch noch freie Strings, freie Images etc. deren Adressen mit diesem Befehl direkt zu besorgen sind.
Der Ansatz für Objekte war halt scheinbar  ??? eine durchlaufende Nummerierung ohne Gruppierung, was jedoch sowohl im Resource-Construction-Set (hierarchischer Objektaufbau, Sortierbarkeit etc.) problematisch wäre als auch im Programm (Erkennbarkeit der Baum<->Objektzuteilung, einfache lückenlose Ansprache aller Objekte eines Baumes von '0' bis zum 'Last_Ob'-Flag) stets recht komplizierte und zeitaufwändigere Routinen erfordert hätte bis das korrekte Objekt erkannt/angesprochen wäre.
Deshalb und der Übersichtlichkeit wegen haben die RCS-Programme schon immer die Indizes in den Header-Dateien der RSC-Dateien mit Baumbezug ausgegeben. Dieses System funktioniert halt in rsrc_gaddr() mit dem nötigen durchgängigen und bezugsfreien Index bei Objekten nicht.

Durch die fehlende Doku und den anderen Denkansatz beim Implementieren der rsrc_gadr()-Funktion ist das ganze halt etwas unglücklich implementiert und hat schon zu vielen Stunden sinnlosem Rumprogrammieren geführt.
Der Grund für diese Implementierung: Auch Systemprogrammierer dürfen Fehler machen  ;) wie wir alle, nur sollen's weniger sein. Auf Deutsch: Ich weiß es nicht, vielleicht andere!

Viele Bibliotheken rüsten halt bei Bedarf eine eigene Funktion für Objektadressen nach. Es ist aber nicht wirklich nötig, da sich auf Baumadressenbasis wirklich prima und übersichltich arbeiten läßt.

Gruß Charly

Offline m0n0

  • Benutzer
  • Beiträge: 984
Re: rsrc_gaddr und typ OBJECT
« Antwort #8 am: Sa 17.07.2010, 15:39:34 »
Ahja, danke für die Info.

Wundert mich nur warum das in den der Dokumentation der Funktion nicht so richtig durch kommt.

Gruß,
m0n0

gstoll

  • Gast
Re: rsrc_gaddr und typ OBJECT
« Antwort #9 am: So 18.07.2010, 07:45:37 »
Dann versteh ich nicht warum man da andere Typen angeben kann als R_TREE....

Das AES nutzt die um nach dem laden der Resourcedatei die Objekte anzupassen.

Gerhard