// This may look like C code, but it is really -*- C++ -*- // ------------------------------------------------------------------ // The Goldware Library // Copyright (C) 1990-1999 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 program; if not, write to the Free // Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, // MA 02111-1307, USA // ------------------------------------------------------------------ // $Id$ // ------------------------------------------------------------------ // Read areas from D'Bridge // ------------------------------------------------------------------ #include #include #include #if defined(__GOLD_GUI__) #include #include #endif #undef GCFG_NODB #include #include // ------------------------------------------------------------------ // Read D'Bridge 1.30 void gareafile::ReadDB130(char* /*tag*/, char* dbpath) { AreaCfg aa; DB130_AA1 AA1; DB130_AA2 AA2; Path file1, file2; MakePathname(file1, dbpath, "dbridge.aa1"); MakePathname(file2, dbpath, "dbridge.aa2"); gfile fp1(file1, "rb", sharemode); if (fp1.isopen()) { fp1.SetvBuf(NULL, _IOFBF, 8192); if (not quiet) STD_PRINTNL("* Reading " << file1); gfile fp2(file2, "rb", sharemode); if (fp2.isopen()) { fp2.SetvBuf(NULL, _IOFBF, 8192); if (not quiet) STD_PRINTNL("* Reading " << file2); while (fp1.Fread(&AA1, sizeof(DB130_AA1))) { fp2.Fread(&AA2, sizeof(DB130_AA2)); if (AA1.allocated and strchr("QFqf", AA2.msgbase)) { aa.reset(); switch(g_toupper(AA2.msgbase)) { case 'Q': aa.basetype = "HUDSON"; aa.board = AA2.board; break; case 'F': aa.basetype = fidomsgtype; aa.setpath(STRNP2C(AA2.path)); break; } switch(g_toupper(AA2.kind)) { case 'N': aa.type = GMB_NET; aa.attr = attribsnet; break; case 'E': aa.type = GMB_ECHO; aa.attr = attribsecho; break; default: aa.type = GMB_LOCAL; aa.attr = attribslocal; } STRNP2C(AA2.origin); aa.setorigin(AA2.origin); aa.attr.pvt(AA2.ispvt); aa.groupid = (char)AA2.group; aa.setechoid(STRNP2C(AA1.echoid)); aa.setdesc(STRNP2C(AA2.desc)); aa.aka = AA2.addr; AddNewArea(aa); } } } } } // ------------------------------------------------------------------ // Read D'Bridge B1046 void gareafile::ReadDB1046(char* file, char* /*tag*/) { AreaCfg aa; DB1046_ADF* ADF = (DB1046_ADF*)throw_calloc(1, sizeof(DB1046_ADF)); gfile fp(file, "rb", sharemode); if (fp.isopen()) { fp.SetvBuf(NULL, _IOFBF, 8192); if (not quiet) STD_PRINTNL("* Reading " << file); while (fp.Fread(ADF, sizeof(DB1046_ADF))) { if(ADF->allocated and strchr("QFqf", ADF->msgbase)) { aa.reset(); switch(g_toupper(ADF->msgbase)) { case 'Q': aa.basetype = "HUDSON"; aa.board = ADF->board; break; case 'F': aa.basetype = fidomsgtype; aa.setpath(STRNP2C(ADF->path)); break; } switch(g_toupper(ADF->kind)) { case 'N': aa.type = GMB_NET; aa.attr = attribsnet; break; case 'E': aa.type = GMB_ECHO; aa.attr = attribsecho; break; default: aa.type = GMB_LOCAL; aa.attr = attribslocal; } STRNP2C(ADF->origin); aa.setorigin(ADF->origin); aa.attr.pvt(ADF->ispvt); aa.groupid = (char)ADF->group; aa.setechoid(STRNP2C(ADF->echoid)); aa.setdesc(STRNP2C(ADF->desc)); aa.aka = ADF->addr; AddNewArea(aa); } } } throw_free(ADF); } // ------------------------------------------------------------------ // Read D'Bridge B1047.A22 and B1047.A27+ void gareafile::ReadDB1047A22(char* file, int reclen, char* /*tag*/) { AreaCfg aa; DB1047A22_ADF* ADF = (DB1047A22_ADF *)throw_malloc(reclen); if (ADF) { gfile fp(file, "rb", sharemode); if (fp.isopen()) { fp.SetvBuf(NULL, _IOFBF, 8192); if (not quiet) STD_PRINTNL("* Reading " << file); while (fp.Fread(ADF, reclen)) { if (ADF->allocated and strchr("QFqf", ADF->msgbase)) { aa.reset(); switch(g_toupper(ADF->msgbase)) { case 'Q': aa.basetype = "HUDSON"; aa.board = ADF->board; break; case 'F': aa.basetype = fidomsgtype; aa.setpath(STRNP2C(ADF->path)); break; } switch(g_toupper(ADF->kind)) { case 'N': aa.type = GMB_NET; aa.attr = attribsnet; break; case 'E': aa.type = GMB_ECHO; aa.attr = attribsecho; break; default: aa.type = GMB_LOCAL; aa.attr = attribslocal; } STRNP2C(ADF->origin); aa.setorigin(ADF->origin); aa.attr.pvt(ADF->ispvt); aa.groupid = (char)ADF->group; aa.setechoid(STRNP2C(ADF->echoid)); aa.setdesc(STRNP2C(ADF->desc)); aa.aka = ADF->addr; AddNewArea(aa); } } } throw_free(ADF); } } // ------------------------------------------------------------------ // Read D'Bridge B2011 void gareafile::ReadDB2011(char* file, int reclen, char* /*tag*/) { AreaCfg aa; DB2011_ADF* ADF = (DB2011_ADF *)throw_malloc(reclen); if (ADF) { gfile fp(file, "rb", sharemode); if (fp.isopen()) { fp.SetvBuf(NULL, _IOFBF, 8192); if (not quiet) STD_PRINTNL("* Reading " << file); while (fp.Fread(ADF, reclen)) { if (ADF->allocated and strchr("QFqf", ADF->msgbase)) { aa.reset(); switch(g_toupper(ADF->msgbase)) { case 'Q': if(ADF->board < 1 or ADF->board > 200) continue; // Bad area number aa.basetype = "HUDSON"; aa.board = ADF->board; break; case 'F': aa.basetype = fidomsgtype; aa.setpath(STRNP2C(ADF->path)); break; } switch(g_toupper(ADF->kind)) { case 'N': aa.type = GMB_NET; aa.attr = attribsnet; break; case 'E': aa.type = GMB_ECHO; aa.attr = attribsecho; break; default: aa.type = GMB_LOCAL; aa.attr = attribslocal; } STRNP2C(ADF->origin); aa.setorigin(ADF->origin); aa.attr.pvt(ADF->ispvt); aa.groupid = (char)ADF->group; aa.setechoid(STRNP2C(ADF->echoid)); aa.setdesc(STRNP2C(ADF->desc)); aa.aka = ADF->addr; AddNewArea(aa); } } } throw_free(ADF); } } // ------------------------------------------------------------------ // Read D'Bridge areas, various versions... void gareafile::ReadDBridge(char* tag) { AreaCfg aa; char* ptr; int line; char buf[256], type, options[80]; Path dbpath, file, badecho, netpath; *dbpath = NUL; strcpy(options, tag); ptr = strtok(tag, " \t"); while(ptr) { if(*ptr != '-') { AddBackslash(strcpy(dbpath, ptr)); break; } ptr = strtok(NULL, " \t"); } if(*dbpath == NUL) { ptr = getenv("DBRIDGE"); if(ptr == NULL) ptr = getenv("DB"); if(ptr) AddBackslash(strcpy(dbpath, ptr)); } if(*dbpath == NUL) strcpy(dbpath, areapath); MakePathname(file, dbpath, "dbridge.prm"); gfile fp(file, "rt", sharemode); if (fp.isopen()) { if (not quiet) STD_PRINTNL("* Reading " << file); // Read netmail storage method etc for (line = 1; line <= 2; line++) fp.Fgets(buf, 255); type = (char)g_toupper(*buf); // Fido-style netmail path line++; fp.Fgets(buf, 255); strtrim(buf); strcpy(netpath, buf); // BADECHO area for(; line <= 8; line++) fp.Fgets(buf, 255); strtrim(buf); strcpy(badecho, buf); // Hudson path for(; line <= 11; line++) fp.Fgets(buf, 255); strtrim(buf); CfgHudsonpath(buf); // Primary address for(; line <= 15; line++) fp.Fgets(buf, 255); strtrim(buf); CfgAddress(buf); // Username for(; line <= 17; line++) fp.Fgets(buf, 255); strtrim(buf); //CfgUsername(buf); // Hudson netmail board for(; line <= 20; line++) // NOTE: was 17 in older versions fp.Fgets(buf, 255); // Address/misc field if(type == 'F' or type == 'Q') { aa.reset(); aa.type = GMB_NET; aa.attr = attribsnet; if(type == 'F') { aa.basetype = fidomsgtype; aa.setpath(strbtrim(netpath)); } else if(type == 'Q') { strtrim(buf); aa.basetype = "HUDSON"; aa.board = atoi(buf+50); } aa.setdesc("D'Bridge Netmail"); aa.setautoid("NETMAIL"); AddNewArea(aa); } strbtrim(badecho); if(*badecho) { aa.reset(); aa.basetype = fidomsgtype; aa.type = GMB_ECHO; aa.attr = attribsecho; aa.setpath(badecho); aa.setdesc("D'Bridge Bad Messages"); aa.setautoid("ECHO_BAD"); AddNewArea(aa); } fp.Fclose(); } // Read the areafile from the correct version MakePathname(file, dbpath, "dbridge.adf"); if(fexist(file)) { long size = GetFilesize(file); if(size != -1L) { if(striinc("-2011", options)) ReadDB2011(file, sizeof(DB2011_ADF), options); else if(striinc("-1047A27", options)) ReadDB1047A22(file, sizeof(DB1047A27_ADF), options); else if(striinc("-1047A22", options)) ReadDB1047A22(file, sizeof(DB1047A22_ADF), options); else if(striinc("-1046", options)) ReadDB1046(file, options); else if((size % sizeof(DB2011_ADF)) == 0) ReadDB2011(file, sizeof(DB2011_ADF), options); else if((size % sizeof(DB1047A27_ADF)) == 0) ReadDB1047A22(file, sizeof(DB1047A27_ADF), options); else if((size % sizeof(DB1047A22_ADF)) == 0) ReadDB1047A22(file, sizeof(DB1047A22_ADF), options); else if((size % sizeof(DB1046_ADF)) == 0) ReadDB1046(file, options); } } else if(fexist(AddPath(dbpath, "DBRIDGE.AA1"))) { ReadDB130(options, dbpath); } } // ------------------------------------------------------------------