//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1990-1999 Odinn Sorensen
//  Copyright (C) 1999-2000 Alexander S. Aganichev
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library 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
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library 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$
//  ------------------------------------------------------------------
//  Message attributes.
//  ------------------------------------------------------------------

#include <gstrall.h>
#include <gmsgattr.h>


//  ------------------------------------------------------------------
//  Add attributes

void ftn_attr::add(const ftn_attr& b)
{

    if(b.pvt())  pvt1();
    if(b.cra())  cra1();
    if(b.rcv())  rcv1();
    if(b.snt())  snt1();
    if(b.att())  att1();
    if(b.trs())  trs1();
    if(b.orp())  orp1();
    if(b.k_s())  k_s1();
    if(b.loc())  loc1();
    if(b.hld())  hld1();
    if(b.rsv())  rsv1();
    if(b.frq())  frq1();
    if(b.rrq())  rrq1();
    if(b.rrc())  rrc1();
    if(b.arq())  arq1();
    if(b.urq())  urq1();

    if(b.grp())  grp1_();
    if(b.imm())  imm1();
    if(b.dir())  dir1();
    if(b.tfs())  tfs1();
    if(b.kfs())  kfs1();
    if(b.lok())  lok1();
    if(b.a_s())  a_s1();
    if(b.zon())  zon1();
    if(b.hub())  hub1();
    if(b.xma())  xma1();
    if(b.cfm())  cfm1();
    if(b.hir())  hir1();
    if(b.cov())  cov1();
    if(b.sig())  sig1();
    if(b.let())  let1();
    if(b.uns())  uns1();

    if(b.del())  del1();
    if(b.nwm())  nwm1();
    if(b.rot())  rot1();
    if(b.hex())  hex1();
    if(b.upd())  upd1();
    if(b.tou())  tou1();
    if(b.fmu())  fmu1();
    if(b.scn())  scn1();
    if(b.pos())  pos1();
    if(b.r_o())  r_o1();
    if(b.nok())  nok1();
    if(b.fax())  fax1();
    if(b.prn())  prn1();

    if(b.pkd())  pkd1();
}


//  ------------------------------------------------------------------
//  Create string representation of an attribute set

std::string& ftn_attr::make_string(std::string& s) const
{

    s = "";

    if(del())  s += "DEL ";
    if(rcv())  s += "Rcv ";
    if(snt())  s += "Snt ";
    if(uns())  s += "Uns ";
    if(imm())  s += "Imm ";
    if(dir())  s += "Dir ";
    if(lok())  s += "Lok ";
    if(tfs())  s += "Tfs ";
    if(kfs())  s += "Kfs ";
    if(pvt())  s += "Pvt ";
    if(cra())  s += "Cra ";
    if(loc())  s += "Loc ";
    if(hld())  s += "Hld ";
    if(k_s())  s += "K/s ";
    if(frq())  s += "Frq ";
    if(urq())  s += "URq ";
    if(att())  s += "Att ";
    if(arq())  s += "ARq ";
    if(rrq())  s += "RRq ";
    if(rrc())  s += "RRc ";
    if(trs())  s += "Trs ";
    if(orp())  s += "Orp ";
    if(a_s())  s += "A/s ";
    if(zon())  s += "Zon ";
    if(hub())  s += "Hub ";
    if(xma())  s += "Xma ";
    if(cfm())  s += "Cfm ";
    if(hir())  s += "Hir ";
    if(cov())  s += "Cov ";
    if(sig())  s += "Sig ";
    if(let())  s += "Let ";
    if(fax())  s += "Fax ";
    if(rsv())  s += "Rsv ";
    if(grp())  s += "Grp ";
    if(scn())  s += "Scn ";
    if(prn())  s += "Prn ";

    size_t len = s.length();
    while(len and ('!' > s[--len]))
        s.erase(len, 1);

    return s;
}


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

void ftn_attr::get(const std::string& __s)
{

    const char *s = __s.c_str();
    if(striinc("PVT", s))  pvt1();
    if(striinc("CRA", s))  cra1();
    if(striinc("RCV", s))  rcv1();
    if(striinc("SNT", s))  snt1();
    if(striinc("ATT", s))  att1();
    if(striinc("TRS", s))  trs1();
    if(striinc("ORP", s))  orp1();
    if(striinc("K/S", s))  k_s1();
    if(striinc("LOC", s))  loc1();
    if(striinc("HLD", s))  hld1();
    if(striinc("RSV", s))  rsv1();
    if(striinc("FRQ", s))  frq1();
    if(striinc("RRQ", s))  rrq1();
    if(striinc("RRC", s))  rrc1();
    if(striinc("ARQ", s))  arq1();
    if(striinc("URQ", s))  urq1();

    if(striinc("GRP", s))  grp1_();
    if(striinc("IMM", s))  imm1();
    if(striinc("DIR", s))  dir1();
    if(striinc("TFS", s))  tfs1();
    if(striinc("KFS", s))  kfs1();
    if(striinc("LOK", s))  lok1();
    if(striinc("A/S", s))  a_s1();
    if(striinc("ZON", s))  zon1();
    if(striinc("HUB", s))  hub1();
    if(striinc("XMA", s))  xma1();
    if(striinc("CFM", s))  cfm1();
    if(striinc("HIR", s))  hir1();
    if(striinc("COV", s))  cov1();
    if(striinc("SIG", s))  sig1();
    if(striinc("LET", s))  let1();
    if(striinc("UNS", s))  uns1();

    if(striinc("DEL", s))  del1();
    if(striinc("NWM", s))  nwm1();
    if(striinc("ROT", s))  rot1();
    if(striinc("HEX", s))  hex1();
    if(striinc("UPD", s))  upd1();
    if(striinc("TOU", s))  tou1();
    if(striinc("FMU", s))  fmu1();
    if(striinc("SCN", s))  scn1();
    if(striinc("POS", s))  pos1();
    if(striinc("R/O", s))  r_o1();
    if(striinc("NOK", s))  nok1();
    if(striinc("FAX", s))  fax1();
    if(striinc("PRN", s))  prn1();
    if(striinc("PKD", s))  pkd1();
}


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

bool ftn_attr::equals(const ftn_attr& b) const
{

    return (attr1 == b.attr1) and (attr2 == b.attr2);
}


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