Exemple #1
0
const string GetCommand(const MenuInstanceData* menu_data) {
  if (pSecondUserRec->cHotKeys == HOTKEYS_ON) {
    if (menu_data->header.nNumbers == MENU_NUMFLAG_DIRNUMBER) {
      write_inst(INST_LOC_XFER, udir[session()->GetCurrentFileArea()].subnum, INST_FLAGS_NONE);
      return string(mmkey(1, WSession::mmkeyFileAreas));
    } else if (menu_data->header.nNumbers == MENU_NUMFLAG_SUBNUMBER) {
      write_inst(INST_LOC_MAIN, usub[session()->GetCurrentMessageArea()].subnum, INST_FLAGS_NONE);
      return string(mmkey(0, WSession::mmkeyMessageAreas));
    } else {
      odc[0] = '/';
      odc[1] = '\0';
      return string(mmkey(2));
    }
  } else {
    string text;
    input(&text, 50);
    return string(text);
  }
}
Exemple #2
0
void do_chains() {
  int *map = static_cast<int*>(BbsAllocA(GetSession()->max_chains * sizeof(int)));
  WWIV_ASSERT(map != NULL);
  if (!map) {
    return;
  }

  GetSession()->localIO()->tleft(true);
  int mapp = 0;
  memset(odc, 0, sizeof(odc));
  for (int i = 0; i < GetSession()->GetNumberOfChains(); i++) {
    bool ok = true;
    chainfilerec c = chains[i];
    if ((c.ansir & ansir_ansi) && !okansi()) {
      ok = false;
    }
    if ((c.ansir & ansir_local_only) && GetSession()->using_modem) {
      ok = false;
    }
    if (c.sl > GetSession()->GetEffectiveSl()) {
      ok = false;
    }
    if (c.ar && !GetSession()->GetCurrentUser()->HasArFlag(c.ar)) {
      ok = false;
    }
    if (GetApplication()->HasConfigFlag(OP_FLAGS_CHAIN_REG) && chains_reg && (GetSession()->GetEffectiveSl() < 255)) {
      chainregrec r = chains_reg[ i ];
      if (r.maxage) {
        if (r.minage > GetSession()->GetCurrentUser()->GetAge() || r.maxage < GetSession()->GetCurrentUser()->GetAge()) {
          ok = false;
        }
      }
    }
    if (ok) {
      map[ mapp++ ] = i;
      if (mapp < 100) {
        if ((mapp % 10) == 0) {
          odc[mapp / 10 - 1] = static_cast< char >('0' + (mapp / 10));
        }
      }
    }
  }
  if (mapp == 0) {
    GetSession()->bout << "\r\n\n|#5Sorry, no external programs available.\r\n";
    free(map);
    GetSession()->SetMMKeyArea(WSession::mmkeyMessageAreas);
    return;
  }
  show_chains(&mapp, map);

  bool done   = false;
  GetSession()->SetMMKeyArea(WSession::mmkeyMessageAreas);
  int start   = 0;
  char *ss    = NULL;

  do {
    GetSession()->SetMMKeyArea(WSession::mmkeyChains);
    GetSession()->localIO()->tleft(true);
    GetSession()->bout.NewLine();
    GetSession()->bout << "|#7Which chain (1-" << mapp << ", Q=Quit, ?=List): ";

    int nChainNumber = -1;
    if (mapp < 100) {
      ss = mmkey(2);
      nChainNumber = atoi(ss);
    } else {
      char szChainNumber[ 11 ];
      input(szChainNumber, 3);
      nChainNumber = atoi(szChainNumber);
    }
    if (nChainNumber > 0 && nChainNumber <= mapp) {
      done = true;
      GetSession()->SetMMKeyArea(WSession::mmkeyChains);
      GetSession()->bout << "\r\n|#6Please wait...\r\n";
      run_chain(map[ nChainNumber - 1 ]);
    } else if (wwiv::strings::IsEquals(ss, "Q")) {
      GetSession()->SetMMKeyArea(WSession::mmkeyMessageAreas);
      done = true;
    } else if (wwiv::strings::IsEquals(ss, "?")) {
      show_chains(&mapp, map);
    } else if (wwiv::strings::IsEquals(ss, "P")) {
      if (start > 0) {
        start -= 14;
      }
      start = std::max<int>(start, 0);
    } else if (wwiv::strings::IsEquals(ss, "N")) {
      if (start + 14 < mapp) {
        start += 14;
      }
    }
  } while (!hangup  && !done);

  free(map);
}
Exemple #3
0
/** Displays the available file areas for the current user. */
void dirlist(int mode) {
  bool next   = false;
  int oc      = session()->GetCurrentConferenceFileArea();
  int os      = udir[session()->GetCurrentFileArea()].subnum;
  int tally   = 0;
  int nd      = 0;
  int sn      = session()->GetCurrentConferenceFileArea();
  int en      = session()->GetCurrentConferenceFileArea();
  bool done   = false;

  do {
    bool is = false;
    bool abort = false;
    int p = 1;
    int i = sn;
    char *ss = nullptr;

    while (i <= en && uconfdir[i].confnum != -1 && !abort) {
      size_t i1 = 0;
      while (i1 < session()->directories.size() && udir[i1].subnum != -1 && !abort) {
        char s[255];
        size_t firstp = 0;
        if (p && mode == 0) {
          p = 0;
          firstp = i1;
          bout.cls();
          if (uconfdir[1].confnum != -1 && okconf(session()->user())) {
            sprintf(s, " [ %s %c ] [ %s ] ", "Conference",
                    dirconfs[uconfdir[i].confnum].designator,
                    stripcolors(reinterpret_cast<char*>(dirconfs[uconfdir[i].confnum].name)));
          } else {
            sprintf(s, " [ %s File Areas ] ", syscfg.systemname);
          }
          bout.litebar(s);
          DisplayHorizontalBar(78, 7);
          bout << "|#2 Dir Qscan?     Directory Name                          Total Files\r\n";
          DisplayHorizontalBar(78, 7);
        }
        ++nd;
        int directory_number = udir[i1].subnum;
        if (directory_number == 0) {
          is = true;
        }
        std::string scanme = "|#6No ";
        if (qsc_n[ directory_number / 32 ] & (1L << (directory_number % 32))) {
          scanme = "|#5Yes";
        }
        dliscan1(directory_number);
        if (udir[session()->GetCurrentFileArea()].subnum == udir[i1].subnum) {
          sprintf(s, " |#9%3s |#9\xB3 |#6%3s |#9\xB3|B1|15 %-40.40s |#9\xB3 |#9%4d|B0",
                  udir[i1].keys, scanme.c_str(), session()->directories[directory_number].name,
                  session()->numf);
        } else {
          sprintf(s, " |#9%3s |#9\xB3 |#6%3s |#9\xB3 %s%-40.40s |#9\xB3 |#9%4d",
                  udir[i1].keys, scanme.c_str(),
                  (((mode == 1) && (session()->directories[udir[i1].subnum].mask & mask_cdrom)) ? "|#9" : "|#1"),
                  session()->directories[ directory_number ].name, session()->numf);
        }
        if (okansi()) {
          osan(s, &abort, &next);
        } else {
          osan(stripcolors(s), &abort, &next);
        }
        tally += session()->numf;
        int lastp = i1++;
        bout.nl();
        if (lines_listed >= session()->screenlinest - 2 && mode == 0) {
          p = 1;
          lines_listed = 0;
          DisplayHorizontalBar(78, 7);
          bout.bprintf("|#1Select |#9[|#2%d-%d, [Enter]=Next Page, Q=Quit|#9]|#0 : ",
                                            is ? firstp : firstp + 1, lastp);
          ss = mmkey(1, WSession::mmkeyFileAreas, true);
          if (isdigit(ss[0])) {
            for (size_t i3 = 0; i3 < session()->directories.size(); i3++) {
              if (wwiv::strings::IsEquals(udir[i3].keys, ss)) {
                session()->SetCurrentFileArea(i3);
                os      = udir[session()->GetCurrentFileArea()].subnum;
                done    = true;
                abort   = true;
              }
            }
          } else {
            switch (ss[0]) {
            case 'Q':
              if (okconf(session()->user())) {
                setuconf(ConferenceType::CONF_DIRS, oc, os);
              }
              done    = true;
              abort   = true;
              break;
            default:
              bout.backline();
              break;
            }
          }
        }
      }
      if (nd) {
        i++;
      }
      if (!okconf(session()->user())) {
        break;
      }
    }
    if (i == 0) {
      pla("None.", &abort);
      bout.nl();
    }
    if (!abort && mode == 0) {
      p = 1;
      DisplayHorizontalBar(78, 7);
      if (okconf(session()->user())) {
        if (uconfdir[1].confnum != -1) {
          bout.bprintf("|#1Select |#9[|#2%d-%d, J=Join Conference, ?=List Again, Q=Quit|#9]|#0 : ",
                                            is ? 0 : 1, is ? nd - 1 : nd);
        } else {
          bout.bprintf("|#1Select |#9[|#2%d-%d, ?=List Again, Q=Quit|#9]|#0 : ", is ? 0 : 1,
                                            is ? nd - 1 : nd);
        }
      } else {
        bout.bprintf("|#1Select |#9[|#2%d-%d, ?=List Again, Q=Quit|#9]|#0 : ", is ? 0 : 1,
                                          is ? nd - 1 : nd);
      }
      ss = mmkey(0, true);
      if (wwiv::strings::IsEquals(ss, "") ||
          wwiv::strings::IsEquals(ss, "Q") ||
          wwiv::strings::IsEquals(ss, "\r")) {
        if (okconf(session()->user())) {
          setuconf(ConferenceType::CONF_DIRS, oc, os);
        }
        done = true;
      }
      if (wwiv::strings::IsEquals(ss, "J")) {
        if (okconf(session()->user())) {
          jump_conf(ConferenceType::CONF_DIRS);
        }
        sn = en = oc = session()->GetCurrentConferenceFileArea();
        nd = i = 0;
        is = false;
      }
      if (isdigit(ss[0])) {
        for (size_t i3 = 0; i3 < session()->directories.size(); i3++) {
          if (wwiv::strings::IsEquals(udir[i3].keys, ss)) {
            session()->SetCurrentFileArea(i3);
            os = udir[session()->GetCurrentFileArea()].subnum;
            done = true;
          }
        }
      }
      nd = 0;
    } else {
      if (okconf(session()->user())) {
        setuconf(ConferenceType::CONF_DIRS, oc, os);
      }
      done = true;
    }
  } while (!hangup && !done);
}
Exemple #4
0
/**
 * Finds GetSession()->usernum and system number from emailAddress, sets network number as
 * appropriate.
 * @param emailAddress The text of the email address.
 * @param pUserNumber OUT The User Number
 * @param pSystemmNumber OUT The System Number
 */
