//  ------------------------------------------------------------------
//  GoldED+
//  Copyright (C) 1990-1999 Odinn Sorensen
//  Copyright (C) 1999-2000 Alexander S. Aganichev
//  ------------------------------------------------------------------
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU General Public License as
//  published by the Free Software Foundation; either version 2 of the
//  License, or (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
//  MA 02111-1307 USA
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  Configuration functions, part 3.
//  ------------------------------------------------------------------

#include <golded.h>
#include <gcprot.h>


//  ------------------------------------------------------------------

extern char* val;

//  ------------------------------------------------------------------

void CfgDispmargin() {

  CFG->dispmargin = atoi(val);
}

//  ------------------------------------------------------------------

void CfgDispmsgsize() {

  if(strieql("NO", val))
    CFG->dispmsgsize = NO;
  else if(strieql("BYTES", val))
    CFG->dispmsgsize = DISPMSGSIZE_BYTES;
  else if(strieql("KBYTES", val))
    CFG->dispmsgsize = DISPMSGSIZE_KBYTES;
  else if(strieql("LINES", val))
    CFG->dispmsgsize = DISPMSGSIZE_LINES;
}

//  ------------------------------------------------------------------

void CfgDispareano() {

  CFG->dispareano = GetYesno(val);
}

//  ------------------------------------------------------------------

void CfgDisppmfirst() {

  CFG->disppmfirst = make_bool(GetYesno(val));
}

//  ------------------------------------------------------------------

void CfgDispsoftcr()
{
  bool flag = make_bool(GetYesno(val));

  if (cfgingroup)
    CFG->grp.AddItm(GRP_DISPSOFTCR, flag);
  else
    CFG->dispsoftcr = flag;
}

//  ------------------------------------------------------------------

void CfgDisptabsize() {

  CFG->disptabsize = atoi(val);
}

//  ------------------------------------------------------------------

