535 lines
13 KiB
C++
535 lines
13 KiB
C++
|
|
// ------------------------------------------------------------------
|
|
// 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 7.
|
|
// ------------------------------------------------------------------
|
|
|
|
#include <golded.h>
|
|
#include <gcprot.h>
|
|
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
extern char* val;
|
|
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQuotestring() {
|
|
|
|
char buf[10];
|
|
strxcpy(buf, StripQuotes(val), sizeof(buf));
|
|
if(*buf == NUL)
|
|
strcpy(buf, " > ");
|
|
else {
|
|
if(buf[strlen(buf)-1] != ' ')
|
|
strcat(buf, " ");
|
|
}
|
|
if(cfgingroup)
|
|
CFG->grp.AddItm(GRP_QUOTESTRING, buf, strlen(buf)+1);
|
|
else
|
|
strcpy(CFG->quotestring, buf);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQuotestops() {
|
|
|
|
char buf[10];
|
|
strxcpy(buf, StripQuotes(val), sizeof(buf));
|
|
if(*buf == NUL)
|
|
strcpy(buf, " > ");
|
|
else {
|
|
if(buf[strlen(buf)-1] != ' ')
|
|
strcat(buf, " ");
|
|
}
|
|
if(cfgingroup)
|
|
CFG->grp.AddItm(GRP_QUOTESTOPS, buf, strlen(buf)+1);
|
|
else
|
|
strcpy(CFG->quotestops, buf);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQuotewraphard() {
|
|
|
|
bool flag = make_bool(GetYesno(val));
|
|
if(cfgingroup)
|
|
CFG->grp.AddItm(GRP_QUOTEWRAPHARD, flag);
|
|
else
|
|
CFG->quotewraphard = flag;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQuoteusenewai()
|
|
{
|
|
CFG->quoteusenewai = make_bool(GetYesno(val));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwkbadmsgs() {
|
|
|
|
QWK->BadMsgs(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwkconfmap() {
|
|
|
|
char* bbsid;
|
|
getkeyval(&bbsid, &val);
|
|
|
|
char* confname;
|
|
getkeyval(&confname, &val);
|
|
strtrim(StripQuotes(confname));
|
|
|
|
char* echoid;
|
|
getkeyval(&echoid, &val);
|
|
|
|
QWK->AddMap(bbsid, echoid, confname);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwkexportpath() {
|
|
|
|
QWK->ExportPath(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwkimportpath() {
|
|
|
|
QWK->ImportPath(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwkoptions() {
|
|
|
|
char* bbsid;
|
|
getkeyval(&bbsid, &val);
|
|
QWK->FindAddBBS(bbsid);
|
|
val = strtok(val, ", \t");
|
|
while(val) {
|
|
if(strieql(val, "KLUDGES"))
|
|
QWK->KludgesAllowed(true);
|
|
else if(strieql(val, "NOKLUDGES"))
|
|
QWK->KludgesAllowed(false);
|
|
else if(strieql(val, "MIXCASE"))
|
|
QWK->MixCaseAllowed(true);
|
|
else if(strieql(val, "NOMIXCASE"))
|
|
QWK->MixCaseAllowed(false);
|
|
else if(strieql(val, "RECEIPT"))
|
|
QWK->ReceiptAllowed(true);
|
|
else if(strieql(val, "NORECEIPT"))
|
|
QWK->ReceiptAllowed(false);
|
|
else if(strnieql(val, "MAXLINES=", 9))
|
|
QWK->MaxLines(atoi(val+9));
|
|
val = strtok(NULL, ", \t");
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwkreplylinker() {
|
|
|
|
QWK->ReplyLinker(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgQwktosslog() {
|
|
|
|
QWK->TossLog(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgRa2usersbbs() {
|
|
|
|
CFG->ra2usersbbs = GetYesno(val) ? 2 : 1;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgReplylink() {
|
|
|
|
if(strieql(val, "Chain"))
|
|
CFG->replylink = REPLYLINK_CHAIN;
|
|
else if(strieql(val, "Direct"))
|
|
CFG->replylink = REPLYLINK_DIRECT;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgReplylinkfloat()
|
|
{
|
|
CFG->replylinkfloat = make_bool(GetYesno(val));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgReplylinklist() {
|
|
|
|
if(strieql(val, "Fast"))
|
|
CFG->replylinklist = REPLYLINKLIST_FAST;
|
|
else if(strieql(val, "Full"))
|
|
CFG->replylinklist = REPLYLINKLIST_FULL;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgReplylinkshowalways()
|
|
{
|
|
CFG->replylinkshowalways = make_bool(GetYesno(val));
|
|
}
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgRobotname(const char* v) {
|
|
|
|
char* ptr = val = throw_strdup(v);
|
|
CfgRobotname();
|
|
throw_free(ptr);
|
|
}
|
|
|
|
void CfgRobotname() {
|
|
|
|
tokenize(CFG->robotname, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgScreenblanker() {
|
|
|
|
GTok t;
|
|
if(t.First(val)) {
|
|
do {
|
|
val = t.Token();
|
|
if(isdigit(*val))
|
|
CFG->screenblanker = atoi(val);
|
|
else if(striinc("BLACK", val))
|
|
CFG->screenblankertype = BLANK_ALLBLACK;
|
|
} while(t.Next());
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgScreenmaxcol() {
|
|
|
|
CFG->screenmaxcol = atoi(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgScreenmaxrow() {
|
|
|
|
CFG->screenmaxrow = atoi(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgScreenpalette() {
|
|
|
|
// Syntax:
|
|
//
|
|
// SCREENPALETTE <reg> <val> or
|
|
// SCREENPALETTE <reg> (red green blue)
|
|
|
|
char* key;
|
|
getkeyval(&key, &val);
|
|
|
|
int palreg = atoi(key);
|
|
if(palreg >= 0 and palreg <= 15) {
|
|
if(*val != '(')
|
|
CFG->screenpalette[palreg] = atoi(val);
|
|
else {
|
|
val = strskip_wht(val+1);
|
|
int redval = atoi(val); // 0 .. 3
|
|
val = strskip_wht(strskip_txt(val));
|
|
int greenval = atoi(val); // 0 .. 3
|
|
val = strskip_wht(strskip_txt(val));
|
|
int blueval = atoi(val); // 0 .. 3
|
|
|
|
// Construct the rgbRGB color val (nuts!)
|
|
CFG->screenpalette[palreg] =
|
|
((redval & 2) ? 0x04 : 0x00)|
|
|
((redval & 1) ? 0x20 : 0x00)|
|
|
((greenval & 2) ? 0x02 : 0x00)|
|
|
((greenval & 1) ? 0x10 : 0x00)|
|
|
((blueval & 2) ? 0x01 : 0x00)|
|
|
((blueval & 1) ? 0x08 : 0x00);
|
|
}
|
|
CFG->screenpalette[16] = true; // Indicate that changes were made
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgScreensize() {
|
|
|
|
CFG->screensize = atoi(val);
|
|
if(CFG->screensize == 4350) {
|
|
CFG->screensize = 50;
|
|
}
|
|
else if(CFG->screensize == 0) {
|
|
if(strnieql(val, "Mode", 4)) {
|
|
sscanf(val+4, " %x", (uint *)&CFG->screensize);
|
|
CFG->screensize <<= 8;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSearchfor() {
|
|
|
|
INam buf;
|
|
strxcpy(buf, StripQuotes(val), sizeof(buf));
|
|
if(cfgingroup)
|
|
CFG->grp.AddItm(GRP_SEARCHFOR, buf, strlen(buf)+1);
|
|
else
|
|
strcpy(CFG->searchfor, buf);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
#define CRC_NETSCAN 0xEC12
|
|
#define CRC_ECHOSCAN 0x6E6D
|
|
#define CRC_EXPORTLIST 0x1B14
|
|
#define CRC_IMPORTLIST 0x447F
|
|
#define CRC_SCANALL 0x1E57
|
|
#define CRC_SCANTHIS 0x1DAE
|
|
#define CRC_SCANNETMAIL 0x74D6
|
|
#define CRC_PMSCANALL 0xD093
|
|
#define CRC_PMSCANTHIS 0xE12C
|
|
#define CRC_PMSCANNETMAIL 0x9F1F
|
|
#define CRC_QWKIMPORT 0x3063
|
|
#define CRC_QWKEXPORT 0xD7C2
|
|
#define CRC_SOUPIMPORT 0x5564
|
|
#define CRC_SOUPEXPORT 0xB2C5
|
|
#define CRC_EXITNOW 0x65DD
|
|
#define CRC_IDLETIME 0x3BBC
|
|
|
|
void CfgSemaphore() {
|
|
|
|
char* key;
|
|
word crc = getkeyvalcrc(&key, &val);
|
|
|
|
switch(crc) {
|
|
case CRC_NETSCAN: strcpy(CFG->semaphore.netscan, val); break;
|
|
case CRC_ECHOSCAN: strcpy(CFG->semaphore.echoscan, val); break;
|
|
case CRC_EXPORTLIST: strcpy(CFG->semaphore.exportlist, val); break;
|
|
case CRC_IMPORTLIST: strcpy(CFG->semaphore.importlist, val); break;
|
|
case CRC_SCANALL: strcpy(CFG->semaphore.scanall, val); break;
|
|
case CRC_SCANTHIS: strcpy(CFG->semaphore.scanthis, val); break;
|
|
case CRC_SCANNETMAIL: strcpy(CFG->semaphore.scannetmail, val); break;
|
|
case CRC_PMSCANALL: strcpy(CFG->semaphore.pmscanall, val); break;
|
|
case CRC_PMSCANTHIS: strcpy(CFG->semaphore.pmscanthis, val); break;
|
|
case CRC_PMSCANNETMAIL: strcpy(CFG->semaphore.pmscannetmail, val); break;
|
|
case CRC_QWKIMPORT: strcpy(CFG->semaphore.qwkimport, val); break;
|
|
case CRC_QWKEXPORT: strcpy(CFG->semaphore.qwkexport, val); break;
|
|
case CRC_SOUPIMPORT: strcpy(CFG->semaphore.soupimport, val); break;
|
|
case CRC_SOUPEXPORT: strcpy(CFG->semaphore.soupexport, val); break;
|
|
case CRC_EXITNOW: strcpy(CFG->semaphore.exitnow, val); break;
|
|
case CRC_IDLETIME: CFG->semaphore.idletime = atoi(val); break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSeqDir() {
|
|
|
|
MapPath(PathCopy(CFG->seqdir, val));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSeqMsgId() {
|
|
|
|
CFG->seqmsgid = GetYesno(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSeqOutRun_Error() {
|
|
|
|
std::cout << "* Warning: Bad SeqOutrun value \'" << val << "\', ignored."<< std::endl;
|
|
}
|
|
|
|
void CfgSeqOutRun() {
|
|
|
|
char *p;
|
|
uint32_t s = 0;
|
|
|
|
if(not isdigit((int)(*val))) {
|
|
CfgSeqOutRun_Error();
|
|
return;
|
|
}
|
|
|
|
s = (uint32_t)atol(val);
|
|
p = val;
|
|
while(isdigit((int)(*p)))
|
|
p++;
|
|
if(*p == '\0') {
|
|
CFG->seqoutrun = s;
|
|
if(veryverbose)
|
|
std::cout << " SeqOutRun: \'" << val << "\' --> " << CFG->seqoutrun << std::endl;
|
|
return;
|
|
}
|
|
if(p[1]) {
|
|
CfgSeqOutRun_Error();
|
|
return;
|
|
}
|
|
switch(tolower(*p)) {
|
|
case 'y':
|
|
s *= 365;
|
|
case 'd':
|
|
s *= 24;
|
|
case 'h':
|
|
s *= 60*60;
|
|
break;
|
|
case 'w':
|
|
s *= 7l*24*60*60;
|
|
break;
|
|
case 'm':
|
|
s *= 31l*24*60*60;
|
|
break;
|
|
default:
|
|
CfgSeqOutRun_Error();
|
|
return;
|
|
}
|
|
CFG->seqoutrun = s;
|
|
if(veryverbose)
|
|
std::cout << " SeqOutRun: \'" << val << "\' --> " << CFG->seqoutrun << std::endl;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSharemode() {
|
|
|
|
if(atoi(val))
|
|
CFG->sharemode = atoi(val);
|
|
else
|
|
CFG->sharemode = GetYesno(val) ? SH_DENYNO : SH_COMPAT;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgShowdeleted() {
|
|
|
|
CFG->showdeleted = make_bool(GetYesno(val));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoundpath() {
|
|
|
|
PathCopy(CFG->soundpath, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupbadmsgs() {
|
|
|
|
strupr(strxcpy(CFG->soupbadmsgs, val, sizeof(Echo)));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupemail() {
|
|
|
|
strupr(strxcpy(CFG->soupemail, val, sizeof(Echo)));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupexportmargin() {
|
|
|
|
CFG->soupexportmargin = atoi(val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupexportpath() {
|
|
|
|
PathCopy(CFG->soupexportpath, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupimportpath() {
|
|
|
|
PathCopy(CFG->soupimportpath, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupnewsrcfile() {
|
|
|
|
strcpy(CFG->soupnewsrcfile, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupreplylinker() {
|
|
|
|
strcpy(CFG->soupreplylinker, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSoupreplyto() {
|
|
|
|
strxcpy(CFG->soupreplyto, val, sizeof(CFG->soupreplyto));
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSouptosslog() {
|
|
|
|
strcpy(CFG->souptosslog, val);
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
void CfgSquishscan() {
|
|
|
|
const int SQS_API = 1;
|
|
const int SQS_QUICK = 2;
|
|
|
|
if(strieql(val, "API"))
|
|
CFG->squishscan = SQS_API;
|
|
else if(strieql(val, "QUICK"))
|
|
CFG->squishscan = SQS_QUICK;
|
|
}
|
|
|
|
// ------------------------------------------------------------------
|
|
|