#ifndef _FIGUREDECRIPTION
#define _FIGUREDECRIPTION
#include "squaredance.h"

enum figureType {
    f_ecd_start,
    f_set, f_turn, f_gypsy, f_star, f_circle,
    f_ecd_end,
    f_last
};

enum orientationType {
    o_in,	/* Facing across minor set (often to partner) */
    o_out,
    o_travel,	/* Facing in the direction of travel */
    o_reverseTravel,
    o_center,	/* facing center of minor set */
    o_natural	/* inherited direction from previous figure, or natural direction at end of current figure */
};

#define COMMONFIELDS \
    enum figureType figure;			\
    unsigned int mask;		/* People to whom this command applies */ \
    unsigned int leaders;	/* People who take a lead role */ \
    enum orientationType initOrient, finalOrient; \
    int millibars;				\
    Position slide;				\
    struct figureData *next;			\
    struct figureData *meanwhile;		\
    char *audioFile;				\

typedef struct figureData {
    COMMONFIELDS
} FigureData;

struct setData /* : figureData */ {
    COMMONFIELDS
    enum setSubType { sst_both, sst_right, sst_left } subType;
    enum setJoinHands { sjh_noone, sjh_partner, sjh_neighbors } join;
};

    /* also used for gypsy and star */
struct turnData  /* : figureData */ {
    COMMONFIELDS
    enum turnSubType { tst_left, tst_right, tst_both } subType;
    int distance; 	/* 1 => a quarter, 2=>half, 3=> three quarters, 4=>once, 6=>once and a half */
};

struct circleData  /* : turnData */ {
    COMMONFIELDS
    enum turnSubType subType;
    int distance; 	/* 1 => a quarter, 2=>half, 3=> three quarters, 4=>once, 6=>once and a half */
    unsigned int noHandsSingleFile: 1;
}
};
#endif

