amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > HOOK's was ist das ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

20.01.2004, 12:41 Uhr

JensB
Posts: 193
Nutzer
Hi Leute !

Folgendes ich möchte ein Listview-Gadget in MUI benutzen (das MUI eigene oder NList,mal sehen) . In der Form etwa

In der Form etwa :

I Status I Name I
I x I Bernd I
I f I Stift I
I k I Gesselle 1 I

[editiert]
das I soll eine Vertikale Linie sein ,aber die Formatierung haut hier nicht hin ,mhhh.
x,f,k sollen als Image drinne sein.

Ich habe Sourcecodes und mir die AutoDocs mal angeschaut (mit meinem bescheidenem English,wird zwar immer besser aber es dauert) ,da steht was mit "MUI???_ConstructHook, &constructhook," (habs jetzt nicht ganz im Kopf,hab nur gerade Pause im Betrieb), hab mich dann weiter umgeschaut nach diesen "Hook's" (aber mein English,da wirds dann doch schon eng) vieleicht kann mir mal jemand von euch in kurzen worten erklären (und auf deutsch) was das auf sich hat. Wenn ich erstmal ne vorstellung habe was das ist dann komm ich der sache schon einiges näher und das übersetzen fällt mir dann leichter (auch das verstehen der zusammenhänge beim übersetzen wenn ich wenigstens etwas deutsches irgendwo mal gehört habe. RKRM habe ich *g* schon ewig hat mir ja damals auch geholfen aber "Hook's" hab ich noch nie gebraucht ,erst mit MUI hab ich das gefühl ,wirds benötigt.


Mfg JensB

[ Dieser Beitrag wurde von JensB am 20.01.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

20.01.2004, 14:03 Uhr

thomas
Posts: 7718
Nutzer

Ein Hook bietet dem System die Möglichkeit, selbständig eine Routine in deinem Programm aufzurufen. Sozusagen "zurückzurufen" (call-back-hook).

Üblicherweise wird ein Pointer auf ein struct Hook übergeben, in dem einige Daten über deine Routine stehen:

struct Hook
{
struct MinNode h_MinNode;
ULONG (*h_Entry)();
ULONG (*h_SubEntry)();
APTR h_Data;
};

h_Entry ist die Adresse deiner Routine. Diese wird nach Assembler-Konvention mit den Parametern in Registern aufgerufen (s.u.).
h_SubEntry ist ein zweiter Einsprungpunkt, der aber vom System nie genutzt wird. Wenn deine Unterroutine ein (unbehandeltes) C-Programm ist, dann übergibst du in h_Entry eine kleine Assembler-Routine und in h_SubEntry dein C-Programm. Die Assember-Routine schiebt die Registerinhalte auf den Stapel und ruft das C-Programm.

h_Entry wird mit folgenden Parametern aufgerufen:

A0 - Zeiger auf die Hook-Struktur selbst
A1 - Zeiger auf eine Parameter-Structur ("message")
A2 - Hook-specifische Adresse ("object")

Üblicherweise deklarierst du deine Hook-Funktion so:

ULONG __saveds __asm HookFunc(register __a0 struct Hook *hook, register __a2 APTR object, register __a1 APTR message);

Dann kannst du HookFunc direkt in h_Entry übergeben und mußt dich nicht um h_SubEntry kümmern.

Ansonsten müßtest du ein kleines Assembler-Programm schreiben:

_hookEntry:
move.l a1,-(sp) ; push message packet pointer
move.l a2,-(sp) ; push object pointer
move.l a0,-(sp) ; push hook pointer
move.l h_SubEntry(a0),a0 ; fetch C entry point ...
jsr (a0) ; ... and call it
lea 12(sp),sp ; fix stack
rts

und deine C-Funktion normal deklarieren:

ULONG HookFunc(struct Hook *hook,APTR object,APTR message);

Dann machst du

hook->h_Entry = hookEntry;
hook->h_SubEntry HookFunc;

Das System wird dann wannimmer es möchte (in deinem Fall für jede Zeile des ListView) die Hook-Funktion entsprechend der Hook-Struktur aufrufen.

Quelle: utility/hooks.h

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

20.01.2004, 14:46 Uhr

Solar
Posts: 3680
Nutzer
(Selbst gelöscht, Blödsinn gepostet.)

[ Dieser Beitrag wurde von Solar am 20.01.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

20.01.2004, 15:04 Uhr

JensB
Posts: 193
Nutzer
Zitat:
Original von Solar:
(Selbst gelöscht, Blödsinn gepostet.)


Manchmal ist aus Blödsinn schon einiges enstanden. Man hat vieleicht daduch mal in einen gedankenblitz eine Idee gehabt und es funktionierte.

Mfg JensB



[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > HOOK's was ist das ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.