|
|
1.1 root 1: #line 1 "MAIN_SEC.C"
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: /******************************************************/
6: /* This file contains the single function, main_sec() */
7: /******************************************************/
8:
9: #include "sbbs.h"
10:
11: extern void logoff();
12:
13: void main_cfg_cmd();
14: void main_ext_cmd(char ch);
15: void main_str_cmd(char *str);
16: void sysop_page(void);
17: ulong getposts(uint subnum);
18:
19: char no_rip_menu=0;
20:
21: void new_scan_ptr_cfg()
22: {
23: char str[128];
24: long i,j,s;
25: ulong l;
26: time_t t,lt;
27:
28: while(online) {
29: bputs(text[CfgGrpLstHdr]);
30: for(i=0;i<usrgrps && online;i++) {
31: checkline();
32: if(i<9) outchar(SP);
33: if(i<99) outchar(SP);
34: bprintf(text[CfgGrpLstFmt],i+1,grp[usrgrp[i]]->lname); }
35: SYNC;
36: mnemonics(text[WhichOrAll]);
37: s=getkeys("AQ",i);
38: if(!s || s==-1 || s=='Q')
39: break;
40: if(s=='A') {
41: mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or"
42: " [Last Message]: ");
43: s=getkeys("DLQ",9999);
44: if(s==-1 || s=='Q')
45: continue;
46: if(s=='D') {
47: t=time(NULL);
48: if(inputnstime(&t) && !(sys_status&SS_ABORT)) {
49: bputs(text[LoadingMsgPtrs]);
50: for(i=0;i<usrgrps && online;i++)
51: for(j=0;j<usrsubs[i] && online;j++) {
52: checkline();
53: sub[usrsub[i][j]]->ptr=getmsgnum(usrsub[i][j],t); } }
54: continue; }
55: if(s=='L')
56: s=0;
57: if(s)
58: s&=~0x80000000L;
59: bputs(text[LoadingMsgPtrs]);
60: for(i=0;i<usrgrps;i++)
61: for(j=0;j<usrsubs[i] && online;j++) {
62: checkline();
63: getlastmsg(usrsub[i][j],&l,0);
64: if(s>l)
65: sub[usrsub[i][j]]->ptr=0;
66: else
67: sub[usrsub[i][j]]->ptr=l-s; }
68: continue; }
69: i=(s&~0x80000000L)-1;
70: while(online) {
71: l=0;
72: bprintf(text[CfgSubLstHdr],grp[usrgrp[i]]->lname);
73: for(j=0;j<usrsubs[i] && online;j++) {
74: checkline();
75: if(j<9) outchar(SP);
76: if(j<99) outchar(SP);
77: t=getmsgtime(usrsub[i][j],sub[usrsub[i][j]]->ptr);
78: if(t>l)
79: l=t;
80: bprintf(text[SubPtrLstFmt],j+1,sub[usrsub[i][j]]->lname
81: ,timestr(&t),nulstr); }
82: SYNC;
83: mnemonics(text[WhichOrAll]);
84: s=getkeys("AQ",j);
85: if(sys_status&SS_ABORT) {
86: lncntr=0;
87: return; }
88: if(s==-1 || !s || s=='Q')
89: break;
90: if(s=='A') { /* The entire group */
91: mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or"
92: " [Last Message]: ");
93: s=getkeys("DLQ",9999);
94: if(s==-1 || s=='Q')
95: continue;
96: if(s=='D') {
97: t=l;
98: if(inputnstime(&t) && !(sys_status&SS_ABORT)) {
99: bputs(text[LoadingMsgPtrs]);
100: for(j=0;j<usrsubs[i] && online;j++) {
101: checkline();
102: sub[usrsub[i][j]]->ptr=getmsgnum(usrsub[i][j],t); } }
103: continue; }
104: if(s=='L')
105: s=0;
106: if(s)
107: s&=~0x80000000L;
108: bputs(text[LoadingMsgPtrs]);
109: for(j=0;j<usrsubs[i] && online;j++) {
110: checkline();
111: getlastmsg(usrsub[i][j],&l,0);
112: if(s>l)
113: sub[usrsub[i][j]]->ptr=0;
114: else
115: sub[usrsub[i][j]]->ptr=l-s; }
116: continue; }
117: else {
118: j=(s&~0x80000000L)-1;
119: mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or"
120: " [Last Message]: ");
121: s=getkeys("DLQ",9999);
122: if(s==-1 || s=='Q')
123: continue;
124: if(s=='D') {
125: t=getmsgtime(usrsub[i][j],sub[usrsub[i][j]]->ptr);
126: if(inputnstime(&t) && !(sys_status&SS_ABORT)) {
127: bputs(text[LoadingMsgPtrs]);
128: sub[usrsub[i][j]]->ptr=getmsgnum(usrsub[i][j],t); }
129: continue; }
130: if(s=='L')
131: s=0;
132: if(s)
133: s&=~0x80000000L;
134: getlastmsg(usrsub[i][j],&l,0);
135: if(s>l)
136: sub[usrsub[i][j]]->ptr=0;
137: else
138: sub[usrsub[i][j]]->ptr=l-s; }
139: } }
140: }
141:
142: void new_scan_cfg(ulong misc)
143: {
144: long s;
145: ulong i,j;
146: ulong t;
147:
148: while(online) {
149: bputs(text[CfgGrpLstHdr]);
150: for(i=0;i<usrgrps && online;i++) {
151: checkline();
152: if(i<9) outchar(SP);
153: if(i<99) outchar(SP);
154: bprintf(text[CfgGrpLstFmt],i+1,grp[usrgrp[i]]->lname); }
155: SYNC;
156: if(misc&SUB_NSCAN)
157: mnemonics(text[NScanCfgWhichGrp]);
158: else
159: mnemonics(text[SScanCfgWhichGrp]);
160: s=getnum(i);
161: if(s<1)
162: break;
163: i=s-1;
164: while(online) {
165: if(misc&SUB_NSCAN)
166: misc&=~SUB_YSCAN;
167: bprintf(text[CfgSubLstHdr],grp[usrgrp[i]]->lname);
168: for(j=0;j<usrsubs[i] && online;j++) {
169: checkline();
170: if(j<9) outchar(SP);
171: if(j<99) outchar(SP);
172: bprintf(text[CfgSubLstFmt],j+1
173: ,sub[usrsub[i][j]]->lname
174: ,sub[usrsub[i][j]]->misc&misc ?
175: (misc&SUB_NSCAN && sub[usrsub[i][j]]->misc&SUB_YSCAN) ?
176: "To You Only" : text[On] : text[Off]);
177: }
178: SYNC;
179: if(misc&SUB_NSCAN)
180: mnemonics(text[NScanCfgWhichSub]);
181: else
182: mnemonics(text[SScanCfgWhichSub]);
183: s=getkeys("AQ",j);
184: if(sys_status&SS_ABORT) {
185: lncntr=0;
186: return; }
187: if(!s || s==-1 || s=='Q')
188: break;
189: if(s=='A') {
190: t=sub[usrsub[i][0]]->misc&misc;
191: if(misc&SUB_NSCAN && !t)
192: if(!noyes("Messages to you only"))
193: misc|=SUB_YSCAN;
194: for(j=0;j<usrsubs[i] && online;j++) {
195: checkline();
196: if(t) sub[usrsub[i][j]]->misc&=~misc;
197: else {
198: if(misc&SUB_NSCAN)
199: sub[usrsub[i][j]]->misc&=~SUB_YSCAN;
200: sub[usrsub[i][j]]->misc|=misc; } }
201: continue; }
202: j=(s&~0x80000000L)-1;
203: if(misc&SUB_NSCAN && !(sub[usrsub[i][j]]->misc&misc)) {
204: if(!noyes("Messages to you only"))
205: sub[usrsub[i][j]]->misc|=SUB_YSCAN;
206: else
207: sub[usrsub[i][j]]->misc&=~SUB_YSCAN; }
208: sub[usrsub[i][j]]->misc^=misc; } }
209: }
210:
211: /****************************************************************************/
212: /* Performs a new message scan all all sub-boards */
213: /****************************************************************************/
214: void scanallsubs(char mode)
215: {
216: char str[256];
217: int i,j,found=0;
218:
219: if(/* action==NODE_MAIN && */ mode&(SCAN_FIND|SCAN_TOYOU)) {
220: i=yesno(text[DisplayTitlesOnlyQ]);
221: if(mode&SCAN_FIND) {
222: bputs(text[SearchStringPrompt]);
223: if(!getstr(str,40,K_LINE|K_UPPER))
224: return;
225: if(i) { /* if titles only */
226: for(i=0;i<usrgrps;i++) {
227: for(j=0;j<usrsubs[i] && !msgabort();j++)
228: found=searchsub(usrsub[i][j],str);
229: if(j<usrsubs[i])
230: break; }
231: if(!found)
232: CRLF;
233: sprintf(tmp,"Searched messages for '%s'",str);
234: logline(nulstr,tmp);
235: return; } }
236: else if(mode&SCAN_TOYOU && i) {
237: for(i=0;i<usrgrps;i++) {
238: for(j=0;j<usrsubs[i] && !msgabort();j++)
239: found=searchsub_toyou(usrsub[i][j]);
240: if(j<usrsubs[i])
241: break; }
242: if(!found)
243: CRLF;
244: return; } }
245:
246: if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) {
247: menu("MSGSCAN"); }
248: for(i=0;i<usrgrps;i++) {
249: for(j=0;j<usrsubs[i] && !msgabort();j++)
250: if(((mode&SCAN_NEW && sub[usrsub[i][j]]->misc&(SUB_NSCAN|SUB_FORCED))
251: || mode&SCAN_FIND
252: || (mode&SCAN_TOYOU && sub[usrsub[i][j]]->misc&SUB_SSCAN))
253: && scanposts(usrsub[i][j],mode,str)) break;
254: if(j<usrsubs[i])
255: break; }
256: bputs(text[MessageScan]);
257: if(i<usrgrps) {
258: bputs(text[MessageScanAborted]);
259: return; }
260: bputs(text[MessageScanComplete]);
261: if(mode&SCAN_NEW && !(mode&(SCAN_BACK|SCAN_TOYOU))
262: && useron.misc&ANFSCAN && !(useron.rest&FLAG('T'))) {
263: xfer_cmds++;
264: scanalldirs(FL_ULTIME); }
265: }
266:
267: /****************************************************************************/
268: /* Used to scan single or multiple sub-boards. 'mode' is the scan type. */
269: /****************************************************************************/
270: void scansubs(char mode)
271: {
272: char ch,str[256];
273: int i=0,j,found=0;
274:
275: mnemonics(text[SubGroupOrAll]);
276: ch=getkeys("SGA\r",0);
277: if(sys_status&SS_ABORT || ch==CR)
278: return;
279:
280: if(ch!='A' && mode&(SCAN_FIND|SCAN_TOYOU)) {
281: if(yesno(text[DisplayTitlesOnlyQ])) i=1;
282: if(mode&SCAN_FIND) {
283: bputs(text[SearchStringPrompt]);
284: if(!getstr(str,40,K_LINE|K_UPPER))
285: return;
286: if(i) { /* if titles only */
287: if(ch=='S')
288: found=searchsub(usrsub[curgrp][cursub[curgrp]],str);
289: else if(ch=='G')
290: for(i=0;i<usrsubs[curgrp] && !msgabort();i++)
291: found=searchsub(usrsub[curgrp][i],str);
292: sprintf(tmp,"Searched messages for '%s'",str);
293: logline(nulstr,tmp);
294: if(!found)
295: CRLF;
296: return; } }
297: else if(mode&SCAN_TOYOU && i) {
298: if(ch=='S')
299: found=searchsub_toyou(usrsub[curgrp][cursub[curgrp]]);
300: else if(ch=='G')
301: for(i=0;i<usrsubs[curgrp] && !msgabort();i++)
302: found=searchsub_toyou(usrsub[curgrp][i]);
303: if(!found)
304: CRLF;
305: return; } }
306:
307: if(ch=='S') {
308: if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) {
309: menu("MSGSCAN"); }
310: i=scanposts(usrsub[curgrp][cursub[curgrp]],mode,str);
311: bputs(text[MessageScan]);
312: if(i) bputs(text[MessageScanAborted]);
313: else bputs(text[MessageScanComplete]);
314: return; }
315: if(ch=='G') {
316: if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) {
317: menu("MSGSCAN"); }
318: for(i=0;i<usrsubs[curgrp] && !msgabort();i++)
319: if(((mode&SCAN_NEW &&
320: sub[usrsub[curgrp][i]]->misc&(SUB_NSCAN|SUB_FORCED))
321: || (mode&SCAN_TOYOU && sub[usrsub[curgrp][i]]->misc&SUB_SSCAN)
322: || mode&SCAN_FIND)
323: && scanposts(usrsub[curgrp][i],mode,str)) break;
324: bputs(text[MessageScan]);
325: if(i==usrsubs[curgrp]) bputs(text[MessageScanComplete]);
326: else bputs(text[MessageScanAborted]);
327: return; }
328:
329: scanallsubs(mode);
330: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.