/* John Pfeiffer 26may08 Receiving piped data of directory names v2 (dynamic memory)*/
/* usage: dir /ad /b | dirnames.c.exe */
#include <stdio.h>
#include <stdlib.h>
typedef struct node tnode;
typedef struct node* nodeptr;
struct node
{ char name[256];
nodeptr next;
nodeptr prev;
};
nodeptr talloc(void)
{ return( (nodeptr)malloc( sizeof( struct node)) ); }
int main(int argc, char* argv[])
{
int i=0;
char c, buffer[256];
nodeptr current;
nodeptr newnode;
nodeptr root = talloc();
strcpy(root->name,".");
root->prev = NULL;
root->next = NULL;
current = root;
c = getchar();
printf("\nReceiving...\n");
while( c != EOF )
{
if( c == '\n' )
{ buffer[i] = '\0';
newnode = talloc();
strcpy(newnode->name, buffer);
newnode->prev = current;
newnode->next = NULL;
current = newnode;
i=0;
}
else
{ buffer[i] = c;
i++;
}
c = getchar();
}
i++;
buffer[i] = '\0';
/* newnode = talloc();
strcpy(newnode->name,buffer);
newnode->prev = current;
newnode->next = NULL;
current = newnode;
*/
while( current != NULL )
{
puts( current->name );
newnode = current;
current = current->prev; /* reverse listing */
free(newnode); /* we've seen what's inside, now clean up */
}
return 0;
}