🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fras.text.programmieren
Article #49

Re: Frage zu Messages & Nodes

#49
From: Andreas Winkelmann
Date: Sat, 30 Sep 1995 12:46
86 lines
2839 bytes
Hallo Steffen.

> Ich habe eine eigene Message-Struktur:
> 
> struct DemoMessage
> {
>     struct Message Message;
> 
>     STRPTR Name;
> };
> 
> Nun möchte ich die Message in eine Exec-Liste eintragen.
> Das muß ich doch so machen:
> 
> AddTail(List,(struct Node *)DemoMessage->Message); <- Richtig????

Es funktioniert. Vorausgesetzt, dass DemoMessage ein Pointer
auf eine DemoMessage-Struktur ist.

In diesem Fall, hilft Dir aber die Tatsache, dass die Struktur
Message an erster Stelle der Struktur DemoMessage steht. Es
reicht also :

AddTail(List,(struct Node *)DemoMessage);

> Zweites Problem: Ich bekomme eine Nachricht zurück und möchte
> diese nun aus der Liste nehmen und den reservierten Speicher
> wieder freigeben. Leider habe ich Probleme, die Adresse der
> empfangenen Message in der Liste zu finden. Ursprünglich wollte
> ich es wie in den RKRM p.496 beschrieben ist, lösen:

> struct X *WorkNode;
> struct X* NextNode;
> 
> 
>     WorkNode = (struct X *)List->ln_Head;
> 
>     while(NextNode = (struct X *)WorkNode->...->nn.Node.ln_Succ)
>     {
> 
>         WorkNode = NextNode;
>     }
> 
> Was für ein Typ muß X sein? DemoMessage, Message oder gar Node?
> Ich habe so etwas schon einmal mit eigenen Node-Strukturen
> gemacht, aber da war es etwas einfacher,da die Node-Struktur am
> Anfang meiner Struktur stand. Diesmal blicke ich da nicht so
> richtig durch.... :-(((

Das kommt darauf an, was Du hast. Folgendes Beispiel ist sicher
am unproblematischsten :


 struct Node *WorkNode, *NextNode;

  WorkNode = List->lh_Head;

  while(NextNode = WorkNode->ln_Succ)
  {
     WorkNode = NextNode;
  }


Allerdings klappt das wohl nicht immer. Wann kommst Du schon
mit normalen Node-Strukturen aus ?
Wenn Du

 struct DemoMessage *WorkNode, *NextNode;

hast, wird es schon ein wenig komplizierter.

  WorkNode = ( struct DemoMessage *)List->lh_Head;

  while(NextNode = (struct DemoMessage*)((struct Node*)WorkNode)->ln_Succ)

Natürlich geht auch :

  while(NextNode = (struct DemoMessage*)WorkNode.Message.mn_Node.ln_Succ)
  {
     WorkNode = NextNode;
  }

-----
Andreas Winkelmann

E-Mail : andi@art-line.art-line.de -- MicroDot V1.11beta12
Technical Details
Message-ID: <wbVhJMD12aUz1@andi.art-line.art-line.de>
Path: arc1-ca.pugleaf.net!art-line.de!andi
References: <waAyIMD356aez2@p-zimmer.ame.osn.de>

Show Full Headers
Complete Article Headers
Newsgroups: fras.text.programmieren,z-netz.rechner.amiga.programmieren
Message-ID: <wbVhJMD12aUz1@andi.art-line.art-line.de>
From: andi@art-line.art-line.de (Andreas Winkelmann)
Path: arc1-ca.pugleaf.net!art-line.de!andi
Organization: - Keine -
Subject: Re: Frage zu Messages & Nodes
Date: Sat, 30 Sep 1995 13:46:33 +0100
X-Mailer: MicroDot 1.11beta12 [REGISTERED 000012]
References: <waAyIMD356aez2@p-zimmer.ame.osn.de>
X-Gateway: ZCONNECT UP royal.owl.de [UNIX/Connect v0.73]
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Z-Post: - Keine -