Linked-list problems in DBW_Render
Prem Subrahmanyam
prem at geomag.fsu.edu
Wed Aug 16 07:41:53 AEST 1989
I have been trying to modify DBW 1.0 and have done quite well so far,
however, I seem to be at an impass. See, I've been trying to implement
an algorithm that will use a sorted linked-list. The old file read
procedure would simply knit together the list by having a pointer called
opp to point to the *next field of the last read in item and then say:
allocate new object; (pseudocode, folx)
*opp = (long *)(pointer to new object)
make lots of assignments.
opp = &(long *)(pointer to object)->next
etc. etc. etc.
next is defined as a pointer to a node. the object can be one of many
types (sphere, parallelogram, triangle, etc.).
Now, here's what I've tried to do.
allocate new object;
make lots of assignments;
sort( *opp,(pointer to new object));
opp does not change positions, but acts as a root for this particular
segment of the list. Sort does the following:
sort( sortroot, np)
node **sortroot;
node *np;
{
node *cur=*sortroot; /* i.e. , make cur point to whatever the root is
pointing to */
node *prev;
if (!*sortroot) {
*sortroot = np;
np->next = NULL;
} /* insert at the beginning of a non-empty list */
else
if (if *np should go before **sortroot)
/* i.e. item should go at beginning of non-empty list */
{
np->next = *sortroot;
*sortroot = np;
}
else
{ while ((cur->next)&&(*cur should go before *np) {
prev = cur;
cur = cur->next;
}
if (we're at the end of the list) {
cur->next = np;
np->next = NULL;
}
else
{
np->next = cur;
prev->next = np;
}
}
}
bear in mind that the objects actually being sorted away are much more than
nodes, but contain within them the items in a node...something like
typedef struct NODE {
NODE *next;
other stuff;
} node;
and a sphere object is like
typedef struct {
node *next;
other stuff; /* other stuff in node */
sphere thingies;
}sphere;
I have tried everything short of pulling all my hair out to get this to
work right. I've tried type-casting every pointer in sort to (long *).
EVERYTHING!!!!! The strangest thing is that the debug procedures show
everything to be in place in the list USING THE EXACT SAME ACCESS AS THE
ACTUAL PROCEDURES DO, yet none of the procedures are able to locate and
use the objects. It's the case of the missing linked list that's really
not missing, but is there. Anyone out there worked a lot on modifying
DBW who could point out what might be going wrong. I modified dumpnode()
to dump all the information contained within the objects, and believe me,
there is not an item missing. I would use the Lattice CodeProbe, but I
only have 512K of memory, not enough to be usable. PLEASE HELP!!!!!!
as always, direct replies electro-mail to prem at geomag.gly.fsu.edu
and once again,....thanks for your support.
More information about the Comp.lang.c
mailing list