/*  SLData type definitions.
 *    Each element contains a title, a pointer to a linked list
 *    of kanji, and a pointer to a linked list of questions.     */

#ifndef SLDATA_H
#define SLDATA_H

#define NULLKANJI ((kanji *)0)
#define NULLRQ ((rQuestion *)0)
#define NULLMQ ((mQuestion *)0)
#define NULLSLDATA ((SLData *)0)
#define NULLANSWER ((answer *)0)

enum qstate_enum {UNTESTED, CORRECT, INCORRECT};
enum ktype_enum {KANA, KANJI};

typedef enum qstate_enum qstate;
typedef enum ktype_enum ktype;

typedef struct kanji_struct
{
  char *title;
  char *reading;
  char *jReading;
  char *bmFile;
  char *meaning;
  char *memTips;
  char *usage;
  ktype type;
  struct kanji_struct *next;
} kanji;

typedef struct answer_struct
{
  char *ans;
  struct answer_struct *next;
} answer;

typedef struct rQuestion_struct
{
  char *ques;
  answer *ans;
  char *notes;
  qstate state;
  struct rQuestion_struct *next;
} rQuestion;

typedef struct mQuestion_struct
{
  char *ques;
  char *correctAnswer;
  char *wrongAnswer[3];
  qstate state;
  struct mQuestion_struct *next;
} mQuestion;

typedef struct SLData_struct
{
  char *title;
  char *subtitle;
  kanji *kan;
  rQuestion *rQues;
  mQuestion *mQues;
  answer *allAns;
} SLData;


kanji *newKanji(char *, char *, char *, char *, char *, char *, char *);
kanji *newKana(char *, char *);
rQuestion *newRQuestion(char *);
answer *newAnswer(char *);
mQuestion *newMQuestion(char *, char *);
SLData *newSLData(char *, char *);

void kanjiTail(kanji *, kanji *);
void rQuestionTail(rQuestion *, rQuestion *);
void mQuestionTail(mQuestion *, mQuestion *);
void answerTail(answer *, answer *);

void addKtoSLData (SLData *, kanji *);
void addRQtoSLData (SLData *, rQuestion *);
void addMQtoSLData (SLData *, mQuestion *);
void addAtoMQ (mQuestion *, char *);
void addAtoRQ (rQuestion *, answer *);
void addNoteToRQ (rQuestion *, char *);
void addAtoSLData (SLData *, answer *);
#endif







