int cmbmenu(char *cmbparams) { if (!cmbparams) return changemsgbase(0, 0); return changemsgbase(atoi(cmbparams), 0); }
static void scan_msgbase(int num) { int i, first = -1; char *headers; if (!changemsgbase(num, MC_QUICK | MC_NOSTAT)) return; getmsgptrs(); if (!(headers = get_headers())) return; for (i = lowest; i <= highest; i++) { if (!headers[i - lowest]) continue; if (!simple_search(i)) headers[i - lowest] = 0; else if (first == -1) first = i; } if (first == -1) return; readmessages(-1, first, headers); free(headers); }
int comment(void) { int oldb; if (!conference()->conf.CONF_COMMENTAREA) return 0; oldb = current_msgbase->MSGBASE_NUMBER; if (changemsgbase(conference()->conf.CONF_COMMENTAREA, MC_QUICK | MC_NOSTAT)) { entermsg(0, 0, maincfg.CFG_SYSOPNAME); changemsgbase(oldb, MC_QUICK | MC_NOSTAT); return 1; } return 0; }
static int getin(void) { int clfd; char buffer[256]; struct gcallerslog gcl; onlinestat = 1; enterbbs(); if (current_msgbase) changemsgbase(current_msgbase->MSGBASE_NUMBER, MC_QUICK | MC_NOSTAT); createflaglist(); user.user_timeremaining = timeleft / 60; saveuserbase(&user); clog.cl_logoff = time(0); snprintf(buffer, sizeof buffer, "%s/logfiles/callerslog%d.dat", origdir, node); clfd = open(buffer, O_WRONLY | O_CREAT, 0666); if (clfd != -1) { fsetperm(clfd, 0666); lseek(clfd, 0, SEEK_END); safe_write(clfd, &clog, sizeof(struct callerslog)); (void) close(clfd); } snprintf(buffer, sizeof buffer, "%s/logfiles/callerslog.dat", origdir); clfd = open(buffer, O_WRONLY | O_CREAT, 0666); if (clfd != -1) { fsetperm(clfd, 0666); gcl.cl_node = node; gcl.cl = clog; lseek(clfd, 0, SEEK_END); safe_write(clfd, &gcl, sizeof(struct gcallerslog)); (void) close(clfd); } if (currnode->MULTI_OTHERFLAGS & (1L << 1)) { char mesbuf[1024]; snprintf(mesbuf, sizeof mesbuf, "\n[0m%s from %s logged off from node #%d\n", maincfg.CFG_FLAGS & (1L << 1) ? user.user_handle : user.user_realname, maincfg.CFG_FLAGS & (1L << 2) ? user.user_organization : user.user_zipcity, node); olmall(2, mesbuf); } runlogoffbatch(); onlinestat = 0; return 1; }
static void do_conference_wide_scan(void) { int i, cm; if (!isanybasestagged(conference()->conf.CONF_NUMBER)) { ddprintf("%s", errstr[TS_NO_BASES_TAGGED]); return; } cm = current_msgbase->MSGBASE_NUMBER; for (i = 1; i <= conference()->conf.CONF_MSGBASES; i++) { if (!isbasetagged(conference()->conf.CONF_NUMBER, i)) continue; scan_msgbase(i); } changemsgbase(cm, MC_QUICK | MC_NOSTAT); }
int prevbase(void) { return changemsgbase(current_msgbase->MSGBASE_NUMBER - 1, 0); }
int nextbase(void) { return changemsgbase(current_msgbase->MSGBASE_NUMBER + 1, 0); }
int joinconf(int confn, int flags) { int newconfnum; conference_t *mc; struct iterator *iterator; char jbuffer[100]; newconfnum = confn; changenodestatus("Changing conference"); if ((flags & JC_LIST) && newconfnum == -1) TypeFile("joinconference", TYPE_WARN | TYPE_MAKE); while (newconfnum == -1) { jbuffer[0] = 0; DDPut(sd[jcpromptstr]); if (!(Prompt(jbuffer, 3, 0))) return 0; if ((!strcasecmp(jbuffer, "l")) || jbuffer[0] == '?') TypeFile("joinconference", TYPE_WARN | TYPE_MAKE); else if (jbuffer[0] == 0) return 0; else { char *endptr; newconfnum = strtol(jbuffer, &endptr, 10); if (*jbuffer && !*endptr) break; } newconfnum = -1; } iterator = conference_iterator(); while ((mc = (conference_t *) iterator_next(iterator))) { if (mc->conf.CONF_NUMBER != newconfnum) continue; if (!checkconfaccess(newconfnum, &user)) { if (!(flags & JC_SHUTUP)) { DDPut(sd[jcnoaccessstr]); } iterator_discard(iterator); return 0; } if (*mc->conf.CONF_PASSWD && !(flags & JC_SHUTUP) && !(flags & JC_QUICK)) { conference_t *oldconf = conference(); set_conference(mc); TypeFile("conferencepw", TYPE_CONF | TYPE_MAKE); set_conference(oldconf); DDPut("[36mConference password: [0m"); *jbuffer = 0; if (!(Prompt(jbuffer, 16, PROMPT_SECRET))) { iterator_discard(iterator); return 0; } if (strcasecmp(jbuffer, mc->conf.CONF_PASSWD)) { iterator_discard(iterator); return 0; } } if (!(flags & JC_NOUPDATE)) user.user_joinconference = newconfnum; set_conference(mc); if (conference()->conf.CONF_MSGBASES) current_msgbase = conference()->msgbases[0]; else current_msgbase = NULL; if (!(flags & JC_QUICK)) { TypeFile("conferencejoined", TYPE_MAKE | TYPE_CONF); } if (current_msgbase) { if (flags & JC_QUICK) { changemsgbase(current_msgbase->MSGBASE_NUMBER, MC_QUICK | MC_NOSTAT); } else { changemsgbase(current_msgbase->MSGBASE_NUMBER, MC_QUICK); } } iterator_discard(iterator); return 1; } iterator_discard(iterator); if (!(flags & JC_SHUTUP)) { DDPut(sd[jcnoconfstr]); } return 0; }