Paths versus Recursion

/*
 * Iterative DepthFirst file list (c) Victor Yodaiken 2013
 *
 * "Not the way we do it in Brooklyn" - Dave "Kinch" Arnow. 
 *
 *
 * Data structure is P - the current path, with some aux data
 *
 * Two basic operations:
 * 1) Lp(P) - starts at path P and extends it to the leftmost
 * reachable file/directory
 * 2) IterateDF(P) iterates by advancing a path to the next in depth 
 * first order
 *
 * So program is
 *
 * Initialize(P);
 * do{
 * PrintPath(P);
 * }while(IterateDF(P) != EOF)
 *
 *
 * Horribly inefficient - can be cured by caching positions in directory
 * entries.
 *
 * */
Link to Code