SLVMAZE.H
#ifndef __SLVMAZE_H__ 
#define __SLVMAZE_H__ 
 
#define ANI_STATE_NONE          0 
#define ANI_STATE_TURN_TO       1 
#define ANI_STATE_TURN_AWAY     2 
#define ANI_STATE_FORWARD       3 
#define ANI_STATE_REVERSE       4 
 
#define SOL_DIR_LEFT    0 
#define SOL_DIR_UP      1 
#define SOL_DIR_RIGHT   2 
#define SOL_DIR_DOWN    3 
#define SOL_DIRS        4 
 
#define SOL_TURN_LEFT   0 
#define SOL_TURN_RIGHT  1 
 
typedef struct _MazeGoal 
{ 
    int clx, cly; 
    void *user; 
} MazeGoal; 
 
typedef struct _MazeSolution 
{ 
    int clx, cly; 
    int dir; 
    Cell *maze; 
    int w, h; 
    MazeGoal *goals; 
    int ngoals; 
    int ani_state; 
    int ani_count; 
    int *turn_to; 
    int *turn_away; 
    int dir_sign; 
} MazeSolution; 
 
void SolveMazeStart(MazeView *vw, 
                    Cell *maze, int w, int h, 
                    IntPt2 *start, int start_dir, 
                    MazeGoal *goals, int ngoals, 
                    int turn_to, 
                    MazeSolution *sol); 
void SolveMazeSetGoals(MazeSolution *sol, MazeGoal *goals, int ngoals); 
MazeGoal *SolveMazeStep(MazeView *vw, MazeSolution *sol); 
 
#endif