#include "SLData.h"


kanji *newKanji(char *title, char *jReading, char *reading,
		char *bmFile, char *meaning, char *memTips, char *usage)
{
  kanji *retval    = (kanji *)malloc(sizeof(kanji));
  retval->type     = KANJI;
  retval->title    = (char *)malloc(strlen(title)+1);
  retval->reading  = (char *)malloc(strlen(reading)+1);
  retval->jReading = (char *)malloc(strlen(jReading)+1);
  retval->bmFile   = (char *)malloc(strlen(bmFile)+1);
  retval->meaning  = (char *)malloc(strlen(meaning)+1);
  retval->memTips  = (char *)malloc(strlen(memTips)+1);
  retval->usage    = (char *)malloc(strlen(usage)+1);
  strcpy (retval->title, title);
  strcpy (retval->jReading, jReading);
  strcpy (retval->reading, reading);
  strcpy (retval->bmFile, bmFile);
  strcpy (retval->meaning, meaning);
  strcpy (retval->memTips, memTips);
  strcpy (retval->usage, usage);
  retval->next     = NULLKANJI;
  return retval;
}

kanji *newKana(char *title, char *reading)
{
  kanji *retval    = (kanji *)malloc(sizeof(kanji));
  retval->type     = KANA;
  retval->title    = (char *)malloc(strlen(title)+1);
  retval->reading  = (char *)malloc(strlen(reading)+1);
  strcpy (retval->title, title);
  strcpy (retval->reading, reading);
  retval->next     = NULLKANJI;
  return retval;
}


rQuestion *newRQuestion(char *ques)
{
  rQuestion *retval = (rQuestion *)malloc(sizeof(rQuestion));
  retval->ques      = (char *)malloc(strlen(ques)+1);
  strcpy (retval->ques, ques);
  retval->notes     = (char *)0;
  retval->state     = UNTESTED;
  retval->ans       = NULLANSWER;
  retval->next      = NULLRQ;
  return retval;
}

mQuestion *newMQuestion(char *ques, char *ans)
{
  int i;
  mQuestion *retval     = (mQuestion *)malloc(sizeof(mQuestion));
  retval->ques          = (char *)malloc(strlen(ques)+1);
  retval->correctAnswer = (char *)malloc(strlen(ans)+1);
  retval->state         = UNTESTED;
  strcpy (retval->ques, ques);
  strcpy (retval->correctAnswer, ans);
  retval->next         = NULLMQ;
  for (i=0; i<3; i++) {
    retval->wrongAnswer[i] = (char *)0; }
  return retval;
}
		
answer *newAnswer(char *ans)
{
  answer *retval = (answer *)malloc(sizeof(answer)+1);
  retval->ans   = (char *)malloc(strlen(ans)+1);
  strcpy (retval->ans, ans);
  retval->next = NULLANSWER;
  return retval;
}

SLData *newSLData(char *title, char *subtitle)
{
  SLData *retval    = (SLData *)malloc(sizeof(SLData));
  retval->title     = (char *)malloc(strlen(title)+1);
  retval->subtitle  = (char *)malloc(strlen(subtitle)+1);
  strcpy (retval->title, title);
  strcpy (retval->subtitle, subtitle);
  retval->kan       = NULLKANJI;
  retval->rQues     = NULLRQ;
  retval->mQues     = NULLMQ;
  retval->allAns    = NULLANSWER;
  return retval;
}


void kanjiTail(kanji *list, kanji *item)
{
  kanji *i;
  if (list == NULLKANJI) {
    list = item; }
  else {
    for (i=list; i->next!=NULLKANJI; i=i->next);
    i->next = item; }
}

void rQuestionTail(rQuestion *list, rQuestion *item)
{
  rQuestion *i;
  if (list == NULLRQ) {
    list = item; }
  else {
    for (i=list; i->next!=NULLRQ; i=i->next);
    i->next = item; }
}

void mQuestionTail(mQuestion *list, mQuestion *item)
{
  mQuestion *i;
  if (list == NULLMQ) {
    list = item; }
  else {
    for (i=list; i->next!=NULLMQ; i=i->next);
    i->next = item; }
}

void answerTail(answer *list, answer *item)
{
  answer *i;
  if (list == NULLANSWER) {
    list = item; }
  else {
    for (i = list;i->next!=NULLANSWER;i=i->next);
    i->next = item; }
}

void addKtoSLData (SLData *sld, kanji *k)
{
  kanjiTail (sld->kan, k);
}

void addRQtoSLData (SLData *sld, rQuestion *q)
{
  rQuestionTail (sld->rQues, q);
}

void addMQtoSLData (SLData *sld, mQuestion *q)
{
  mQuestionTail (sld->mQues, q);
}

void addAtoRQ (rQuestion *ques, answer *a)
{
  answerTail (ques->ans, a);
}

void addAtoMQ (mQuestion *ques, char *a)
{
  int i=0;
  while (i<3) {
    if (ques->wrongAnswer[i] == (char *)0) {
      ques->wrongAnswer[i] = (char *)malloc(strlen(a)+1);
      strcpy (ques->wrongAnswer[i], a);
      i=3;
    }
    else {
      i++;
    }
  }
}

void addNoteToRQ (rQuestion *ques, char *n)
{
  ques->notes = (char *)malloc(strlen(n)+1);
  strcpy (ques->notes, n);
}

void addAtoSLData (SLData *data, answer *a)
{
  answerTail (data->allAns, a);
}


