// 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 Opus 1.1x/1.7x // ------------------------------------------------------------------ #include #include #include #include #include #include #if defined(__GOLD_GUI__) #include #include #endif #undef GCFG_NOOPUS #include #undef _NORMAL #include // Structures for Opus 1.1x SYSTEM??.DAT // ------------------------------------------------------------------ // Read Opus void gareafile::ReadOpus(char* tag) { FILE* fp; AreaCfg aa; char* ptr; _msgsys msgsys; _systemdat sysdat; Path oppath, file; char buf[256], options[80]; *oppath = NUL; strcpy(options, tag); ptr = strtok(tag, " \t"); while(ptr) { if(*ptr != '-') { AddBackslash(strcpy(oppath, ptr)); break; } ptr = strtok(NULL, " \t"); } if(*oppath == NUL) { ptr = getenv("OPUS"); if(ptr) AddBackslash(strcpy(oppath, ptr)); } if(*oppath == NUL) strcpy(oppath, areapath); MakePathname(file, oppath, "sysmsg.dat"); if(fexist(file)) { // Found Opus 1.7x config files fp = fsopen(file, "rb", sharemode); if (fp) { setvbuf(fp, NULL, _IOFBF, 8192); if (not quiet) STD_PRINT("* Reading " << file << std::endl); while(fread(&msgsys, sizeof(_msgsys), 1, fp) == 1) { aa.reset(); memset(buf, 0, sizeof(buf)); fread(buf, msgsys.Path_Len, 1, fp); aa.setpath(buf); memset(buf, 0, sizeof(buf)); fread(buf, msgsys.Title_Len, 1, fp); aa.setdesc(buf); fread(buf, msgsys.Barricade_Len, 1, fp); memset(buf, 0, sizeof(buf)); fread(buf, msgsys.Origin_Len, 1, fp); aa.setorigin(buf); fseek(fp, (long)msgsys.Domain_Len, SEEK_CUR); fseek(fp, (long)msgsys.Menu_Len, SEEK_CUR); fseek(fp, (long)msgsys.Vol_Len, SEEK_CUR); fseek(fp, (long)msgsys.Help_Len, SEEK_CUR); fseek(fp, (long)msgsys.Scan_Len*(long)sizeof(struct _ascan), SEEK_CUR); fseek(fp, (long)msgsys.Other_Len, SEEK_CUR); aa.basetype = fidomsgtype; aa.type = ((msgsys.Attrib & SYSMAIL) ? GMB_NET : (msgsys.Attrib & _ECHOMAIL) ? GMB_ECHO : GMB_LOCAL); aa.attr = ((msgsys.Attrib & SYSMAIL) ? attribsnet : (msgsys.Attrib & _ECHOMAIL) ? attribsecho : attribslocal); aa.setechoid(*msgsys.Echo_Name ? msgsys.Echo_Name : msgsys.Area_Name); if(msgsys.Net) { aa.aka.zone = msgsys.Zone; aa.aka.net = msgsys.Net; aa.aka.node = msgsys.Node; aa.aka.point = msgsys.Point; } AddNewArea(aa); } fclose(fp); } } else { // Try for the old 1.1x files gposixdir d(oppath); const gdirentry *de; if(d.ok) { while((de = d.nextentry("system*.dat", true)) != NULL) { MakePathname(file, oppath, de->name.c_str()); fp = fsopen(file, "rb", sharemode); if (fp) { setvbuf(fp, NULL, _IOFBF, 8192); if (not quiet) STD_PRINT("* Reading " << file << std::endl); fread(&sysdat, sizeof(_systemdat), 1, fp); if(*sysdat.msgpath and *sysdat.msgtitle) { aa.reset(); aa.basetype = fidomsgtype; aa.setpath(sysdat.msgpath); aa.setdesc(sysdat.msgtitle); aa.setechoid(sysdat.EchoName); aa.type = ((sysdat.attrib & SYSMAIL) ? GMB_NET : (sysdat.attrib & _ECHOMAIL) ? GMB_ECHO : GMB_LOCAL); aa.attr = ((sysdat.attrib & SYSMAIL) ? attribsnet : (sysdat.attrib & _ECHOMAIL) ? attribsecho : attribslocal); AddNewArea(aa); } fclose(fp); } } } } } // ------------------------------------------------------------------