ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Etwas nach Programmende im Speicher behalten... ? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
22.01.2012, 21:52 Uhr AGSzabo Posts: 1663 Nutzer |
Hi, ich schreibe einen Patch für die ASL library, der bewirken soll, dass stattdessen mein eigener Filerequester benutzt werden soll. Bis auf weiteres (commodity?) soll ein Shellprogramm beim ersten Aufruf den Patch insatllieren und beim zweiten Aufruf wieder heraus nehmen. Dazu müsste ich zwischendurch etwas im Speicher behalten, nämlich den Zeiger auf die geöffnete ASL library und meine eigenen library und dazu auch die Zeiger auf die alten, von mir gepatchten Funktionen der ASL library. Mit welcher Methodik kann ich mir diese Daten zwischen den zwei Starts des Patchprogrammes merken? -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ - Antworten - Zitieren - Direktlink - ] |
22.01.2012, 22:15 Uhr NoImag Posts: 1050 Nutzer |
@AGSzabo: Dein Programm muss im Hintergrund weiterlaufen. Tschüß [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 09:44 Uhr DrNOP Posts: 4118 Nutzer |
@AGSzabo: In einer (zwei, drei ...) Env-Variable? -- Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 11:33 Uhr o1i Posts: 43 Nutzer |
@AGSzabo: http://aminet.net/package/util/misc/SaferPatches [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 12:07 Uhr akl Posts: 265 Nutzer |
@AGSzabo: Semaphore? [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 13:04 Uhr Der_Wanderer Posts: 1229 Nutzer |
Dein Programm muss im Speicher bleiben. Sonst ist ja auch der Code weg. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 16:11 Uhr Thore Posts: 2266 Nutzer |
Durch ne Semaphore, einen Port oder durch einen eindeutigen Tasknamen kannst Du prüfen, ob das Programm bereits gestartet wurde. Aber wie die anderen schon sagten, das Programm muss laufen, wenn du diese Funktionalität willst. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 16:44 Uhr AGSzabo Posts: 1663 Nutzer |
Anfangs dachte ich, es würde genügen, wenn ich die Pointer umbiege. Dann hätte eine Semafore genügt, um die alten Pointer zu merken, Aber dann bin ich dahinter gekommen dass ich einen Abfang-code brauche, der evtl auf das normale ASL zurückfällt, wenn etwas anderes als der Filerequester gewünscht ist. Ich habe es jetzt über einen neuen Prozess gelöst, der gestartet wird und dann wartet bis ihm das Signal gegeben wird, um sich zu beenden und den Patch rückgängig zu machen. Es funktioniert! -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ Dieser Beitrag wurde von AGSzabo am 23.01.2012 um 16:46 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 16:46 Uhr Thore Posts: 2266 Nutzer |
> Ich habe es jetzt über einen neuen Prozess gelöst, der gestartet wird und dann wartet bis ihm das Signal gegeben wird, um sich zu beenden. Das ist eine saubere Lösung [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 18:06 Uhr AGSzabo Posts: 1663 Nutzer |
@Thore: Jetzt müsste mein Patch noch irgendwie warten, bis der User den letzten allokierten Filerequester geschlossen und freigegeben hat... auch darf man den Patch nicht starten, wenn schon jemand einen FileRequester allokiert oder gar offen hat. -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 19:27 Uhr Holger Posts: 8116 Nutzer |
Zitat:Nö, Du musst nur einen Mechanismus einbauen, um eigene Requester von originalen unterscheiden zu können. Dann kannst Du die alten an die ursprüngliche Routine weiterleiten. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 19:30 Uhr AGSzabo Posts: 1663 Nutzer |
@Holger: Achso ja stimmt. Hab ich auch schon so gemacht. Denkfehler. -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 19:46 Uhr AGSzabo Posts: 1663 Nutzer |
Weiss zufällich jemand warum mein Patch unter OS 4.1 garnichts tut? Trotz Patch kommt immer wieder der originale ASL requester. Keine Abstürze... -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 20:29 Uhr Holger Posts: 8116 Nutzer |
Zitat:Weil Du nur die 68k-Stubs patchst und nicht die echte ppc-Library? -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 22:02 Uhr AGSzabo Posts: 1663 Nutzer |
Wenn gerade einer von meinen Requestern offen ist und währenddessen jemand dem patch rückgängig macht, gibts nen guru. -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 22:13 Uhr AGSzabo Posts: 1663 Nutzer |
@Holger: > Weil Du nur die 68k-Stubs patchst und nicht die echte ppc-Library? Geht das überhaupt, was ich da vor habe oder kann man keinen 68k code aus einer echten ppc library aufrufen? Wenn doch, wie denn? -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 22:38 Uhr thomas Posts: 7718 Nutzer |
Zitat: Das glaube ich nicht. Der Guru kommt, weil du den Programmcode frei gibst, während das Programm noch läuft. Du musst zuerst die Library-Vektoren wieder zurücksetzen, dann warten bis alle Requester geschlossen sind und erst dann das Programm bzw. den Prozess verlassen. Außerdem solltest du dir darüber im Klaren sein, dass du die Library-Vektoren nicht einfach so zurücksetzen darfst, sondern du musst zuerst prüfen, ob jemand anders sie nach die verändert hat und wenn ja, darauf warten, dass der andere sie wieder auf deine setzt. Erst dann darfst du sie auf deine Vorgänger zurücksetzen. -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
23.01.2012, 22:44 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas: > Du musst zuerst die Library-Vektoren wieder zurücksetzen, dann warten bis alle Requester geschlossen sind und erst dann das Programm bzw. den Prozess verlassen. Das glaube ich nicht. Wenn ich die Vektoren zuerst zurück setze, dann wird ein gerade offner Requester meiner Art mit dem normalen ASL code geschlossen. Das kann nicht gut gehen. Und wie soll ich warten? Delay() und gucken? -- Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system. [ Dieser Beitrag wurde von AGSzabo am 23.01.2012 um 22:44 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
24.01.2012, 10:19 Uhr Holger Posts: 8116 Nutzer |
Zitat:Man kann 68k-Code von ppc-code aus aufrufen. Das heißt aber noch lange nicht, dass Du eine ppc-Library von 68k-Code aus umbiegen kannst. Es gibt für Libraries auf NG-Amigas mindestens zwei Szenarien: Da die asl.library zum OS gehört, liegt sie bei AOS4 in ppc-Form vor. Das heißt, ppc-Programme verwenden die ppc-Library direkt und interessieren sich nicht für die Stub-Lib, die Dein 68k-Programm vorgesetzt bekommt. Um die Aufrufe von ppc-Programmen auf Deine 68k-Routine umzubiegen, müsstest Du die ppc-Version patchen und auf eine Stub-Routine umbiegen, die (äquivalent zum Aufruf einer 68k-Library durch ein ppc-Programm) Deinen 68k-Code aufruft. Zitat:Nein. Du setzt zuerst die Vektoren der Funktionen zurück, die neue Requester anlegen. Dann wartest Du, bis der letzte Deiner speziellen Requester geschlossen wurde. Dann setzt Du die anderen Vektoren zurück. Dan heißt aber noch lange nicht, dass kein Programm mehr Deine Vektoren kennt. Es gibt keine definierte Haltbarkeitsdauer für Vektoren. Die sauberste Variante ist deshalb, danach zu warten, bis auch das letzte Programm die Library geschlossen hat, bevor man den Code freigibt. Oder man verwendet von vornherein eine zweite Library. Dann hat man nämlich den Überblick darüber, wie viele Programme die ungepatchte und wieviele die gepatchte Version geöffnet haben. Dann kann man auch die gepatchte Version automatisch freigeben lassen, sobald sie von niemanden mehr verwender wird. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
24.01.2012, 11:27 Uhr thomas Posts: 7718 Nutzer |
Zitat: Es ist genau umgekehrt. Eine native PPC-Library kann eine 68k-Sprungtabelle enthalten. Die Vektoren zeigen auf PPC-Code, was von der Emulation automatisch erkannt und korrekt ausgeführt wird. Eine 68K-Library kann von PPC-Programmen grundsätzlich nicht benutzt werden. Dazu wird eine PPC-Stub-Library benötigt, die aus den fd-Files und clib-Includes fast automatisch generiert werden kann. Von einem 68k-Programm aus eine PPC-Library zu patchen dürfte eine interessante Herausforderung sein. Es steht und fällt damit, dass es für IExec->SetMethod einen 68k-Vektor gibt. Und man muss genug PPC-Assembler können, um den PPC-Stub zu programmieren. -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
24.01.2012, 18:11 Uhr Holger Posts: 8116 Nutzer |
Zitat:Ist es das? Du sagst doch sinngemäß das Gleiche: ppc-Library kann von 68k-Code nur dann aufgerufen werden, wenn es ausdrücklich unterstützt wird, der Aufruf einer 68k-Library durch ppc-Code kann dagegen automatisiert werden. Zitat:Die Emulation erkennt mitnichten automatisch, dass eine bestimmte Adresse PPC-Code enthält. Der Overhead wäre ja gigantisch. Vielmehr gibt es Pseudo-68k-Instruktionen, die dem Emulator explizit sagen, dass er jetzt ppc-Code ausführen soll. Und den Code, der diese Pseudo-Instruktion enthält, nennt man Stub. Zitat:Was eben bedeutet, dass PPC-Programmen sehr wohl 68K-Libraries benutzen können. Schließlich benötigen sie offensichtlich exakt dasselbe, was ein 68k-Programmierer benötigt, um eine 68k-Library benutzen zu können. Der Fall, dass ein Library-Autor gerade für die Programmiersprache/den Compiler des Anwendungsprogrammierers passende includes mitliefert, um die Generierung aus fd-Files zu überspringen, kann man getrost als Spezialfall ansehen. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Etwas nach Programmende im Speicher behalten... ? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |