static bool insert_net(const Config& config, Networks& networks, int nn) { wwiv::sdk::Subs subs(syscfg.datadir, networks.networks()); if (!subs.Load()) { return false; } if (subs.subs().empty()) { return false; } for (size_t i = 0; i < subs.subs().size(); i++) { size_t i2 = 0; for (i2 = 0; i2 < i; i2++) { if (subs.sub(i).filename == subs.sub(i2).filename) { break; } } if (i2 >= i) { iscan1(i, subs); open_sub(true); for (int i1 = 1; i1 <= GetNumMessagesInCurrentMessageArea(); i1++) { postrec* p = get_post(i1); if (p->status & status_post_new_net) { if (p->network.network_msg.net_number >= nn) { p->network.network_msg.net_number++; write_post(i1, p); } } } close_sub(); } } // same as del_net, don't think we need to do this here. // wwiv::sdk::write_subs(syscfg.datadir, subboards); File emailfile(syscfg.datadir, EMAIL_DAT); if (emailfile.Open(File::modeBinary|File::modeReadWrite)) { auto t = emailfile.GetLength() / sizeof(mailrec); for (size_t r = 0; r < t; r++) { mailrec m; emailfile.Seek(sizeof(mailrec) * r, File::Whence::begin); emailfile.Read(&m, sizeof(mailrec)); if (((m.tosys != 0) || (m.touser != 0)) && m.fromsys) { if (strlen(m.title) >= WWIV_MESSAGE_TITLE_LENGTH) { // always trim to WWIV_MESSAGE_TITLE_LENGTH now. m.title[71] = 0; } m.status |= status_new_net; if (m.status & status_source_verified) { if (m.network.src_verified_msg.net_number >= nn) { m.network.src_verified_msg.net_number++; } } else { if (m.network.network_msg.net_number >= nn) { m.network.network_msg.net_number++; } } emailfile.Seek(sizeof(mailrec) * r, File::Whence::begin); emailfile.Write(&m, sizeof(mailrec)); } } } unique_ptr<char[]> u(new char[syscfg.userreclen]); read_user(1, reinterpret_cast<userrec*>(u.get())); int nu = number_userrecs(); for (int i = 1; i <= nu; i++) { read_user(i, reinterpret_cast<userrec*>(u.get())); if (UINT(u.get(), syscfg.fsoffset)) { if (UCHAR(u.get(), syscfg.fnoffset) >= nn) { UCHAR(u.get(), syscfg.fnoffset)++; write_user(i, reinterpret_cast<userrec*>(u.get())); } } } { net_networks_rec n{}; strcpy(n.name, "NetNet"); n.dir = StrCat("newnet.dir", File::pathSeparatorChar); networks.insert(nn, n); } edit_net(config, networks, nn); return true; }