void CfgEditautoattach() {

  EDIT->AutoAttach(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEditautosave() {

  EDIT->AutoSave(atoi(val));
}

//  ------------------------------------------------------------------

void CfgEditchangedate() {

  EDIT->ChangeDate(GetYesno(val));
}

//  ------------------------------------------------------------------

void CfgEditcharpara() {

  char ch = *StripQuotes(val);
  if(ch)
    EDIT->CharPara(ch);
}

//  ------------------------------------------------------------------

void CfgEditcharspace() {

  char ch = *StripQuotes(val);
  if(ch)
    EDIT->CharSpace(ch);
}

//  ------------------------------------------------------------------

void CfgEditcomment() {

  char* key;
  getkeyval(&key, &val);
  StripQuotes(key);
  StripQuotes(val);
  EDIT->Comment.Add(key, val);
}

//  ------------------------------------------------------------------

void CfgEditcompletion() {

  char* key;
  getkeyval(&key, &val);
  StripQuotes(key);
  StripQuotes(val);
  EDIT->Completion.Add(key, val);
}

//  ------------------------------------------------------------------

void CfgEditcrlfterm() {

  EDIT->CrLfTerm(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEditfieldclear() {

  EDIT->FieldClear(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEdithardline() {

  EDIT->HardLine(StripQuotes(val));
}

//  ------------------------------------------------------------------

void CfgEdithardlines() {

  EDIT->HardLines(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEdithardterm() {

  bool flag = make_bool(GetYesno(val));
  if(cfgingroup)
    CFG->grp.AddItm(GRP_EDITHARDTERM, flag);
  else
    EDIT->HardTerm(flag);
}

//  ------------------------------------------------------------------

void CfgEdithdrnameset() {

  char* key;
  getkeyval(&key, &val);
  EDIT->HdrNamePos(atoi(key));
  EDIT->HdrNameLen(atoi(val));
}

//  ------------------------------------------------------------------

void CfgEdithdrnodeset() {

  char* key;
  getkeyval(&key, &val);
  EDIT->HdrNodePos(atoi(key));
  EDIT->HdrNodeLen(atoi(val));
}

//  ------------------------------------------------------------------

void CfgEditheaderattrs() {

  EDIT->HeaderAttrs(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEditheaderfirst() {

  int v = EDITHEADERFIRST_NO;
  GTok t;
  if(t.First(val)) {
    do {
      if(strieql("NEW", t.Token()))
        v |= EDITHEADERFIRST_NEW;
      else if(strieql("CHANGES", t.Token()))
        v |= EDITHEADERFIRST_CHANGES;
      else if(strieql("REPLIES", t.Token()))
        v |= EDITHEADERFIRST_REPLIES;
      else if(strieql("FORWARDS", t.Token()))
        v |= EDITHEADERFIRST_FORWARDS;
      else
        v = GetYesno(t.Token()) ? EDITHEADERFIRST_YES : EDITHEADERFIRST_NO;
    } while(t.Next());
  }
  EDIT->HeaderFirst(v);
}

//  ------------------------------------------------------------------

void CfgEditinternal() {

  EDIT->Internal(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEditmenu() {

  EDIT->Menu(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEditmixcase() {

  bool flag = make_bool(GetYesno(val));
  if(cfgingroup)
    CFG->grp.AddItm(GRP_EDITMIXCASE, flag);
  else
    EDIT->MixCase(flag);
}

//  ------------------------------------------------------------------

void CfgEditor() {

  EDIT->External(val);
}

//  ------------------------------------------------------------------

void CfgEditorfile() {

  EDIT->File(val);
}

//  ------------------------------------------------------------------

void CfgEditquotemargin() {

  EDIT->QuoteMargin(atoi(val));
}

//  ------------------------------------------------------------------

void CfgEditreplyre() {

  int replyre;
  if(strieql(val, "NUMERIC"))
    replyre = REPLYRE_NUMERIC;
  else
    replyre = GetYesno(val) ? REPLYRE_YES : REPLYRE_NO;

  if(cfgingroup)
    CFG->grp.AddItm(GRP_EDITREPLYRE, replyre);
  else
    EDIT->ReplyRe(replyre);
}

//  ------------------------------------------------------------------

void CfgEditsavemenu() {

  EDIT->SaveMenu(make_bool(GetYesno(val)));
}

//  ------------------------------------------------------------------

void CfgEditsaveutil() {

  char* _key;
  getkeyval(&_key, &val);
  int n = atoi(_key);
  EDIT->SaveUtil.Add(n, StripQuotes(val));
}

//  ------------------------------------------------------------------

void CfgEditsoftcrxlat() {

  EDIT->SoftCrXlat(*val);
}

//  ------------------------------------------------------------------

void CfgEditspellcheck() {

  EDIT->SpellChecker(val);
}

//  ------------------------------------------------------------------

void CfgEditundelete() {

  EDIT->UnDelete(atoi(val));
}

//  ------------------------------------------------------------------

void CfgEncodeemailheaders() {

  CFG->encodeemailheaders = make_bool(GetYesno(val));
}

//  ------------------------------------------------------------------

void CfgEndgroup() {

  cfgingroup = false;
}

//  ------------------------------------------------------------------

void CfgEvent(char* v)  { val = v; CfgEvent(); }
void CfgEvent() {

  char* key;
  word x;
  std::vector<GEvent>::iterator n;
  GEvent tmp;

  x = getkeyvalcrc(&key, &val);

  for(n = CFG->event.begin(); n != CFG->event.end(); n++)
    if(x == n->type)
      break;

  tmp.type = x;
  getkeyval(&key, &val);
  if(strieql(key, "PLAY")) {
    tmp.command = EVTC_PLAY;
    FileToGPlay(&tmp.play, val);
  }

  if(n == CFG->event.end())
    CFG->event.push_back(tmp);
  else
    *n = tmp;
}

//  ------------------------------------------------------------------