void parse_email_info(const std::string emailAddress, int *pUserNumber, int *pSystemNumber) {
  char *ss1, onx[20], ch, *mmk;
  unsigned nUserNumber, nSystemNumber;
  int i, nv, on, xx, onxi, odci;
  net_system_list_rec *csne;

  char szEmailAddress[ 255 ];
  strcpy(szEmailAddress, emailAddress.c_str());

  *pUserNumber = 0;
  *pSystemNumber = 0;
  net_email_name[0] = '\0';
  char *ss = strrchr(szEmailAddress, '@');
  if (ss == NULL) {
    nUserNumber = finduser1(szEmailAddress);
    if (nUserNumber > 0) {
      *pUserNumber = static_cast< unsigned short >(nUserNumber);
    } else if (wwiv::strings::IsEquals(szEmailAddress, "SYSOP")) {     // Add 4.31 Build3
      *pUserNumber = 1;
    } else {
      GetSession()->bout << "Unknown user.\r\n";
    }
  } else if (atoi(ss + 1) == 0) {
    for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) {
      set_net_num(i);
      if ((WWIV_STRNICMP("internet", GetSession()->GetNetworkName(), 8) == 0) ||
          ((WWIV_STRNICMP("filenet", GetSession()->GetNetworkName(), 7) == 0) && (*pSystemNumber == 32767))) {
        strcpy(net_email_name, szEmailAddress);
        for (ss1 = net_email_name; *ss1; ss1++) {
          if ((*ss1 >= 'A') && (*ss1 <= 'Z')) {
            *ss1 += 'a' - 'A';
          }
        }
        *pSystemNumber = 1;
        break;
      }
    }
    if (i >= GetSession()->GetMaxNetworkNumber()) {
      GetSession()->bout << "Unknown user.\r\n";
    }
  } else {
    ss[0] = '\0';
    ss = &(ss[1]);
    i = strlen(szEmailAddress);
    while (i > 0 && szEmailAddress[i - 1] == ' ') {
      --i;
    }
    szEmailAddress[i] = 0;
    nUserNumber = atoi(szEmailAddress);
    if (nUserNumber == 0 && szEmailAddress[0] == '#') {
      nUserNumber = atoi(szEmailAddress + 1);
    }
    if (strchr(szEmailAddress, '@')) {
      nUserNumber = 0;
    }
    nSystemNumber = atoi(ss);
    ss1 = strchr(ss, '.');
    if (ss1) {
      ss1++;
    }
    if (nUserNumber == 0) {
      strcpy(net_email_name, szEmailAddress);
      i = strlen(net_email_name);
      while (i > 0 && net_email_name[i - 1] == ' ') {
        --i;
      }
      net_email_name[i] = '\0';
      if (net_email_name[0]) {
        *pSystemNumber = static_cast< unsigned short >(nSystemNumber);
      } else {
        GetSession()->bout << "Unknown user.\r\n";
      }
    } else {
      *pUserNumber = static_cast< unsigned short >(nUserNumber);
      *pSystemNumber = static_cast< unsigned short >(nSystemNumber);
    }
    if (*pSystemNumber && ss1) {
      for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) {
        set_net_num(i);
        if (wwiv::strings::IsEqualsIgnoreCase(ss1, GetSession()->GetNetworkName())) {
          if (!valid_system(*pSystemNumber)) {
            GetSession()->bout.NewLine();
            GetSession()->bout << "There is no " << ss1 << " @" << *pSystemNumber << ".\r\n\n";
            *pSystemNumber = *pUserNumber = 0;
          } else {
            if (*pSystemNumber == net_sysnum) {
              *pSystemNumber = 0;
              if (*pUserNumber == 0) {
                *pUserNumber = static_cast< unsigned short >(finduser(net_email_name));
              }
              if (*pUserNumber == 0 || *pUserNumber > 32767) {
                *pUserNumber = 0;
                GetSession()->bout << "Unknown user.\r\n";
              }
            }
          }
          break;
        }
      }
      if (i >= GetSession()->GetMaxNetworkNumber()) {
        GetSession()->bout.NewLine();
        GetSession()->bout << "This system isn't connected to " << ss1 << "\r\n";
        *pSystemNumber = *pUserNumber = 0;
      }
    } else if (*pSystemNumber && GetSession()->GetMaxNetworkNumber() > 1) {
      odc[0] = '\0';
      odci = 0;
      onx[0] = 'Q';
      onx[1] = '\0';
      onxi = 1;
      nv = 0;
      on = GetSession()->GetNetworkNumber();
      ss = static_cast<char *>(BbsAllocA(GetSession()->GetMaxNetworkNumber()));
      WWIV_ASSERT(ss != NULL);
      xx = -1;
      for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) {
        set_net_num(i);
        if (net_sysnum == *pSystemNumber) {
          xx = i;
        } else if (valid_system(*pSystemNumber)) {
          ss[nv++] = static_cast< char >(i);
        }
      }
      set_net_num(on);
      if (nv == 0) {
        if (xx != -1) {
          set_net_num(xx);
          *pSystemNumber = 0;
          if (*pUserNumber == 0) {
            *pUserNumber = static_cast< unsigned short >(finduser(net_email_name));
            if (*pUserNumber == 0 || *pUserNumber > 32767) {
              *pUserNumber = 0;
              GetSession()->bout << "Unknown user.\r\n";
            }
          }
        } else {
          GetSession()->bout.NewLine();
          GetSession()->bout << "Unknown system\r\n";
          *pSystemNumber = *pUserNumber = 0;
        }
      } else if (nv == 1) {
        set_net_num(ss[0]);
      } else {
        GetSession()->bout.NewLine();
        for (i = 0; i < nv; i++) {
          set_net_num(ss[i]);
          csne = next_system(*pSystemNumber);
          if (csne) {
            if (i < 9) {
              onx[onxi++] = static_cast< char >(i + '1');
              onx[onxi] = 0;
            } else {
              odci = static_cast< char >((i + 1) / 10);
              odc[odci - 1] = static_cast< char >(odci + '0');
              odc[odci] = 0;
            }
            GetSession()->bout << i + 1 << ". " << GetSession()->GetNetworkName() << " (" << csne->name << ")\r\n";
          }
        }
        GetSession()->bout << "Q. Quit\r\n\n";
        GetSession()->bout << "|#2Which network (number): ";
        if (nv < 9) {
          ch = onek(onx);
          if (ch == 'Q') {
            i = -1;
          } else {
            i = ch - '1';
          }
        } else {
          mmk = mmkey(2);
          if (*mmk == 'Q') {
            i = -1;
          } else {
            i = atoi(mmk) - 1;
          }
        }
        if (i >= 0 && i < nv) {
          set_net_num(ss[i]);
        } else {
          GetSession()->bout << "\r\n|#6Aborted.\r\n\n";
          *pUserNumber = *pSystemNumber = 0;
        }
      }
      free(ss);
    } else {
      if (*pSystemNumber == net_sysnum) {
        *pSystemNumber = 0;
        if (*pUserNumber == 0) {
          *pUserNumber = static_cast< unsigned short >(finduser(net_email_name));
        }
        if (*pUserNumber == 0 || *pUserNumber > 32767) {
          *pUserNumber = 0;
          GetSession()->bout << "Unknown user.\r\n";
        }
      } else if (!valid_system(*pSystemNumber)) {
        GetSession()->bout << "\r\nUnknown user.\r\n";
        *pSystemNumber = *pUserNumber = 0;
      }
    }
  }
}