Added old fastecho back, fixed dot problem in win32, added new keywords
This commit is contained in:
parent
59fd0e8f84
commit
12138e1af6
@ -1,4 +1,4 @@
|
|||||||
GoldED+ 1.1.4.7 [source code]
|
GoldED+ 1.1.5 [source code]
|
||||||
-----------------------------
|
-----------------------------
|
||||||
GoldED+ is a successor of the
|
GoldED+ is a successor of the
|
||||||
wellknown GoldED mail editor.
|
wellknown GoldED mail editor.
|
||||||
|
@ -12,6 +12,26 @@ ______________________________________________________________________
|
|||||||
Notes for GoldED+ 1.1.5, December xx 2000
|
Notes for GoldED+ 1.1.5, December xx 2000
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
|
- Support for old Fastechoes reverted back.
|
||||||
|
|
||||||
|
- Area Catch-up and Scan now disabled if there's active area. This
|
||||||
|
should improve stability.
|
||||||
|
|
||||||
|
! Returned NETNAME keyword in another incarnation:
|
||||||
|
|
||||||
|
* Origin: bla-bla-bla (2:5020/604.19@fidonet)
|
||||||
|
|
||||||
|
This style doesn't break any of FTS or FSC. Domain from Address or
|
||||||
|
AKA keyword overrides Netname keyword if specific address used.
|
||||||
|
This keyword could be used in random system groups.
|
||||||
|
|
||||||
|
+ Added READDirQuoteMsg and READMoveDirQuoteMsg entries for
|
||||||
|
goldkeys.cfg: quote message ignoring Reply-To kludge (in current and
|
||||||
|
another area correspondingly). Both added to READMainmenu menu.
|
||||||
|
There's no default keyboard assignment. (Not tested)
|
||||||
|
|
||||||
|
- Fixed EDITMainmenu operation.
|
||||||
|
|
||||||
- Fixed incorrect filenames displaying in /w32 version.
|
- Fixed incorrect filenames displaying in /w32 version.
|
||||||
|
|
||||||
- Fixed crash of Win32 version when output/input redirected to/from
|
- Fixed crash of Win32 version when output/input redirected to/from
|
||||||
|
@ -21,7 +21,8 @@ assistance!
|
|||||||
10. Что за левизна в адресах кросспостов, начиная с 1.1.3?
|
10. Что за левизна в адресах кросспостов, начиная с 1.1.3?
|
||||||
11. А почему GoldED+ так криво поддерживает hpt-шные конфиги (не под UNIXами)?
|
11. А почему GoldED+ так криво поддерживает hpt-шные конфиги (не под UNIXами)?
|
||||||
12. Почему не вводится русская "Э" под Win95?
|
12. Почему не вводится русская "Э" под Win95?
|
||||||
13. Типа эта... А писать куда автору? ;-)
|
13. Backspace в Linux'e
|
||||||
|
14. Типа эта... А писать куда автору? ;-)
|
||||||
|
|
||||||
>==============================================================================
|
>==============================================================================
|
||||||
|
|
||||||
@ -100,8 +101,7 @@ assistance!
|
|||||||
*A:* А вы уверены, что вы читали доку на свой hpt? В доке явно написано, что
|
*A:* А вы уверены, что вы читали доку на свой hpt? В доке явно написано, что
|
||||||
"\" инициирует escape-последовательность. GoldED+ честно её обрабатывает,
|
"\" инициирует escape-последовательность. GoldED+ честно её обрабатывает,
|
||||||
в отличии от тех, кто обещал... В принципе, в 1.1.4.1 появился ключик
|
в отличии от тех, кто обещал... В принципе, в 1.1.4.1 появился ключик
|
||||||
-lame, отключающий парсилку обратных слэшей, попробуйте. Вот комментарии
|
-lame, отключающий парсилку обратных слэшей, попробуйте.
|
||||||
с конца строки я точно парсить не буду!!! :-)
|
|
||||||
|
|
||||||
*Q:* Почему не вводится русская "Э" под Win95?
|
*Q:* Почему не вводится русская "Э" под Win95?
|
||||||
*A:* Поставьте тип клавиатуры 101 клавишный США, скорее всего поможет. Если не
|
*A:* Поставьте тип клавиатуры 101 клавишный США, скорее всего поможет. Если не
|
||||||
@ -109,6 +109,10 @@ assistance!
|
|||||||
кривой вставки текста из клипборда в DOS-версии при несовпадении языка
|
кривой вставки текста из клипборда в DOS-версии при несовпадении языка
|
||||||
текста и содержимого клипборда.
|
текста и содержимого клипборда.
|
||||||
|
|
||||||
|
*Q:* Не работает backspace, приходится пользоватся стандартным Ctrl-?
|
||||||
|
*A:* Alexey Froloff: ``keycode 14 = delete delete delete delete'' в keymap'е
|
||||||
|
прописать надо.
|
||||||
|
|
||||||
*Q:* Типа эта... А писать куда автору? ;-)
|
*Q:* Типа эта... А писать куда автору? ;-)
|
||||||
*A:* Писать лучше всего в Ru.GoldED. Даже лучше сначала его почитать, потом
|
*A:* Писать лучше всего в Ru.GoldED. Даже лучше сначала его почитать, потом
|
||||||
писать. Если уж сильно приспичит, то можно писать на 2:5020/201.58,
|
писать. Если уж сильно приспичит, то можно писать на 2:5020/201.58,
|
||||||
|
@ -32,4 +32,7 @@ Tips and tricks
|
|||||||
8. If you have a problem with incorrect recoding in message lister try
|
8. If you have a problem with incorrect recoding in message lister try
|
||||||
add "MsgListFast No" to your config.
|
add "MsgListFast No" to your config.
|
||||||
|
|
||||||
9. If you want add something to this file - feel free to contact me.
|
9. In order to make usable backspace in Linux version add following to your
|
||||||
|
keymap if not yet: ``keycode 14 = delete delete delete delete''
|
||||||
|
|
||||||
|
10. If you want add something to this file - feel free to contact me.
|
||||||
|
@ -636,6 +636,7 @@ CfgGed::CfgGed() {
|
|||||||
*internetdomain = 0;
|
*internetdomain = 0;
|
||||||
*keybstack = 0;
|
*keybstack = 0;
|
||||||
*nickname = 0;
|
*nickname = 0;
|
||||||
|
*netname = 0;
|
||||||
*organization = 0;
|
*organization = 0;
|
||||||
#ifdef __UNIX__
|
#ifdef __UNIX__
|
||||||
strcpy(printdevice, "/usr/bin/lpr > /dev/null 2>&1");
|
strcpy(printdevice, "/usr/bin/lpr > /dev/null 2>&1");
|
||||||
|
@ -256,6 +256,7 @@ const word CRC_MSGLISTVIEWSUBJ = 0xED92;
|
|||||||
const word CRC_MSGLISTWIDESUBJ = 0xF385;
|
const word CRC_MSGLISTWIDESUBJ = 0xF385;
|
||||||
const word CRC_NAMESFILE = 0x1743;
|
const word CRC_NAMESFILE = 0x1743;
|
||||||
const word CRC_NICKNAME = 0x70D8;
|
const word CRC_NICKNAME = 0x70D8;
|
||||||
|
const word CRC_NETNAME = 0xB574;
|
||||||
const word CRC_NODELIST = 0x0E0A;
|
const word CRC_NODELIST = 0x0E0A;
|
||||||
const word CRC_NODELISTWARN = 0xF818;
|
const word CRC_NODELISTWARN = 0xF818;
|
||||||
const word CRC_NODEPATH = 0xCE00;
|
const word CRC_NODEPATH = 0xCE00;
|
||||||
|
@ -427,6 +427,7 @@ SwitchN:
|
|||||||
switch(crc) {
|
switch(crc) {
|
||||||
case CRC_NAMESFILE : CfgNamesfile (); break;
|
case CRC_NAMESFILE : CfgNamesfile (); break;
|
||||||
case CRC_NICKNAME : CfgNickname (); break;
|
case CRC_NICKNAME : CfgNickname (); break;
|
||||||
|
case CRC_NETNAME : CfgNetname (); break;
|
||||||
case CRC_NODELIST : CfgNodelist (); break;
|
case CRC_NODELIST : CfgNodelist (); break;
|
||||||
case CRC_NODEPATH : CfgNodepath (); break;
|
case CRC_NODEPATH : CfgNodepath (); break;
|
||||||
case CRC_NODEPATHFD : CfgNodepathfd (); break;
|
case CRC_NODEPATHFD : CfgNodepathfd (); break;
|
||||||
|
@ -88,6 +88,19 @@ void CfgNickname() {
|
|||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void CfgNetname() {
|
||||||
|
|
||||||
|
Name buf;
|
||||||
|
|
||||||
|
strxcpy(buf, val, sizeof(buf));
|
||||||
|
if(cfgingroup)
|
||||||
|
CFG->grp.AddItm(GRP_NETNAME, buf, strlen(buf)+1);
|
||||||
|
else
|
||||||
|
strcpy(CFG->netname, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
void CfgNodelist() {
|
void CfgNodelist() {
|
||||||
|
|
||||||
// Only used by GoldNODE
|
// Only used by GoldNODE
|
||||||
|
@ -653,6 +653,7 @@ tglobalkey globalkeys[] = {
|
|||||||
#endif
|
#endif
|
||||||
{ CRC_READTOGGLEQUOTE , KK_ReadToggleQuote , KT_R }, // 0xB293
|
{ CRC_READTOGGLEQUOTE , KK_ReadToggleQuote , KT_R }, // 0xB293
|
||||||
{ CRC_EDITUNDO , KK_EditUndo , KT_E }, // 0xB295
|
{ CRC_EDITUNDO , KK_EditUndo , KT_E }, // 0xB295
|
||||||
|
{ CRC_READDIRQUOTEMSG , KK_ReadDirQuoteMsg , KT_R }, // 0xB351
|
||||||
{ CRC_FILETOGGLEMARK , KK_FileToggleMark , KT_F }, // 0xB431
|
{ CRC_FILETOGGLEMARK , KK_FileToggleMark , KT_F }, // 0xB431
|
||||||
{ CRC_FILEGOTOPREV , KK_FileGotoPrev , KT_F }, // 0xB644
|
{ CRC_FILEGOTOPREV , KK_FileGotoPrev , KT_F }, // 0xB644
|
||||||
{ CRC_EDITLOOKUPCURSOR , KK_EditLookupCursor , KT_E }, // 0xB7CC
|
{ CRC_EDITLOOKUPCURSOR , KK_EditLookupCursor , KT_E }, // 0xB7CC
|
||||||
@ -700,6 +701,7 @@ tglobalkey globalkeys[] = {
|
|||||||
{ CRC_LISTASKEXIT , KK_ListAskExit , KT_M }, // 0xD922
|
{ CRC_LISTASKEXIT , KK_ListAskExit , KT_M }, // 0xD922
|
||||||
{ CRC_AREACATCHUP , KK_AreaCatchUp , KT_A }, // 0xDA5C
|
{ CRC_AREACATCHUP , KK_AreaCatchUp , KT_A }, // 0xDA5C
|
||||||
{ CRC_READGOTOREPLYPREV , KK_ReadGotoReplyPrev , KT_R }, // 0xDBE7
|
{ CRC_READGOTOREPLYPREV , KK_ReadGotoReplyPrev , KT_R }, // 0xDBE7
|
||||||
|
{ CRC_READMOVEDIRQUOTEMSG , KK_ReadMoveDirQuoteMsg , KT_R }, // 0xDBC0
|
||||||
{ CRC_EDITANCHOR , KK_EditAnchor , KT_E }, // 0xDC07
|
{ CRC_EDITANCHOR , KK_EditAnchor , KT_E }, // 0xDC07
|
||||||
{ CRC_FILEQUITNOW , KK_FileQuitNow , KT_F }, // 0xDD19
|
{ CRC_FILEQUITNOW , KK_FileQuitNow , KT_F }, // 0xDD19
|
||||||
{ CRC_AREAINFO , KK_AreaInfo , KT_A }, // 0xDE54
|
{ CRC_AREAINFO , KK_AreaInfo , KT_A }, // 0xDE54
|
||||||
|
@ -252,6 +252,7 @@ const word CRC_READMENU = 0x3D0A;
|
|||||||
const word CRC_READMESSAGELIST = 0xD5D8;
|
const word CRC_READMESSAGELIST = 0xD5D8;
|
||||||
const word CRC_READMOVECOMMENTMSG = 0xE4E7;
|
const word CRC_READMOVECOMMENTMSG = 0xE4E7;
|
||||||
const word CRC_READMOVEQUOTEMSG = 0x1B41;
|
const word CRC_READMOVEQUOTEMSG = 0x1B41;
|
||||||
|
const word CRC_READMOVEDIRQUOTEMSG = 0xDBC0;
|
||||||
const word CRC_READMSGCONTINUE = 0x4511;
|
const word CRC_READMSGCONTINUE = 0x4511;
|
||||||
const word CRC_READMSGEND = 0xC5AD;
|
const word CRC_READMSGEND = 0xC5AD;
|
||||||
const word CRC_READMSGHOME = 0x4BD1;
|
const word CRC_READMSGHOME = 0x4BD1;
|
||||||
@ -264,6 +265,7 @@ const word CRC_READNEWMSG = 0x30CA;
|
|||||||
const word CRC_READQUITNOW = 0xAC15;
|
const word CRC_READQUITNOW = 0xAC15;
|
||||||
const word CRC_READQUOTEBUF = 0x49EE;
|
const word CRC_READQUOTEBUF = 0x49EE;
|
||||||
const word CRC_READQUOTEMSG = 0xBE00;
|
const word CRC_READQUOTEMSG = 0xBE00;
|
||||||
|
const word CRC_READDIRQUOTEMSG = 0xB351;
|
||||||
const word CRC_READREPLYMSG = 0x172F;
|
const word CRC_READREPLYMSG = 0x172F;
|
||||||
const word CRC_READSEARCH = 0x48EF;
|
const word CRC_READSEARCH = 0x48EF;
|
||||||
const word CRC_READSOUNDKILL = 0xAE29;
|
const word CRC_READSOUNDKILL = 0xAE29;
|
||||||
|
@ -248,6 +248,7 @@ void CfgMsglistwidesubj ();
|
|||||||
void CfgNamesfile ();
|
void CfgNamesfile ();
|
||||||
void CfgNewsgroups ();
|
void CfgNewsgroups ();
|
||||||
void CfgNickname ();
|
void CfgNickname ();
|
||||||
|
void CfgNetname ();
|
||||||
void CfgNodelist ();
|
void CfgNodelist ();
|
||||||
void CfgNodelistwarn ();
|
void CfgNodelistwarn ();
|
||||||
void CfgNodepath ();
|
void CfgNodepath ();
|
||||||
|
@ -447,6 +447,10 @@ void GPickArealist::print_line(uint idx, uint pos, bool isbar) {
|
|||||||
|
|
||||||
void GPickArealist::AreaCatchUp(uint n) {
|
void GPickArealist::AreaCatchUp(uint n) {
|
||||||
|
|
||||||
|
// Do not do catch up if there's active area
|
||||||
|
if(AA->isopen())
|
||||||
|
return false;
|
||||||
|
|
||||||
GMenuAreaCatchup MenuAreaCatchup;
|
GMenuAreaCatchup MenuAreaCatchup;
|
||||||
GMsg* msg = (GMsg*)throw_calloc(1, sizeof(GMsg));
|
GMsg* msg = (GMsg*)throw_calloc(1, sizeof(GMsg));
|
||||||
|
|
||||||
|
@ -262,6 +262,7 @@ public:
|
|||||||
bool msglistwidesubj;
|
bool msglistwidesubj;
|
||||||
Path namesfile;
|
Path namesfile;
|
||||||
Name nickname;
|
Name nickname;
|
||||||
|
Name netname;
|
||||||
Path nodepath;
|
Path nodepath;
|
||||||
Path nodepathfd;
|
Path nodepathfd;
|
||||||
Path nodepathv7;
|
Path nodepathv7;
|
||||||
|
@ -45,9 +45,9 @@ char* MakeOrigin(GMsg* msg, const char* orig) {
|
|||||||
strxcpy(origin, orig, sizeof(origin));
|
strxcpy(origin, orig, sizeof(origin));
|
||||||
|
|
||||||
if(msg->orig.net)
|
if(msg->orig.net)
|
||||||
msg->orig.make_string(buf);
|
msg->orig.make_string(buf, *AA->Netname() ? (*msg->odom ? msg->odom : AA->Netname()) : NULL);
|
||||||
else
|
else
|
||||||
AA->Aka().addr.make_string(buf);
|
AA->Aka().addr.make_string(buf, *AA->Netname() ? (*AA->Aka().domain ? AA->Aka().domain : AA->Netname()) : NULL);
|
||||||
|
|
||||||
if(*origin == '@')
|
if(*origin == '@')
|
||||||
GetRandomLine(origin, sizeof(origin), origin+1);
|
GetRandomLine(origin, sizeof(origin), origin+1);
|
||||||
|
@ -65,7 +65,7 @@ int inforow = 18;
|
|||||||
char goldmark = ' ';
|
char goldmark = ' ';
|
||||||
|
|
||||||
int startecho = -1;
|
int startecho = -1;
|
||||||
Echo stecho;
|
Echo stecho = "";
|
||||||
|
|
||||||
int fieldupd = 2; // State of field mode in winpdef()
|
int fieldupd = 2; // State of field mode in winpdef()
|
||||||
|
|
||||||
|
@ -307,6 +307,8 @@ const gkey KK_ReadTouchSemaphore = 0xFF9E;
|
|||||||
const gkey KK_ReadUserbase = 0xFF9F;
|
const gkey KK_ReadUserbase = 0xFF9F;
|
||||||
const gkey KK_ReadUUDecode = 0xFFA0;
|
const gkey KK_ReadUUDecode = 0xFFA0;
|
||||||
const gkey KK_ReadWriteMsg = 0xFFA1;
|
const gkey KK_ReadWriteMsg = 0xFFA1;
|
||||||
|
const gkey KK_ReadDirQuoteMsg = 0xFFA2;
|
||||||
|
const gkey KK_ReadMoveDirQuoteMsg = 0xFFA3;
|
||||||
|
|
||||||
const gkey KK_AreaUndefine = 0xFFB0;
|
const gkey KK_AreaUndefine = 0xFFB0;
|
||||||
const gkey KK_EditUndefine = 0xFFB1;
|
const gkey KK_EditUndefine = 0xFFB1;
|
||||||
|
@ -982,9 +982,11 @@ int GMenuNavigate::Run() {
|
|||||||
TAG_EDIT = 101,
|
TAG_EDIT = 101,
|
||||||
TAG_EDIT_ENTER = (int)KK_ReadNewMsg,
|
TAG_EDIT_ENTER = (int)KK_ReadNewMsg,
|
||||||
TAG_EDIT_QUOTE = (int)KK_ReadQuoteMsg,
|
TAG_EDIT_QUOTE = (int)KK_ReadQuoteMsg,
|
||||||
|
TAG_EDIT_DIRQUOTE = (int)KK_ReadDirQuoteMsg,
|
||||||
TAG_EDIT_COMMENT = (int)KK_ReadCommentMsg,
|
TAG_EDIT_COMMENT = (int)KK_ReadCommentMsg,
|
||||||
TAG_EDIT_OTHER = 1010,
|
TAG_EDIT_OTHER = 1010,
|
||||||
TAG_EDIT_OTHER_QUOTE = (int)KK_ReadMoveQuoteMsg,
|
TAG_EDIT_OTHER_QUOTE = (int)KK_ReadMoveQuoteMsg,
|
||||||
|
TAG_EDIT_OTHER_DIRQUOTE = (int)KK_ReadMoveQuoteMsg,
|
||||||
TAG_EDIT_OTHER_COMMENT = (int)KK_ReadMoveCommentMsg,
|
TAG_EDIT_OTHER_COMMENT = (int)KK_ReadMoveCommentMsg,
|
||||||
TAG_SEL = 102,
|
TAG_SEL = 102,
|
||||||
TAG_SEL_ORIGIN = (int)KK_ReadChangeOrigin,
|
TAG_SEL_ORIGIN = (int)KK_ReadChangeOrigin,
|
||||||
@ -997,8 +999,7 @@ int GMenuNavigate::Run() {
|
|||||||
TAG_UTIL_LIST = (int)KK_ReadMessageList,
|
TAG_UTIL_LIST = (int)KK_ReadMessageList,
|
||||||
TAG_UTIL_WRITE = (int)KK_ReadWriteMsg,
|
TAG_UTIL_WRITE = (int)KK_ReadWriteMsg,
|
||||||
TAG_UTIL_FREQ = (int)KK_ReadFileRequest,
|
TAG_UTIL_FREQ = (int)KK_ReadFileRequest,
|
||||||
TAG_SEPARATOR,
|
TAG_END = 104
|
||||||
TAG_END
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Init();
|
Init();
|
||||||
@ -1021,11 +1022,13 @@ int GMenuNavigate::Run() {
|
|||||||
BeginPullDown();
|
BeginPullDown();
|
||||||
Item(TAG_EDIT_ENTER, "E Enter new msg ");
|
Item(TAG_EDIT_ENTER, "E Enter new msg ");
|
||||||
Item(TAG_EDIT_QUOTE, "Q Quote-reply ");
|
Item(TAG_EDIT_QUOTE, "Q Quote-reply ");
|
||||||
|
Item(TAG_EDIT_DIRQUOTE, "D Direct quote-reply (ignore Reply-To) ");
|
||||||
Item(TAG_EDIT_COMMENT, "C Comment-reply ");
|
Item(TAG_EDIT_COMMENT, "C Comment-reply ");
|
||||||
Item(TAG_EDIT_OTHER, "O Other area reply > ");
|
Item(TAG_EDIT_OTHER, "O Other area reply > ");
|
||||||
SetTitle(" Other Area ");
|
SetTitle(" Other Area ");
|
||||||
Begin();
|
Begin();
|
||||||
Item(TAG_EDIT_OTHER_QUOTE, "Q Quote-reply ");
|
Item(TAG_EDIT_OTHER_QUOTE, "Q Quote-reply ");
|
||||||
|
Item(TAG_EDIT_OTHER_DIRQUOTE, "D Direct quote-reply (ignore Reply-To) ");
|
||||||
Item(TAG_EDIT_OTHER_COMMENT, "C Comment-reply ");
|
Item(TAG_EDIT_OTHER_COMMENT, "C Comment-reply ");
|
||||||
End();
|
End();
|
||||||
End();
|
End();
|
||||||
@ -1046,7 +1049,7 @@ int GMenuNavigate::Run() {
|
|||||||
End();
|
End();
|
||||||
End();
|
End();
|
||||||
Start();
|
Start();
|
||||||
if((finaltag >= TAG_MAIN) and (finaltag < (TAG_END*10)))
|
if((finaltag >= TAG_MAIN) and (finaltag <= TAG_END))
|
||||||
finaltag = -1;
|
finaltag = -1;
|
||||||
return finaltag;
|
return finaltag;
|
||||||
}
|
}
|
||||||
|
@ -316,9 +316,11 @@ void MessageBrowse();
|
|||||||
void NewArea(bool jumpnext = false);
|
void NewArea(bool jumpnext = false);
|
||||||
void NewMsg();
|
void NewMsg();
|
||||||
void OtherAreaQuoteMsg();
|
void OtherAreaQuoteMsg();
|
||||||
|
void OtherAreaDirQuoteMsg();
|
||||||
void OtherAreaCommentMsg();
|
void OtherAreaCommentMsg();
|
||||||
void QuitNow();
|
void QuitNow();
|
||||||
void QuoteBuf(GMsg* msg);
|
void QuoteBuf(GMsg* msg);
|
||||||
|
void DirQuoteMsg();
|
||||||
void QuoteMsg();
|
void QuoteMsg();
|
||||||
void RenumberArea();
|
void RenumberArea();
|
||||||
void ReplyMsg();
|
void ReplyMsg();
|
||||||
|
@ -171,6 +171,7 @@ void Area::InitData() {
|
|||||||
adat->viewkludge = CFG->viewkludge;
|
adat->viewkludge = CFG->viewkludge;
|
||||||
adat->viewquote = CFG->viewquote;
|
adat->viewquote = CFG->viewquote;
|
||||||
strcpy(adat->nickname, CFG->nickname);
|
strcpy(adat->nickname, CFG->nickname);
|
||||||
|
strcpy(adat->netname, CFG->netname);
|
||||||
strcpy(adat->whoto, CFG->whoto);
|
strcpy(adat->whoto, CFG->whoto);
|
||||||
strcpy(adat->xlatexport, CFG->xlatexport);
|
strcpy(adat->xlatexport, CFG->xlatexport);
|
||||||
strcpy(adat->xlatimport, CFG->xlatimport);
|
strcpy(adat->xlatimport, CFG->xlatimport);
|
||||||
@ -362,6 +363,9 @@ void Area::RandomizeData(int mode) {
|
|||||||
if(CFG->grp.GetItm(GRP_NICKNAME, buf, sizeof(buf)))
|
if(CFG->grp.GetItm(GRP_NICKNAME, buf, sizeof(buf)))
|
||||||
strxcpy(adat->nickname, buf, sizeof(adat->nickname));
|
strxcpy(adat->nickname, buf, sizeof(adat->nickname));
|
||||||
|
|
||||||
|
if(CFG->grp.GetItm(GRP_NETNAME, buf, sizeof(buf)))
|
||||||
|
strxcpy(adat->netname, buf, sizeof(adat->netname));
|
||||||
|
|
||||||
if(CFG->grp.GetItm(GRP_WHOTO, buf, sizeof(buf))) {
|
if(CFG->grp.GetItm(GRP_WHOTO, buf, sizeof(buf))) {
|
||||||
if(*buf == '@')
|
if(*buf == '@')
|
||||||
GetRandomLine(buf, sizeof(buf), buf+1);
|
GetRandomLine(buf, sizeof(buf), buf+1);
|
||||||
|
@ -605,6 +605,10 @@ void Reader() {
|
|||||||
OtherAreaQuoteMsg();
|
OtherAreaQuoteMsg();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case KK_ReadMoveDirQuoteMsg:
|
||||||
|
OtherAreaDirQuoteMsg();
|
||||||
|
break;
|
||||||
|
|
||||||
case KK_ReadMoveCommentMsg:
|
case KK_ReadMoveCommentMsg:
|
||||||
OtherAreaCommentMsg();
|
OtherAreaCommentMsg();
|
||||||
break;
|
break;
|
||||||
@ -617,6 +621,10 @@ void Reader() {
|
|||||||
QuoteMsg();
|
QuoteMsg();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case KK_ReadDirQuoteMsg:
|
||||||
|
DirQuoteMsg();
|
||||||
|
break;
|
||||||
|
|
||||||
case KK_ReadCommentMsg:
|
case KK_ReadCommentMsg:
|
||||||
CommentMsg();
|
CommentMsg();
|
||||||
break;
|
break;
|
||||||
|
@ -107,6 +107,10 @@ int AreaList::SetActiveAreaNo(int __areano) {
|
|||||||
|
|
||||||
int AreaList::AreaScan(int mode, uint currno, int pmscan, int& pmails, int& pmareas, const char* file) {
|
int AreaList::AreaScan(int mode, uint currno, int pmscan, int& pmails, int& pmareas, const char* file) {
|
||||||
|
|
||||||
|
// Never scan if there's active area
|
||||||
|
if(AA->isopen())
|
||||||
|
return false;
|
||||||
|
|
||||||
gstrarray bag;
|
gstrarray bag;
|
||||||
int groupid = -1;
|
int groupid = -1;
|
||||||
|
|
||||||
|
@ -942,6 +942,15 @@ void ReplyMsg() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void DirQuoteMsg() {
|
||||||
|
|
||||||
|
if(reader_msg->ireplyto) *reader_msg->ireplyto = NUL;
|
||||||
|
QuoteMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
void QuoteMsg() {
|
void QuoteMsg() {
|
||||||
@ -1006,6 +1015,15 @@ void CommentMsg() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void OtherAreaDirQuoteMsg() {
|
||||||
|
|
||||||
|
if(reader_msg->ireplyto) *reader_msg->ireplyto = NUL;
|
||||||
|
OtherAreaQuoteMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
void OtherAreaQuoteMsg() {
|
void OtherAreaQuoteMsg() {
|
||||||
|
@ -291,6 +291,7 @@ struct AreaData {
|
|||||||
bool msglistheader;
|
bool msglistheader;
|
||||||
bool msglistwidesubj;
|
bool msglistwidesubj;
|
||||||
Name nickname;
|
Name nickname;
|
||||||
|
Name netname;
|
||||||
INam organization;
|
INam organization;
|
||||||
char origin[160];
|
char origin[160];
|
||||||
Path quotebuffile;
|
Path quotebuffile;
|
||||||
@ -542,6 +543,7 @@ public:
|
|||||||
bool Msglistheader() const { return adat->msglistheader; }
|
bool Msglistheader() const { return adat->msglistheader; }
|
||||||
bool Msglistwidesubj() const { return adat->msglistwidesubj; }
|
bool Msglistwidesubj() const { return adat->msglistwidesubj; }
|
||||||
const char* Nickname() const { return adat->nickname; }
|
const char* Nickname() const { return adat->nickname; }
|
||||||
|
const char* Netname() const { return adat->netname; }
|
||||||
const char* Organization() const { return adat->organization; }
|
const char* Organization() const { return adat->organization; }
|
||||||
const char* Origin() const { return adat->origin; }
|
const char* Origin() const { return adat->origin; }
|
||||||
const char* Outputfile() const { return adat->outputfile; }
|
const char* Outputfile() const { return adat->outputfile; }
|
||||||
@ -706,7 +708,6 @@ public:
|
|||||||
int Run(const char* _title, int wpos, int& idx);
|
int Run(const char* _title, int wpos, int& idx);
|
||||||
|
|
||||||
GPickArealist();
|
GPickArealist();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
#undef __GVER_PREVERSION__
|
#undef __GVER_PREVERSION__
|
||||||
#define __GVER_PREVERSION__ ""
|
#define __GVER_PREVERSION__ ""
|
||||||
#undef __GVER_POSTVERSION__
|
#undef __GVER_POSTVERSION__
|
||||||
#define __GVER_POSTVERSION__ ".7"
|
#define __GVER_POSTVERSION__ ""
|
||||||
__GVER__(1,1,4)
|
__GVER__(1,1,5)
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
@ -1244,7 +1244,10 @@ gkey kbxget_raw(int mode) {
|
|||||||
}
|
}
|
||||||
// fall through
|
// fall through
|
||||||
default:
|
default:
|
||||||
{
|
if(ascii == '\x2e') {
|
||||||
|
return (gkey)ascii;
|
||||||
|
}
|
||||||
|
else {
|
||||||
int kc = gkbd_nt2bios(inp);
|
int kc = gkbd_nt2bios(inp);
|
||||||
if(kc != -1)
|
if(kc != -1)
|
||||||
return (gkey)kc;
|
return (gkey)kc;
|
||||||
|
@ -74,6 +74,7 @@ enum {
|
|||||||
GRP_MSGLISTHEADER,
|
GRP_MSGLISTHEADER,
|
||||||
GRP_MSGLISTWIDESUBJ,
|
GRP_MSGLISTWIDESUBJ,
|
||||||
GRP_NICKNAME,
|
GRP_NICKNAME,
|
||||||
|
GRP_NETNAME,
|
||||||
GRP_ORGANIZATION,
|
GRP_ORGANIZATION,
|
||||||
GRP_ORIGIN,
|
GRP_ORIGIN,
|
||||||
GRP_OUTPUTFILE,
|
GRP_OUTPUTFILE,
|
||||||
|
@ -33,6 +33,8 @@ gxdutch cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
|||||||
gxezy102 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
gxezy102 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
gxezy110 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
gxezy110 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
gxfd cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
gxfd cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
|
gxfecho4 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
|
gxfecho5 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
gxfecho6 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
gxfecho6 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
gxfidpcb cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
gxfidpcb cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
gxfm092 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
gxfm092 cpp all ovl bcd bco bcx wcn wco wcx lnx emx djg rsx cyg
|
||||||
|
@ -255,6 +255,8 @@ protected:
|
|||||||
void ReadEzycom110(FILE* fp, char* path, char* file, char* options);
|
void ReadEzycom110(FILE* fp, char* path, char* file, char* options);
|
||||||
#endif
|
#endif
|
||||||
#ifndef GCFG_NOFE
|
#ifndef GCFG_NOFE
|
||||||
|
void ReadFastecho11x(int fh);
|
||||||
|
void ReadFastecho141(int fh);
|
||||||
void ReadFastecho142(int fh);
|
void ReadFastecho142(int fh);
|
||||||
#endif
|
#endif
|
||||||
#ifndef GCFG_NOFMAIL
|
#ifndef GCFG_NOFMAIL
|
||||||
|
476
goldlib/gcfg/gs_fech4.h
Normal file
476
goldlib/gcfg/gs_fech4.h
Normal file
@ -0,0 +1,476 @@
|
|||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// The Goldware Library. Copyright (C) Odinn Sorensen.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// 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 library; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// $Id$
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(GOLD_CANPACK)
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* 'C' Structures of FastEcho 1.30, File: FASTECHO.CFG */
|
||||||
|
/* (c)1993 by Tobias Burchhardt, Updated: 13 Sep 1993 */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* FASTECHO.CFG = <CONFIG> */
|
||||||
|
/* + <optional extensions> */
|
||||||
|
/* + <CONFIG.NodeCnt * Node> */
|
||||||
|
/* + <CONFIG.AreaCnt * Area> */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
#define REVISION 4 /* current revision */
|
||||||
|
|
||||||
|
#define MAX_AREAS 960 /* max # of areas */
|
||||||
|
#define MAX_NODES 200 /* max # of nodes */
|
||||||
|
#define MAX_GROUPS 26 /* max # of groups */
|
||||||
|
#define MAX_AKAS 16 /* max # of akas */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.flags */
|
||||||
|
/********************************************************/
|
||||||
|
#define RETEAR 0x00000001l
|
||||||
|
#define AUTOCREATE 0x00000002l
|
||||||
|
#define KILLEMPTY 0x00000004l
|
||||||
|
#define KILLDUPES 0x00000008l
|
||||||
|
#define FRONTDOOR 0x00000010l
|
||||||
|
#define DBRIDGE 0x00000020l
|
||||||
|
#define BINKLEY 0x00000040l
|
||||||
|
#define INTERMAIL 0x00000080l
|
||||||
|
//#define SWAP_XMS 0x00000100l
|
||||||
|
//#define SWAP_EMS 0x00000200l
|
||||||
|
//#define SWAP_DISK 0x00000400l
|
||||||
|
#define PURGE_PROCESSDATE 0x00008000l
|
||||||
|
#define MAILER_RESCAN 0x00010000l
|
||||||
|
#define EXCLUDE_USERS 0x00020000l
|
||||||
|
#define EXCLUDE_SYSOPS 0x00040000l
|
||||||
|
#define CHECK_DESTINATION 0x00080000l
|
||||||
|
#define UPDATE_BBS_CONFIG 0x00100000l
|
||||||
|
#define KILL_GRUNGED_DATE 0x00200000l
|
||||||
|
#define NOT_BUFFER_EMS 0x00400000l
|
||||||
|
#define KEEP_NETMAILS 0x00800000l
|
||||||
|
#define NOT_UPDATE_MAILER 0x01000000l
|
||||||
|
#define NOT_CHECK_SEMAPHORES 0x02000000l
|
||||||
|
#define CREATE_SEMAPHORES 0x04000000l
|
||||||
|
#define CHECK_COMPLETE 0x08000000l
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.BBSSoftware */
|
||||||
|
/********************************************************/
|
||||||
|
enum BBSSoft { NoBBSSoft = 0, RemoteAccess111, QuickBBS,
|
||||||
|
SuperBBS, ProBoard122, TagBBS, RemoteAccess200,
|
||||||
|
ProBoard130};
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.CC.what */
|
||||||
|
/********************************************************/
|
||||||
|
#define FROM 1
|
||||||
|
#define TO 2
|
||||||
|
#define SUBJECT 3
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.QuietLevel */
|
||||||
|
/********************************************************/
|
||||||
|
#define QUIET_PACK 0x0001
|
||||||
|
#define QUIET_UNPACK 0x0002
|
||||||
|
#define QUIET_EXTERN 0x0004
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.Buffers */
|
||||||
|
/********************************************************/
|
||||||
|
#define BUF_LARGE 0x0000
|
||||||
|
#define BUF_MEDIUM 0x0001
|
||||||
|
#define BUF_SMALL 0x0002
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.arcext.inb/outb */
|
||||||
|
/********************************************************/
|
||||||
|
enum ARCmailExt { ARCDigits = 0, ARCHex, ARCAlpha };
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.AreaFixFlags */
|
||||||
|
/********************************************************/
|
||||||
|
#define ALLOWRESCAN 0x0001
|
||||||
|
#define KEEPREQUEST 0x0002
|
||||||
|
#define KEEPRECEIPT 0x0004
|
||||||
|
#define ALLOWREMOTE 0x0008
|
||||||
|
#define DETAILEDLIST 0x0010
|
||||||
|
#define ALLOWPASSWORD 0x0020
|
||||||
|
#define ALLOWPKTPWD 0x0040
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Area.board (1-200 = QBBS) */
|
||||||
|
/********************************************************/
|
||||||
|
#define NO_BOARD 0x4000u /* everything but QBBS */
|
||||||
|
#define AREA_DELETED 0x8000u /* never written */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Area.flags.type */
|
||||||
|
/********************************************************/
|
||||||
|
#define QBBS 0
|
||||||
|
#define FIDO 1
|
||||||
|
#define SQUISH 2
|
||||||
|
#define JAM 3
|
||||||
|
#define PT_BOARD 7
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Area.type */
|
||||||
|
/********************************************************/
|
||||||
|
#define AREA_ECHOMAIL 0
|
||||||
|
#define AREA_NETMAIL 1
|
||||||
|
#define AREA_LOCAL 2
|
||||||
|
#define AREA_BADMAILBOARD 3
|
||||||
|
#define AREA_DUPEBOARD 4
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Node.flags */
|
||||||
|
/********************************************************/
|
||||||
|
#define DDDD 0x0001
|
||||||
|
#define TOSSCAN 0x0002
|
||||||
|
#define DIRECT 0x0004
|
||||||
|
#define CRASH 0x0008
|
||||||
|
#define UMLAUT_NET 0x0010
|
||||||
|
#define ALLOW_AF_REMOTE 0x0020
|
||||||
|
#define RESCANDISABLED 0x0040
|
||||||
|
#define HOLD 0x0080
|
||||||
|
#define ARCMAIL060 0x0200
|
||||||
|
#define PASSIVE 0x0400
|
||||||
|
#define ALLOWAREACREATE 0x0800
|
||||||
|
#define PACKER 0xF000
|
||||||
|
|
||||||
|
#define PACKS(x) (int)(((x)&PACKER)>>12) /* Index of used Packer */
|
||||||
|
/* 0xf = .PKT, don't pack */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Node.advflags */
|
||||||
|
/********************************************************/
|
||||||
|
#define EXPORTBYNAME 0x0001
|
||||||
|
#define NOT_NOTIFY 0x0002
|
||||||
|
#define NOT_HELP 0x0004
|
||||||
|
#define NOATTACH 0x0008
|
||||||
|
#define NET_HOLD 0x0010
|
||||||
|
#define NET_CRASH 0x0020
|
||||||
|
#define NET_DIRECT 0x0040
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Types */
|
||||||
|
/********************************************************/
|
||||||
|
#if 1
|
||||||
|
typedef unsigned char bit;
|
||||||
|
typedef unsigned char byte;
|
||||||
|
typedef unsigned short word; /* normal int = 16 bit */
|
||||||
|
typedef unsigned long dword;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum ARCers { ARC_Unknown = -1, ARC_SeaArc, ARC_PkArc, ARC_Pak,
|
||||||
|
ARC_ArcPlus, ARC_Zoo, ARC_PkZip, ARC_Lha, ARC_Arj,
|
||||||
|
ARC_Sqz }; /* CONFIG.Unpackers[] */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Structures */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
word zone,net,node,point;
|
||||||
|
} Address;
|
||||||
|
|
||||||
|
#define _MAXPATH 56
|
||||||
|
|
||||||
|
typedef struct CONFIGURATION4
|
||||||
|
{
|
||||||
|
word revision;
|
||||||
|
dword flags;
|
||||||
|
word NodeCnt,AreaCnt,unused1;
|
||||||
|
char NetMPath[_MAXPATH],
|
||||||
|
MsgBase[_MAXPATH],
|
||||||
|
InBound[_MAXPATH],
|
||||||
|
OutBound[_MAXPATH],
|
||||||
|
Unpacker[_MAXPATH],
|
||||||
|
LogFile[_MAXPATH],
|
||||||
|
OriginLine[8][_MAXPATH],
|
||||||
|
StatFile[_MAXPATH],
|
||||||
|
SwapPath[_MAXPATH],
|
||||||
|
SemaphorePath[_MAXPATH],
|
||||||
|
BBSConfigPath[_MAXPATH],
|
||||||
|
DBQueuePath[_MAXPATH],
|
||||||
|
unused2[32],
|
||||||
|
RetearTo[40],
|
||||||
|
SecurePath[_MAXPATH],
|
||||||
|
ExtAfter[_MAXPATH-4],
|
||||||
|
ExtBefore[_MAXPATH-4];
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char tag[4];
|
||||||
|
char name[_MAXPATH-2];
|
||||||
|
char list[2]; /* List prefix character */
|
||||||
|
} Packer[8];
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
byte what;
|
||||||
|
char object[31];
|
||||||
|
word conference;
|
||||||
|
} CC[10];
|
||||||
|
byte security,loglevel;
|
||||||
|
short def_days,def_messages;
|
||||||
|
struct /* now obsolete */
|
||||||
|
{
|
||||||
|
Address main;
|
||||||
|
char domain[28];
|
||||||
|
word pointnet;
|
||||||
|
dword flags;
|
||||||
|
} oldakas[11]; /* but still maintained */
|
||||||
|
word autorenum;
|
||||||
|
short def_recvdays;
|
||||||
|
word openQQQs;
|
||||||
|
word oldduperecords; /* now obsolete */
|
||||||
|
word msglen;
|
||||||
|
word unused3;
|
||||||
|
char TempPath[_MAXPATH];
|
||||||
|
byte graphics,BBSSoftware;
|
||||||
|
char AreaFixHelp[_MAXPATH];
|
||||||
|
char Unpackers[9][_MAXPATH];
|
||||||
|
word AreaFixFlags;
|
||||||
|
byte QuietLevel,Buffers;
|
||||||
|
byte FWACnt,GDCnt; /* # of ForwardAreaFix records,
|
||||||
|
# of Group Default records */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
word flags;
|
||||||
|
word days[2];
|
||||||
|
word msgs[2];
|
||||||
|
} rescan_def;
|
||||||
|
dword duperecords;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
byte inb;
|
||||||
|
byte outb;
|
||||||
|
} arcext;
|
||||||
|
word AFixRcptLen;
|
||||||
|
word AkaCnt;
|
||||||
|
word maxPKT;
|
||||||
|
byte sharing,sorting;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char name[36];
|
||||||
|
dword resv;
|
||||||
|
} sysops[11];
|
||||||
|
char AreaFixLog[_MAXPATH];
|
||||||
|
char TempInBound[_MAXPATH];
|
||||||
|
char resv2[832];
|
||||||
|
dword offset; /* This is the offset from the current
|
||||||
|
file-pointer to the 1st Node */
|
||||||
|
} CONFIG4;
|
||||||
|
|
||||||
|
/* To directly access the 'Nodes' and/or 'Areas' while bypassing the */
|
||||||
|
/* Extensions, perform an absolute (from beginning of file) seek to */
|
||||||
|
/* sizeof(CONFIG) + CONFIG.offset */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Address addr;
|
||||||
|
byte aka; /* 0 ... MAX_AKAS-1 */
|
||||||
|
byte autopassive; /* # of days */
|
||||||
|
word flags;
|
||||||
|
word sec_level;
|
||||||
|
char password[9]; /* .PKT password */
|
||||||
|
char newgroup; /* Default group for new areas */
|
||||||
|
Address routes[15]; /* netmail routing */
|
||||||
|
byte areas[124]; /* Bit-field with 992 bits, Byte 0/Bit 7 */
|
||||||
|
/* is conference 0, etc. */
|
||||||
|
dword groups; /* Bit-field, Byte 0/Bit 7 = 'A' etc. */
|
||||||
|
/* false means group is active */
|
||||||
|
char areafixpw[9];
|
||||||
|
byte advflags;
|
||||||
|
} FeNode4;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[41];
|
||||||
|
byte type;
|
||||||
|
word board;
|
||||||
|
short messages;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
bit origin : 3;
|
||||||
|
bit group : 5; /* 0 ... MAX_GROUPS-1 */
|
||||||
|
bit type : 3;
|
||||||
|
bit umlaut : 1;
|
||||||
|
bit aka : 4; /* 0 ... MAX_AKAS-1 */
|
||||||
|
} flags;
|
||||||
|
short days;
|
||||||
|
word conference; /* 0 ... 991 */
|
||||||
|
word read_sec,write_sec;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
bit autoadded : 1;
|
||||||
|
bit tinyseen : 1;
|
||||||
|
bit cpd : 1;
|
||||||
|
bit passive : 1;
|
||||||
|
bit keepseen : 1;
|
||||||
|
bit mandatory : 1;
|
||||||
|
bit keepsysop : 1;
|
||||||
|
bit killread : 1;
|
||||||
|
bit disablepsv : 1;
|
||||||
|
bit resv : 7;
|
||||||
|
} advflags;
|
||||||
|
char path[_MAXPATH];
|
||||||
|
char desc[42];
|
||||||
|
word seenbys; /* LSB = Aka0, MSB = Aka15 */
|
||||||
|
short recvdays;
|
||||||
|
} FeArea4;
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Optional Extensions */
|
||||||
|
/********************************************************/
|
||||||
|
/* These are the variable length extensions between */
|
||||||
|
/* CONFIG and the first Node record. Each extension has */
|
||||||
|
/* a header which contains the info about the type and */
|
||||||
|
/* the length of the extension. You can read the fields */
|
||||||
|
/* using the following algorithm: */
|
||||||
|
/* */
|
||||||
|
/* offset := 0; */
|
||||||
|
/* while (offset<CONFIG.offset) do */
|
||||||
|
/* read_header; */
|
||||||
|
/* if(header.type==EH_abc) then */
|
||||||
|
/* read_and_process_data; */
|
||||||
|
/* else */
|
||||||
|
/* if(header.type==EH_xyz) then */
|
||||||
|
/* read_and_process_data; */
|
||||||
|
/* else */
|
||||||
|
/* [...] */
|
||||||
|
/* else // unknown or unwanted extension found */
|
||||||
|
/* seek_forward(header.offset); // Seek to next header */
|
||||||
|
/* offset = offset + header.offset; */
|
||||||
|
/* end; */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
word type; /* EH_... */
|
||||||
|
dword offset; /* length of field excluding header */
|
||||||
|
} ExtensionHeader;
|
||||||
|
|
||||||
|
|
||||||
|
#define EH_AREAFIX 0x0001 /* CONFIG.FWACnt * <ForwardAreaFix> */
|
||||||
|
|
||||||
|
enum AreaFixSendTo { AreaFix = 0, AreaMgr, AreaLink, EchoMgr };
|
||||||
|
enum AreaFixAreaListFormat { Areas_BBS = 0, Area_List };
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
word nodenr;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
bit sendto : 3;
|
||||||
|
bit newgroup: 5;
|
||||||
|
bit valid : 1;
|
||||||
|
bit uncond : 1;
|
||||||
|
bit addplus : 1;
|
||||||
|
bit addtear : 1;
|
||||||
|
bit format : 3;
|
||||||
|
bit active : 1;
|
||||||
|
} flags;
|
||||||
|
char file[_MAXPATH];
|
||||||
|
dword groups;
|
||||||
|
word sec_level;
|
||||||
|
char resv[6];
|
||||||
|
} ForwardAreaFix;
|
||||||
|
|
||||||
|
#define EH_GROUPS 0x0002 /* 1 record of <GroupNames> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[26][35];
|
||||||
|
} GroupNames;
|
||||||
|
|
||||||
|
#define EH_SYSOPNAMES 0x0003 /* CONFIG.NodeCnt * <SysopNames> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[36];
|
||||||
|
} SysopNames;
|
||||||
|
|
||||||
|
#define EH_GRPDEFAULTS 0x0006 /* CONFIG.GDCnt * <GroupDefaults> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
byte group;
|
||||||
|
FeArea4 area;
|
||||||
|
byte nodes[32]; /* 256 bits */
|
||||||
|
} GroupDefaults;
|
||||||
|
|
||||||
|
#define EH_AKAS 0x0007 /* CONFIG.AkaCnt * <SysAddress> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Address main;
|
||||||
|
char domain[28];
|
||||||
|
word pointnet;
|
||||||
|
dword flags; /* unused */
|
||||||
|
} SysAddress;
|
||||||
|
|
||||||
|
#define EH_RA111_MSG 0x0100 /* Original records of BBS systems */
|
||||||
|
#define EH_QBBS_MSG 0x0101
|
||||||
|
#define EH_SBBS_MSG 0x0102
|
||||||
|
#define EH_PB122_MSG 0x0103
|
||||||
|
#define EH_TAG_MSG 0x0104
|
||||||
|
#define EH_RA200_MSG 0x0105 /* See BBS package's documentation */
|
||||||
|
#define EH_PB130_MSG 0x0106 /* for details */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Routines to access Node.areas, Node.groups */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
word AddBam(byte *bam,word nr)
|
||||||
|
{
|
||||||
|
byte c=(1<<(7-(nr&7))),d;
|
||||||
|
|
||||||
|
d=bam[nr/8]&c;
|
||||||
|
bam[nr/8]|=c;
|
||||||
|
return(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FreeBam(byte *bam,word nr)
|
||||||
|
{
|
||||||
|
bam[nr/8]&=~(1<<(7-(nr&7)));
|
||||||
|
}
|
||||||
|
|
||||||
|
word GetBam(byte *bam,word nr)
|
||||||
|
{
|
||||||
|
if(bam[nr/8]&(1<<(7-(nr&7)))) return(true);
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define IsActive(nr,area) GetBam(Node[nr].areas,area)
|
||||||
|
#define SetActive(nr,area) AddBam(Node[nr].areas,area)
|
||||||
|
#define SetDeActive(nr,area) FreeBam(Node[nr].areas,area)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(GOLD_CANPACK)
|
||||||
|
#pragma pack()
|
||||||
|
#endif
|
||||||
|
|
502
goldlib/gcfg/gs_fech5.h
Normal file
502
goldlib/gcfg/gs_fech5.h
Normal file
@ -0,0 +1,502 @@
|
|||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// The Goldware Library. Copyright (C) Odinn Sorensen.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// 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 library; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// $Id$
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* 'C' Structures of FastEcho 1.41, File: FASTECHO.CFG */
|
||||||
|
/* (c)1994 by Tobias Burchhardt, Updated: 11 Apr 1994 */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* FASTECHO.CFG = <CONFIG> */
|
||||||
|
/* + <optional extensions> */
|
||||||
|
/* + <CONFIG.NodeCnt * Node> */
|
||||||
|
/* + <CONFIG.AreaCnt * Area> */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(GOLD_CANPACK)
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define REVISION 5 /* current revision */
|
||||||
|
|
||||||
|
#define MAX_AREAS 2048 /* max # of areas */
|
||||||
|
#define MAX_NODES 1024 /* max # of nodes */
|
||||||
|
#define MAX_GROUPS 26 /* max # of groups */
|
||||||
|
#define MAX_AKAS 16 /* max # of akas */
|
||||||
|
#define MAX_ROUTE 15 /* max # of 'vias' */
|
||||||
|
|
||||||
|
/*
|
||||||
|
Note: The MAX_AREAS and MAX_NODES are only the absolute maximums
|
||||||
|
as the handling is flexible. To get the maximums which are
|
||||||
|
used for the config file you read, you have to examine the
|
||||||
|
CONFIG.MaxAreas and CONFIG.MaxNodes variables !
|
||||||
|
*/
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.flags */
|
||||||
|
/********************************************************/
|
||||||
|
#define RETEAR 0x00000001l
|
||||||
|
#define AUTOCREATE 0x00000002l
|
||||||
|
#define KILLEMPTY 0x00000004l
|
||||||
|
#define KILLDUPES 0x00000008l
|
||||||
|
#define FRONTDOOR 0x00000010l
|
||||||
|
#define DBRIDGE 0x00000020l
|
||||||
|
#define BINKLEY 0x00000040l
|
||||||
|
#define INTERMAIL 0x00000080l
|
||||||
|
//#define SWAP_XMS 0x00000100l
|
||||||
|
//#define SWAP_EMS 0x00000200l
|
||||||
|
//#define SWAP_DISK 0x00000400l
|
||||||
|
#define PURGE_PROCESSDATE 0x00008000l
|
||||||
|
#define MAILER_RESCAN 0x00010000l
|
||||||
|
#define EXCLUDE_USERS 0x00020000l
|
||||||
|
#define EXCLUDE_SYSOPS 0x00040000l
|
||||||
|
#define CHECK_DESTINATION 0x00080000l
|
||||||
|
#define UPDATE_BBS_CONFIG 0x00100000l
|
||||||
|
#define KILL_GRUNGED_DATE 0x00200000l
|
||||||
|
#define NOT_BUFFER_EMS 0x00400000l
|
||||||
|
#define KEEP_NETMAILS 0x00800000l
|
||||||
|
#define NOT_UPDATE_MAILER 0x01000000l
|
||||||
|
#define NOT_CHECK_SEMAPHORES 0x02000000l
|
||||||
|
#define CREATE_SEMAPHORES 0x04000000l
|
||||||
|
#define CHECK_COMPLETE 0x08000000l
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.BBSSoftware */
|
||||||
|
/********************************************************/
|
||||||
|
enum BBSSoft { NoBBSSoft = 0, RemoteAccess111, QuickBBS,
|
||||||
|
SuperBBS, ProBoard122, TagBBS, RemoteAccess200,
|
||||||
|
ProBoard130};
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.CC.what */
|
||||||
|
/********************************************************/
|
||||||
|
#define FROM 1
|
||||||
|
#define TO 2
|
||||||
|
#define SUBJECT 3
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.QuietLevel */
|
||||||
|
/********************************************************/
|
||||||
|
#define QUIET_PACK 0x0001
|
||||||
|
#define QUIET_UNPACK 0x0002
|
||||||
|
#define QUIET_EXTERN 0x0004
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.Buffers */
|
||||||
|
/********************************************************/
|
||||||
|
#define BUF_LARGE 0x0000
|
||||||
|
#define BUF_MEDIUM 0x0001
|
||||||
|
#define BUF_SMALL 0x0002
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.arcext.inb/outb */
|
||||||
|
/********************************************************/
|
||||||
|
enum ARCmailExt { ARCDigits = 0, ARCHex, ARCAlpha };
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* CONFIG.AreaFixFlags */
|
||||||
|
/********************************************************/
|
||||||
|
#define ALLOWRESCAN 0x0001
|
||||||
|
#define KEEPREQUEST 0x0002
|
||||||
|
#define KEEPRECEIPT 0x0004
|
||||||
|
#define ALLOWREMOTE 0x0008
|
||||||
|
#define DETAILEDLIST 0x0010
|
||||||
|
#define ALLOWPASSWORD 0x0020
|
||||||
|
#define ALLOWPKTPWD 0x0040
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Area.board (1-200 = QBBS) */
|
||||||
|
/********************************************************/
|
||||||
|
#define NO_BOARD 0x4000u /* everything but QBBS */
|
||||||
|
#define AREA_DELETED 0x8000u /* never written */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Area.flags.type */
|
||||||
|
/********************************************************/
|
||||||
|
#define QBBS 0
|
||||||
|
#define FIDO 1
|
||||||
|
#define SQUISH 2
|
||||||
|
#define JAM 3
|
||||||
|
#define PT_BOARD 7
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Area.type */
|
||||||
|
/********************************************************/
|
||||||
|
#define AREA_ECHOMAIL 0
|
||||||
|
#define AREA_NETMAIL 1
|
||||||
|
#define AREA_LOCAL 2
|
||||||
|
#define AREA_BADMAILBOARD 3
|
||||||
|
#define AREA_DUPEBOARD 4
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Node.flags */
|
||||||
|
/********************************************************/
|
||||||
|
#define DDDD 0x0001
|
||||||
|
#define TOSSCAN 0x0002
|
||||||
|
#define DIRECT 0x0004
|
||||||
|
#define CRASH 0x0008
|
||||||
|
#define UMLAUT_NET 0x0010
|
||||||
|
#define ALLOW_AF_REMOTE 0x0020
|
||||||
|
#define RESCANDISABLED 0x0040
|
||||||
|
#define HOLD 0x0080
|
||||||
|
#define ARCMAIL060 0x0200
|
||||||
|
#define PASSIVE 0x0400
|
||||||
|
#define ALLOWAREACREATE 0x0800
|
||||||
|
#define PACKER 0xF000
|
||||||
|
|
||||||
|
#define PACKS(x) (int)(((x)&PACKER)>>12) /* Index of used Packer */
|
||||||
|
/* 0xf = .PKT, don't pack */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Node.advflags */
|
||||||
|
/********************************************************/
|
||||||
|
#define EXPORTBYNAME 0x0001
|
||||||
|
#define NOT_NOTIFY 0x0002
|
||||||
|
#define NOT_HELP 0x0004
|
||||||
|
#define NOATTACH 0x0008
|
||||||
|
#define NET_HOLD 0x0010
|
||||||
|
#define NET_CRASH 0x0020
|
||||||
|
#define NET_DIRECT 0x0040
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Types */
|
||||||
|
/********************************************************/
|
||||||
|
#if 1
|
||||||
|
typedef unsigned char byte;
|
||||||
|
typedef unsigned short word; /* normal int = 16 bit */
|
||||||
|
typedef unsigned long dword;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum ARCers { ARC_Unknown = -1, ARC_SeaArc, ARC_PkArc, ARC_Pak,
|
||||||
|
ARC_ArcPlus, ARC_Zoo, ARC_PkZip, ARC_Lha, ARC_Arj,
|
||||||
|
ARC_Sqz }; /* CONFIG.Unpackers[] */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Structures */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
word zone,net,node,point;
|
||||||
|
} Address;
|
||||||
|
|
||||||
|
#define _MAXPATH 56
|
||||||
|
|
||||||
|
typedef struct CONFIGURATION5
|
||||||
|
{
|
||||||
|
word revision;
|
||||||
|
dword flags;
|
||||||
|
word NodeCnt,AreaCnt,unused1;
|
||||||
|
char NetMPath[_MAXPATH],
|
||||||
|
MsgBase[_MAXPATH],
|
||||||
|
InBound[_MAXPATH],
|
||||||
|
OutBound[_MAXPATH],
|
||||||
|
Unpacker[_MAXPATH],
|
||||||
|
LogFile[_MAXPATH],
|
||||||
|
OriginLine[8][_MAXPATH],
|
||||||
|
StatFile[_MAXPATH],
|
||||||
|
SwapPath[_MAXPATH],
|
||||||
|
SemaphorePath[_MAXPATH],
|
||||||
|
BBSConfigPath[_MAXPATH],
|
||||||
|
DBQueuePath[_MAXPATH],
|
||||||
|
unused2[32],
|
||||||
|
RetearTo[40],
|
||||||
|
SecurePath[_MAXPATH],
|
||||||
|
ExtAfter[_MAXPATH-4],
|
||||||
|
ExtBefore[_MAXPATH-4];
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char tag[4];
|
||||||
|
char name[_MAXPATH-2];
|
||||||
|
char list[2]; /* List prefix character */
|
||||||
|
} Packer[8];
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
byte what;
|
||||||
|
char object[31];
|
||||||
|
word conference;
|
||||||
|
} CC[10];
|
||||||
|
byte security,loglevel;
|
||||||
|
short def_days,def_messages;
|
||||||
|
struct /* now obsolete */
|
||||||
|
{
|
||||||
|
Address main;
|
||||||
|
char domain[28];
|
||||||
|
word pointnet;
|
||||||
|
dword flags;
|
||||||
|
} oldakas[11]; /* but still maintained */
|
||||||
|
word autorenum;
|
||||||
|
short def_recvdays;
|
||||||
|
word openQQQs;
|
||||||
|
word compressafter;
|
||||||
|
word msglen;
|
||||||
|
word compressfree;
|
||||||
|
char TempPath[_MAXPATH];
|
||||||
|
byte graphics,BBSSoftware;
|
||||||
|
char AreaFixHelp[_MAXPATH];
|
||||||
|
char Unpackers[9][_MAXPATH];
|
||||||
|
word AreaFixFlags;
|
||||||
|
byte QuietLevel,Buffers;
|
||||||
|
byte FWACnt,GDCnt; /* # of ForwardAreaFix records,
|
||||||
|
# of Group Default records */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
word flags;
|
||||||
|
word days[2];
|
||||||
|
word msgs[2];
|
||||||
|
} rescan_def;
|
||||||
|
dword duperecords;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
byte inb;
|
||||||
|
byte outb;
|
||||||
|
} arcext;
|
||||||
|
word AFixRcptLen;
|
||||||
|
word AkaCnt;
|
||||||
|
word maxPKT;
|
||||||
|
byte sharing,sorting;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char name[36];
|
||||||
|
dword resv;
|
||||||
|
} sysops[11];
|
||||||
|
char AreaFixLog[_MAXPATH];
|
||||||
|
char TempInBound[_MAXPATH];
|
||||||
|
word maxPKTmsgs;
|
||||||
|
word RouteCnt; /* # of PackRoute records */
|
||||||
|
char resv2[822];
|
||||||
|
word MaxAreas,MaxNodes; /* Current max values for this config */
|
||||||
|
word NodeRecSize; /* For internal use only, the 'Node'
|
||||||
|
record will always be written
|
||||||
|
completely while only the currently
|
||||||
|
used size will be held in memory
|
||||||
|
while FE & FESetup is running */
|
||||||
|
dword offset; /* This is the offset from the current
|
||||||
|
file-pointer to the 1st Node */
|
||||||
|
} CONFIG5;
|
||||||
|
|
||||||
|
/* To directly access the 'Nodes' and/or 'Areas' while bypassing the */
|
||||||
|
/* Extensions, perform an absolute (from beginning of file) seek to */
|
||||||
|
/* sizeof(CONFIG) + CONFIG.offset */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Address addr;
|
||||||
|
Address arcdest; /* destination for ARCmail file attaches */
|
||||||
|
byte aka; /* 0 ... MAX_AKAS-1 */
|
||||||
|
byte autopassive; /* # of days */
|
||||||
|
byte newgroup; /* Default group for new areas */
|
||||||
|
byte advflags;
|
||||||
|
word flags;
|
||||||
|
word sec_level;
|
||||||
|
char password[9]; /* .PKT password */
|
||||||
|
char areafixpw[9]; /* AreaFix password */
|
||||||
|
dword groups; /* Bit-field, Byte 0/Bit 7 = 'A' etc. */
|
||||||
|
/* false means group is active */
|
||||||
|
dword resv;
|
||||||
|
byte areas[MAX_AREAS/8]; /* Bit-field with MAX_AREAS bits, Byte 0/Bit 7 */
|
||||||
|
/* is conference 0, etc. */
|
||||||
|
} FeNode5;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[41];
|
||||||
|
byte type;
|
||||||
|
word board;
|
||||||
|
short messages;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
word origin : 3;
|
||||||
|
word group : 5; /* 0 ... MAX_GROUPS-1 */
|
||||||
|
word type : 3;
|
||||||
|
word umlaut : 1;
|
||||||
|
word aka : 4; /* 0 ... MAX_AKAS-1 */
|
||||||
|
} flags;
|
||||||
|
short days;
|
||||||
|
word conference; /* 0 ... MAX_AREAS-1 */
|
||||||
|
word read_sec,write_sec;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
word autoadded : 1;
|
||||||
|
word tinyseen : 1;
|
||||||
|
word cpd : 1;
|
||||||
|
word passive : 1;
|
||||||
|
word keepseen : 1;
|
||||||
|
word mandatory : 1;
|
||||||
|
word keepsysop : 1;
|
||||||
|
word killread : 1;
|
||||||
|
word disablepsv : 1;
|
||||||
|
word resv : 7;
|
||||||
|
} advflags;
|
||||||
|
word seenbys; /* LSB = Aka0, MSB = Aka15 */
|
||||||
|
short recvdays;
|
||||||
|
dword resv1;
|
||||||
|
char path[_MAXPATH];
|
||||||
|
char desc[42];
|
||||||
|
} FeArea5;
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Optional Extensions */
|
||||||
|
/********************************************************/
|
||||||
|
/* These are the variable length extensions between */
|
||||||
|
/* CONFIG and the first Node record. Each extension has */
|
||||||
|
/* a header which contains the info about the type and */
|
||||||
|
/* the length of the extension. You can read the fields */
|
||||||
|
/* using the following algorithm: */
|
||||||
|
/* */
|
||||||
|
/* offset := 0; */
|
||||||
|
/* while (offset<CONFIG.offset) do */
|
||||||
|
/* read_header; */
|
||||||
|
/* if(header.type==EH_abc) then */
|
||||||
|
/* read_and_process_data; */
|
||||||
|
/* else */
|
||||||
|
/* if(header.type==EH_xyz) then */
|
||||||
|
/* read_and_process_data; */
|
||||||
|
/* else */
|
||||||
|
/* [...] */
|
||||||
|
/* else // unknown or unwanted extension found */
|
||||||
|
/* seek_forward(header.offset); // Seek to next header */
|
||||||
|
/* offset = offset + header.offset; */
|
||||||
|
/* end; */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
word type; /* EH_... */
|
||||||
|
dword offset; /* length of field excluding header */
|
||||||
|
} ExtensionHeader;
|
||||||
|
|
||||||
|
|
||||||
|
#define EH_AREAFIX 0x0001 /* CONFIG.FWACnt * <ForwardAreaFix> */
|
||||||
|
|
||||||
|
enum AreaFixSendTo { AreaFix = 0, AreaMgr, AreaLink, EchoMgr };
|
||||||
|
enum AreaFixAreaListFormat { Areas_BBS = 0, Area_List };
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
word nodenr;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
word sendto : 3;
|
||||||
|
word newgroup: 5;
|
||||||
|
word valid : 1;
|
||||||
|
word uncond : 1;
|
||||||
|
word addplus : 1;
|
||||||
|
word addtear : 1;
|
||||||
|
word format : 3;
|
||||||
|
word active : 1;
|
||||||
|
} flags;
|
||||||
|
char file[_MAXPATH];
|
||||||
|
dword groups;
|
||||||
|
word sec_level;
|
||||||
|
char resv[6];
|
||||||
|
} ForwardAreaFix;
|
||||||
|
|
||||||
|
#define EH_GROUPS 0x0002 /* 1 record of <GroupNames> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[MAX_GROUPS][35];
|
||||||
|
} GroupNames;
|
||||||
|
|
||||||
|
#define EH_SYSOPNAMES 0x0003 /* CONFIG.NodeCnt * <SysopNames> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[36];
|
||||||
|
} SysopNames;
|
||||||
|
|
||||||
|
#define EH_GRPDEFAULTS 0x0006 /* CONFIG.GDCnt * <GroupDefaults> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
byte group;
|
||||||
|
FeArea5 area;
|
||||||
|
byte nodes[MAX_NODES/8]; /* MAX_NODES bits */
|
||||||
|
} GroupDefaults;
|
||||||
|
|
||||||
|
#define EH_AKAS 0x0007 /* CONFIG.AkaCnt * <SysAddress> */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Address main;
|
||||||
|
char domain[28];
|
||||||
|
word pointnet;
|
||||||
|
dword flags; /* unused */
|
||||||
|
} SysAddress;
|
||||||
|
|
||||||
|
#define EH_PACKROUTE 0x0009
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Address dest;
|
||||||
|
Address routes[MAX_ROUTE];
|
||||||
|
} PackRoute;
|
||||||
|
|
||||||
|
#define EH_RA111_MSG 0x0100 /* Original records of BBS systems */
|
||||||
|
#define EH_QBBS_MSG 0x0101
|
||||||
|
#define EH_SBBS_MSG 0x0102
|
||||||
|
#define EH_PB122_MSG 0x0103 /* obsolete */
|
||||||
|
#define EH_TAG_MSG 0x0104
|
||||||
|
#define EH_RA200_MSG 0x0105 /* See BBS package's documentation */
|
||||||
|
#define EH_PB200_MSG 0x0106 /* for details */
|
||||||
|
|
||||||
|
/********************************************************/
|
||||||
|
/* Routines to access Node.areas, Node.groups */
|
||||||
|
/********************************************************/
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
word AddBam(byte *bam,word nr)
|
||||||
|
{
|
||||||
|
byte c=(1<<(7-(nr&7))),d;
|
||||||
|
|
||||||
|
d=bam[nr/8]&c;
|
||||||
|
bam[nr/8]|=c;
|
||||||
|
return(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FreeBam(byte *bam,word nr)
|
||||||
|
{
|
||||||
|
bam[nr/8]&=~(1<<(7-(nr&7)));
|
||||||
|
}
|
||||||
|
|
||||||
|
word GetBam(byte *bam,word nr)
|
||||||
|
{
|
||||||
|
if(bam[nr/8]&(1<<(7-(nr&7)))) return(true);
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define IsActive(nr,area) GetBam(Node[nr].areas,area)
|
||||||
|
#define SetActive(nr,area) AddBam(Node[nr].areas,area)
|
||||||
|
#define SetDeActive(nr,area) FreeBam(Node[nr].areas,area)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(GOLD_CANPACK)
|
||||||
|
#pragma pack()
|
||||||
|
#endif
|
||||||
|
|
159
goldlib/gcfg/gxfecho4.cpp
Normal file
159
goldlib/gcfg/gxfecho4.cpp
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// The Goldware Library. Copyright (C) Odinn Sorensen.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// 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 library; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// $Id$
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// Read areas from FastEcho >= 1.10 (config revision level 4)
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <gfilutil.h>
|
||||||
|
#include <gmemdbg.h>
|
||||||
|
#undef GCFG_NOFE
|
||||||
|
#include <gedacfg.h>
|
||||||
|
#include <gs_fech4.h>
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// Read FASTECHO.CFG
|
||||||
|
|
||||||
|
void gareafile::ReadFastecho11x(int fh) {
|
||||||
|
|
||||||
|
AreaCfg aa;
|
||||||
|
|
||||||
|
CONFIG4* cfg = (CONFIG4*)throw_calloc(1, sizeof(CONFIG4));
|
||||||
|
FeArea4* area = (FeArea4*)throw_calloc(1, sizeof(FeArea4));
|
||||||
|
|
||||||
|
// Read main config record
|
||||||
|
read(fh, cfg, sizeof(CONFIG4));
|
||||||
|
|
||||||
|
// Get usernames
|
||||||
|
//for(int u=0; u<11; u++)
|
||||||
|
//CfgUsername(cfg->sysops[u].name);
|
||||||
|
|
||||||
|
// Get Hudson msgbase path
|
||||||
|
if(*hudsonpath == NUL)
|
||||||
|
PathCopy(hudsonpath, MapPath(cfg->MsgBase));
|
||||||
|
|
||||||
|
// Setup aka list
|
||||||
|
SysAddress* aka = (SysAddress*)throw_calloc(cfg->AkaCnt, sizeof(SysAddress));
|
||||||
|
for(int c=0; c<11; c++)
|
||||||
|
aka[c].main = cfg->oldakas[c].main;
|
||||||
|
|
||||||
|
// Process extended headers
|
||||||
|
ulong offset = 0;
|
||||||
|
while(offset < cfg->offset) {
|
||||||
|
ExtensionHeader ehdr;
|
||||||
|
read(fh, &ehdr, sizeof(ExtensionHeader));
|
||||||
|
offset += sizeof(ExtensionHeader);
|
||||||
|
switch(ehdr.type) {
|
||||||
|
case EH_AKAS:
|
||||||
|
read(fh, aka, cfg->AkaCnt*sizeof(SysAddress));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
lseek(fh, ehdr.offset, SEEK_CUR);
|
||||||
|
}
|
||||||
|
offset += ehdr.offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip node records
|
||||||
|
lseek(fh, (long)(cfg->NodeCnt)*(long)sizeof(FeNode4), SEEK_CUR);
|
||||||
|
|
||||||
|
// The *.MSG netmail area
|
||||||
|
aa.reset();
|
||||||
|
aa.aka = CAST(ftn_addr, aka[0].main);
|
||||||
|
aa.type = GMB_NET;
|
||||||
|
aa.attr = attribsnet;
|
||||||
|
aa.msgbase = fidomsgtype;
|
||||||
|
aa.setpath(cfg->NetMPath);
|
||||||
|
aa.setdesc("FastEcho Netmail");
|
||||||
|
aa.setautoid("NETMAIL");
|
||||||
|
AddNewArea(aa);
|
||||||
|
|
||||||
|
// All the echomail areas
|
||||||
|
for(int n=0; n<cfg->AreaCnt; n++) {
|
||||||
|
read(fh, area, sizeof(FeArea4));
|
||||||
|
if(area->board != AREA_DELETED) {
|
||||||
|
aa.reset();
|
||||||
|
aa.aka = CAST(ftn_addr, aka[area->flags.aka].main);
|
||||||
|
switch(area->flags.type) {
|
||||||
|
case QBBS:
|
||||||
|
aa.msgbase = GMB_HUDSON;
|
||||||
|
aa.board = area->board;
|
||||||
|
break;
|
||||||
|
case FIDO:
|
||||||
|
aa.msgbase = fidomsgtype;
|
||||||
|
aa.setpath(area->path);
|
||||||
|
break;
|
||||||
|
case SQUISH:
|
||||||
|
aa.msgbase = GMB_SQUISH;
|
||||||
|
aa.setpath(area->path);
|
||||||
|
break;
|
||||||
|
case JAM:
|
||||||
|
aa.msgbase = GMB_JAM;
|
||||||
|
aa.setpath(area->path);
|
||||||
|
break;
|
||||||
|
case PT_BOARD:
|
||||||
|
default:
|
||||||
|
// Passthrough or unknown
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(area->type) {
|
||||||
|
case AREA_ECHOMAIL:
|
||||||
|
aa.type = GMB_ECHO;
|
||||||
|
aa.attr = attribsecho;
|
||||||
|
break;
|
||||||
|
case AREA_NETMAIL:
|
||||||
|
aa.type = GMB_NET;
|
||||||
|
aa.attr = attribsnet;
|
||||||
|
break;
|
||||||
|
case AREA_LOCAL:
|
||||||
|
aa.type = GMB_LOCAL;
|
||||||
|
aa.attr = attribslocal;
|
||||||
|
break;
|
||||||
|
case AREA_BADMAILBOARD:
|
||||||
|
aa.type = GMB_ECHO;
|
||||||
|
aa.attr = attribsecho;
|
||||||
|
break;
|
||||||
|
case AREA_DUPEBOARD:
|
||||||
|
aa.type = GMB_ECHO;
|
||||||
|
aa.attr = attribsecho;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Unknown type
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
|
aa.setdesc(area->desc);
|
||||||
|
aa.setechoid(area->name);
|
||||||
|
aa.setorigin(cfg->OriginLine[area->flags.origin]);
|
||||||
|
aa.groupid = (char)('A' + area->flags.group);
|
||||||
|
AddNewArea(aa);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw_free(aka);
|
||||||
|
throw_free(area);
|
||||||
|
throw_free(cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
159
goldlib/gcfg/gxfecho5.cpp
Normal file
159
goldlib/gcfg/gxfecho5.cpp
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// The Goldware Library. Copyright (C) Odinn Sorensen.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// 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 library; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// $Id$
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// Read areas from FastEcho 1.41 (config revision level 5)
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <gfilutil.h>
|
||||||
|
#include <gmemdbg.h>
|
||||||
|
#undef GCFG_NOFE
|
||||||
|
#include <gedacfg.h>
|
||||||
|
#include <gs_fech5.h>
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// Read FASTECHO.CFG
|
||||||
|
|
||||||
|
void gareafile::ReadFastecho141(int fh) {
|
||||||
|
|
||||||
|
AreaCfg aa;
|
||||||
|
|
||||||
|
CONFIG5* cfg = (CONFIG5*)throw_calloc(1, sizeof(CONFIG5));
|
||||||
|
FeArea5* area = (FeArea5*)throw_calloc(1, sizeof(FeArea5));
|
||||||
|
|
||||||
|
// Read main config record
|
||||||
|
read(fh, cfg, sizeof(CONFIG5));
|
||||||
|
|
||||||
|
// Get usernames
|
||||||
|
//for(int u=0; u<11; u++)
|
||||||
|
//CfgUsername(cfg->sysops[u].name);
|
||||||
|
|
||||||
|
// Get Hudson msgbase path
|
||||||
|
if(*hudsonpath == NUL)
|
||||||
|
PathCopy(hudsonpath, MapPath(cfg->MsgBase));
|
||||||
|
|
||||||
|
// Setup aka list
|
||||||
|
SysAddress* aka = (SysAddress*)throw_calloc(cfg->AkaCnt, sizeof(SysAddress));
|
||||||
|
for(int c=0; c<11; c++)
|
||||||
|
aka[c].main = cfg->oldakas[c].main;
|
||||||
|
|
||||||
|
// Process extended headers
|
||||||
|
ulong offset = 0;
|
||||||
|
while(offset < cfg->offset) {
|
||||||
|
ExtensionHeader ehdr;
|
||||||
|
read(fh, &ehdr, sizeof(ExtensionHeader));
|
||||||
|
offset += sizeof(ExtensionHeader);
|
||||||
|
switch(ehdr.type) {
|
||||||
|
case EH_AKAS:
|
||||||
|
read(fh, aka, cfg->AkaCnt*sizeof(SysAddress));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
lseek(fh, ehdr.offset, SEEK_CUR);
|
||||||
|
}
|
||||||
|
offset += ehdr.offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip node records
|
||||||
|
lseek(fh, (long)(cfg->NodeCnt)*(long)sizeof(FeNode5), SEEK_CUR);
|
||||||
|
|
||||||
|
// The *.MSG netmail area
|
||||||
|
aa.reset();
|
||||||
|
aa.aka = CAST(ftn_addr, aka[0].main);
|
||||||
|
aa.type = GMB_NET;
|
||||||
|
aa.attr = attribsnet;
|
||||||
|
aa.msgbase = fidomsgtype;
|
||||||
|
aa.setpath(cfg->NetMPath);
|
||||||
|
aa.setdesc("FastEcho Netmail");
|
||||||
|
aa.setautoid("NETMAIL");
|
||||||
|
AddNewArea(aa);
|
||||||
|
|
||||||
|
// All the echomail areas
|
||||||
|
for(int n=0; n<cfg->AreaCnt; n++) {
|
||||||
|
read(fh, area, sizeof(FeArea5));
|
||||||
|
if(area->board != AREA_DELETED) {
|
||||||
|
aa.reset();
|
||||||
|
aa.aka = CAST(ftn_addr, aka[area->flags.aka].main);
|
||||||
|
switch(area->flags.type) {
|
||||||
|
case QBBS:
|
||||||
|
aa.msgbase = GMB_HUDSON;
|
||||||
|
aa.board = area->board;
|
||||||
|
break;
|
||||||
|
case FIDO:
|
||||||
|
aa.msgbase = fidomsgtype;
|
||||||
|
aa.setpath(area->path);
|
||||||
|
break;
|
||||||
|
case SQUISH:
|
||||||
|
aa.msgbase = GMB_SQUISH;
|
||||||
|
aa.setpath(area->path);
|
||||||
|
break;
|
||||||
|
case JAM:
|
||||||
|
aa.msgbase = GMB_JAM;
|
||||||
|
aa.setpath(area->path);
|
||||||
|
break;
|
||||||
|
case PT_BOARD:
|
||||||
|
default:
|
||||||
|
// Passthrough or unknown
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(area->type) {
|
||||||
|
case AREA_ECHOMAIL:
|
||||||
|
aa.type = GMB_ECHO;
|
||||||
|
aa.attr = attribsecho;
|
||||||
|
break;
|
||||||
|
case AREA_NETMAIL:
|
||||||
|
aa.type = GMB_NET;
|
||||||
|
aa.attr = attribsnet;
|
||||||
|
break;
|
||||||
|
case AREA_LOCAL:
|
||||||
|
aa.type = GMB_LOCAL;
|
||||||
|
aa.attr = attribslocal;
|
||||||
|
break;
|
||||||
|
case AREA_BADMAILBOARD:
|
||||||
|
aa.type = GMB_ECHO;
|
||||||
|
aa.attr = attribsecho;
|
||||||
|
break;
|
||||||
|
case AREA_DUPEBOARD:
|
||||||
|
aa.type = GMB_ECHO;
|
||||||
|
aa.attr = attribsecho;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Unknown type
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
|
aa.setdesc(area->desc);
|
||||||
|
aa.setechoid(area->name);
|
||||||
|
aa.setorigin(cfg->OriginLine[area->flags.origin]);
|
||||||
|
aa.groupid = (char)('A' + area->flags.group);
|
||||||
|
AddNewArea(aa);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw_free(aka);
|
||||||
|
throw_free(area);
|
||||||
|
throw_free(cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
@ -200,7 +200,11 @@ void gareafile::ReadFastecho(char* tag) {
|
|||||||
read(fh, &revision, sizeof(revision));
|
read(fh, &revision, sizeof(revision));
|
||||||
lseek(fh, 0L, SEEK_SET); // rewind
|
lseek(fh, 0L, SEEK_SET); // rewind
|
||||||
|
|
||||||
if(revision == 6)
|
if(revision == 4)
|
||||||
|
ReadFastecho11x(fh);
|
||||||
|
else if(revision == 5)
|
||||||
|
ReadFastecho141(fh);
|
||||||
|
else if(revision == 6)
|
||||||
ReadFastecho142(fh);
|
ReadFastecho142(fh);
|
||||||
else
|
else
|
||||||
cout << "* Error: FastEcho system file revision level " << revision << " is not supported - Skipping." << endl;
|
cout << "* Error: FastEcho system file revision level " << revision << " is not supported - Skipping." << endl;
|
||||||
|
Reference in New Issue
Block a user