#include extern char *malloc (); extern char *strsave (); struct stack_st { struct stack_st *next; char *filename; }; int push ( stack , filename ) struct stack_st **stack; char *filename; { struct stack_st *p , **pp; p = (struct stack_st *) malloc ( sizeof ( struct stack_st ) ); if ( p == NULL ) return ( 0 ); p->filename = strsave ( filename ); if ( p->filename == NULL ) { free ( p ); return ( 0 ); } p->next = NULL; for ( pp = stack; *pp != NULL; pp = &(*pp)->next ) ; *pp = p; return ( 1 ); } char * pop ( stack ) struct stack_st **stack; { char *filename; struct stack_st *p , **pp; static char buf[ 512 ]; if ( *stack == NULL ) return ( NULL ); for ( pp = stack; (*pp)->next != NULL; pp = &(*pp)->next ) ; strcpy ( buf , (*pp)->filename ); free ( (*pp)->next ); *pp = NULL; return ( buf ); }