|
|
1.1 ! root 1: /* scansubs.cpp */ ! 2: ! 3: /* Synchronet message database scanning routines */ ! 4: ! 5: /* $Id: scansubs.cpp,v 1.4 2000/12/11 23:21:12 rswindell Exp $ */ ! 6: ! 7: /**************************************************************************** ! 8: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 10: * * ! 11: * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html * ! 12: * * ! 13: * This program is free software; you can redistribute it and/or * ! 14: * modify it under the terms of the GNU General Public License * ! 15: * as published by the Free Software Foundation; either version 2 * ! 16: * of the License, or (at your option) any later version. * ! 17: * See the GNU General Public License for more details: gpl.txt or * ! 18: * http://www.fsf.org/copyleft/gpl.html * ! 19: * * ! 20: * Anonymous FTP access to the most recent released source is available at * ! 21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 22: * * ! 23: * Anonymous CVS access to the development source and modification history * ! 24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 26: * (just hit return, no password is necessary) * ! 27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 28: * * ! 29: * For Synchronet coding style and modification guidelines, see * ! 30: * http://www.synchro.net/source.html * ! 31: * * ! 32: * You are encouraged to submit any modifications (preferably in Unix diff * ! 33: * format) via e-mail to [email protected] * ! 34: * * ! 35: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 36: ****************************************************************************/ ! 37: ! 38: #include "sbbs.h" ! 39: ! 40: /****************************************************************************/ ! 41: /* Used to scan single or multiple sub-boards. 'mode' is the scan type. */ ! 42: /****************************************************************************/ ! 43: void sbbs_t::scansubs(long mode) ! 44: { ! 45: char ch,str[256]; ! 46: char tmp[512]; ! 47: uint i=0,found=0; ! 48: ! 49: mnemonics(text[SubGroupOrAll]); ! 50: ch=(char)getkeys("SGA\r",0); ! 51: if(sys_status&SS_ABORT || ch==CR) ! 52: return; ! 53: ! 54: if(ch!='A' && mode&(SCAN_FIND|SCAN_TOYOU)) { ! 55: if(yesno(text[DisplayTitlesOnlyQ])) i=1; ! 56: if(mode&SCAN_FIND) { ! 57: bputs(text[SearchStringPrompt]); ! 58: if(!getstr(str,40,K_LINE|K_UPPER)) ! 59: return; ! 60: if(i) { /* if titles only */ ! 61: if(ch=='S') ! 62: found=searchsub(usrsub[curgrp][cursub[curgrp]],str); ! 63: else if(ch=='G') ! 64: for(i=0;i<usrsubs[curgrp] && !msgabort();i++) ! 65: found=searchsub(usrsub[curgrp][i],str); ! 66: sprintf(tmp,"Searched messages for '%s'",str); ! 67: logline(nulstr,tmp); ! 68: if(!found) ! 69: CRLF; ! 70: return; } } ! 71: else if(mode&SCAN_TOYOU && i) { ! 72: if(ch=='S') ! 73: found=searchsub_toyou(usrsub[curgrp][cursub[curgrp]]); ! 74: else if(ch=='G') ! 75: for(i=0;i<usrsubs[curgrp] && !msgabort();i++) ! 76: found=searchsub_toyou(usrsub[curgrp][i]); ! 77: if(!found) ! 78: CRLF; ! 79: return; } } ! 80: ! 81: if(ch=='S') { ! 82: if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) { ! 83: menu("msgscan"); } ! 84: i=scanposts(usrsub[curgrp][cursub[curgrp]],mode,str); ! 85: bputs(text[MessageScan]); ! 86: if(i) bputs(text[MessageScanAborted]); ! 87: else bputs(text[MessageScanComplete]); ! 88: return; } ! 89: if(ch=='G') { ! 90: if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) { ! 91: menu("msgscan"); } ! 92: for(i=0;i<usrsubs[curgrp] && !msgabort();i++) ! 93: if(((mode&SCAN_NEW && ! 94: (sub_cfg[usrsub[curgrp][i]]&SUB_CFG_NSCAN ! 95: || cfg.sub[usrsub[curgrp][i]]->misc&SUB_FORCED)) ! 96: || (mode&SCAN_TOYOU && sub_cfg[usrsub[curgrp][i]]&SUB_CFG_SSCAN) ! 97: || mode&SCAN_FIND) ! 98: && scanposts(usrsub[curgrp][i],mode,str)) break; ! 99: bputs(text[MessageScan]); ! 100: if(i==usrsubs[curgrp]) bputs(text[MessageScanComplete]); ! 101: else bputs(text[MessageScanAborted]); ! 102: return; } ! 103: ! 104: scanallsubs(mode); ! 105: } ! 106: ! 107: /****************************************************************************/ ! 108: /* Performs a new message scan all all sub-boards */ ! 109: /****************************************************************************/ ! 110: void sbbs_t::scanallsubs(long mode) ! 111: { ! 112: char str[256]; ! 113: char tmp[512]; ! 114: uint i,j,found=0; ! 115: ! 116: if(/* action==NODE_MAIN && */ mode&(SCAN_FIND|SCAN_TOYOU)) { ! 117: i=yesno(text[DisplayTitlesOnlyQ]); ! 118: if(mode&SCAN_FIND) { ! 119: bputs(text[SearchStringPrompt]); ! 120: if(!getstr(str,40,K_LINE|K_UPPER)) ! 121: return; ! 122: if(i) { /* if titles only */ ! 123: for(i=0;i<usrgrps;i++) { ! 124: for(j=0;j<usrsubs[i] && !msgabort();j++) ! 125: found=searchsub(usrsub[i][j],str); ! 126: if(j<usrsubs[i]) ! 127: break; } ! 128: if(!found) ! 129: CRLF; ! 130: sprintf(tmp,"Searched messages for '%s'",str); ! 131: logline(nulstr,tmp); ! 132: return; } } ! 133: else if(mode&SCAN_TOYOU && i) { ! 134: for(i=0;i<usrgrps;i++) { ! 135: for(j=0;j<usrsubs[i] && !msgabort();j++) ! 136: found=searchsub_toyou(usrsub[i][j]); ! 137: if(j<usrsubs[i]) ! 138: break; } ! 139: if(!found) ! 140: CRLF; ! 141: return; } } ! 142: ! 143: if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) { ! 144: menu("msgscan"); } ! 145: for(i=0;i<usrgrps;i++) { ! 146: for(j=0;j<usrsubs[i] && !msgabort();j++) ! 147: if(((mode&SCAN_NEW && sub_cfg[usrsub[i][j]]&SUB_CFG_NSCAN) ! 148: || cfg.sub[usrsub[i][j]]->misc&SUB_FORCED ! 149: || mode&SCAN_FIND ! 150: || (mode&SCAN_TOYOU && sub_cfg[usrsub[i][j]]&SUB_CFG_SSCAN)) ! 151: && scanposts(usrsub[i][j],mode,str)) break; ! 152: if(j<usrsubs[i]) ! 153: break; } ! 154: bputs(text[MessageScan]); ! 155: if(i<usrgrps) { ! 156: bputs(text[MessageScanAborted]); ! 157: return; } ! 158: bputs(text[MessageScanComplete]); ! 159: if(mode&SCAN_NEW && !(mode&(SCAN_BACK|SCAN_TOYOU)) ! 160: && useron.misc&ANFSCAN && !(useron.rest&FLAG('T'))) { ! 161: xfer_cmds++; ! 162: scanalldirs(FL_ULTIME); } ! 163: } ! 164: ! 165: void sbbs_t::new_scan_ptr_cfg() ! 166: { ! 167: uint i,j; ! 168: long s; ! 169: ulong l; ! 170: time_t t; ! 171: ! 172: while(online) { ! 173: bputs(text[CfgGrpLstHdr]); ! 174: for(i=0;i<usrgrps && !msgabort();i++) { ! 175: checkline(); ! 176: if(i<9) outchar(SP); ! 177: if(i<99) outchar(SP); ! 178: bprintf(text[CfgGrpLstFmt],i+1,cfg.grp[usrgrp[i]]->lname); } ! 179: SYNC; ! 180: mnemonics(text[WhichOrAll]); ! 181: s=getkeys("AQ",usrgrps); ! 182: if(!s || s==-1 || s=='Q') ! 183: break; ! 184: if(s=='A') { ! 185: mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or" ! 186: " [Last Message]: "); ! 187: s=getkeys("DLQ",9999); ! 188: if(s==-1 || s=='Q') ! 189: continue; ! 190: if(s=='D') { ! 191: t=time(NULL); ! 192: if(inputnstime(&t) && !(sys_status&SS_ABORT)) { ! 193: bputs(text[LoadingMsgPtrs]); ! 194: for(i=0;i<usrgrps && online;i++) ! 195: for(j=0;j<usrsubs[i] && online;j++) { ! 196: checkline(); ! 197: sub_ptr[usrsub[i][j]]=getmsgnum(usrsub[i][j],t); } } ! 198: continue; } ! 199: if(s=='L') ! 200: s=0; ! 201: if(s) ! 202: s&=~0x80000000L; ! 203: bputs(text[LoadingMsgPtrs]); ! 204: for(i=0;i<usrgrps;i++) ! 205: for(j=0;j<usrsubs[i] && online;j++) { ! 206: checkline(); ! 207: getlastmsg(usrsub[i][j],&l,0); ! 208: if(s>(long)l) ! 209: sub_ptr[usrsub[i][j]]=0; ! 210: else ! 211: sub_ptr[usrsub[i][j]]=l-s; } ! 212: continue; } ! 213: i=(s&~0x80000000L)-1; ! 214: while(online) { ! 215: l=0; ! 216: bprintf(text[CfgSubLstHdr],cfg.grp[usrgrp[i]]->lname); ! 217: for(j=0;j<usrsubs[i] && !msgabort();j++) { ! 218: checkline(); ! 219: if(j<9) outchar(SP); ! 220: if(j<99) outchar(SP); ! 221: t=getmsgtime(usrsub[i][j],sub_ptr[usrsub[i][j]]); ! 222: if(t>(long)l) ! 223: l=t; ! 224: bprintf(text[SubPtrLstFmt],j+1,cfg.sub[usrsub[i][j]]->lname ! 225: ,timestr(&t),nulstr); } ! 226: SYNC; ! 227: mnemonics(text[WhichOrAll]); ! 228: s=getkeys("AQ",usrsubs[i]); ! 229: if(sys_status&SS_ABORT) { ! 230: lncntr=0; ! 231: return; } ! 232: if(s==-1 || !s || s=='Q') ! 233: break; ! 234: if(s=='A') { /* The entire group */ ! 235: mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or" ! 236: " [Last Message]: "); ! 237: s=getkeys("DLQ",9999); ! 238: if(s==-1 || s=='Q') ! 239: continue; ! 240: if(s=='D') { ! 241: t=l; ! 242: if(inputnstime(&t) && !(sys_status&SS_ABORT)) { ! 243: bputs(text[LoadingMsgPtrs]); ! 244: for(j=0;j<usrsubs[i] && online;j++) { ! 245: checkline(); ! 246: sub_ptr[usrsub[i][j]]=getmsgnum(usrsub[i][j],t); } } ! 247: continue; } ! 248: if(s=='L') ! 249: s=0; ! 250: if(s) ! 251: s&=~0x80000000L; ! 252: bputs(text[LoadingMsgPtrs]); ! 253: for(j=0;j<usrsubs[i] && online;j++) { ! 254: checkline(); ! 255: getlastmsg(usrsub[i][j],&l,0); ! 256: if(s>(long)l) ! 257: sub_ptr[usrsub[i][j]]=0; ! 258: else ! 259: sub_ptr[usrsub[i][j]]=l-s; } ! 260: continue; } ! 261: else { ! 262: j=(s&~0x80000000L)-1; ! 263: mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or" ! 264: " [Last Message]: "); ! 265: s=getkeys("DLQ",9999); ! 266: if(s==-1 || s=='Q') ! 267: continue; ! 268: if(s=='D') { ! 269: t=getmsgtime(usrsub[i][j],sub_ptr[usrsub[i][j]]); ! 270: if(inputnstime(&t) && !(sys_status&SS_ABORT)) { ! 271: bputs(text[LoadingMsgPtrs]); ! 272: sub_ptr[usrsub[i][j]]=getmsgnum(usrsub[i][j],t); } ! 273: continue; } ! 274: if(s=='L') ! 275: s=0; ! 276: if(s) ! 277: s&=~0x80000000L; ! 278: getlastmsg(usrsub[i][j],&l,0); ! 279: if(s>(long)l) ! 280: sub_ptr[usrsub[i][j]]=0; ! 281: else ! 282: sub_ptr[usrsub[i][j]]=l-s; } ! 283: } } ! 284: } ! 285: ! 286: void sbbs_t::new_scan_cfg(ulong misc) ! 287: { ! 288: long s; ! 289: ulong i,j; ! 290: ulong t; ! 291: ! 292: while(online) { ! 293: bputs(text[CfgGrpLstHdr]); ! 294: for(i=0;i<usrgrps && !msgabort();i++) { ! 295: checkline(); ! 296: if(i<9) outchar(SP); ! 297: if(i<99) outchar(SP); ! 298: bprintf(text[CfgGrpLstFmt],i+1,cfg.grp[usrgrp[i]]->lname); } ! 299: SYNC; ! 300: if(misc&SUB_CFG_NSCAN) ! 301: mnemonics(text[NScanCfgWhichGrp]); ! 302: else ! 303: mnemonics(text[SScanCfgWhichGrp]); ! 304: s=getnum(i); ! 305: if(s<1) ! 306: break; ! 307: i=s-1; ! 308: while(online) { ! 309: if(misc&SUB_CFG_NSCAN) ! 310: misc&=~SUB_CFG_YSCAN; ! 311: bprintf(text[CfgSubLstHdr],cfg.grp[usrgrp[i]]->lname); ! 312: for(j=0;j<usrsubs[i] && !msgabort();j++) { ! 313: checkline(); ! 314: if(j<9) outchar(SP); ! 315: if(j<99) outchar(SP); ! 316: bprintf(text[CfgSubLstFmt],j+1 ! 317: ,cfg.sub[usrsub[i][j]]->lname ! 318: ,sub_cfg[usrsub[i][j]]&misc ? ! 319: (misc&SUB_CFG_NSCAN && sub_cfg[usrsub[i][j]]&SUB_CFG_YSCAN) ? ! 320: "To You Only" : text[On] : text[Off]); ! 321: } ! 322: SYNC; ! 323: if(misc&SUB_CFG_NSCAN) ! 324: mnemonics(text[NScanCfgWhichSub]); ! 325: else ! 326: mnemonics(text[SScanCfgWhichSub]); ! 327: s=getkeys("AQ",usrsubs[i]); ! 328: if(sys_status&SS_ABORT) { ! 329: lncntr=0; ! 330: return; } ! 331: if(!s || s==-1 || s=='Q') ! 332: break; ! 333: if(s=='A') { ! 334: t=sub_cfg[usrsub[i][0]]&misc; ! 335: if(misc&SUB_CFG_NSCAN && !t && !(useron.misc&FLAG('Q'))) ! 336: if(!noyes("Messages to you only")) ! 337: misc|=SUB_CFG_YSCAN; ! 338: for(j=0;j<usrsubs[i] && online;j++) { ! 339: checkline(); ! 340: if(t) sub_cfg[usrsub[i][j]]&=~misc; ! 341: else { ! 342: if(misc&SUB_CFG_NSCAN) ! 343: sub_cfg[usrsub[i][j]]&=~SUB_CFG_YSCAN; ! 344: sub_cfg[usrsub[i][j]]|=misc; } } ! 345: continue; } ! 346: j=(s&~0x80000000L)-1; ! 347: if(misc&SUB_CFG_NSCAN && !(sub_cfg[usrsub[i][j]]&misc)) { ! 348: if(!(useron.misc&FLAG('Q')) && !noyes("Messages to you only")) ! 349: sub_cfg[usrsub[i][j]]|=SUB_CFG_YSCAN; ! 350: else ! 351: sub_cfg[usrsub[i][j]]&=~SUB_CFG_YSCAN; } ! 352: sub_cfg[usrsub[i][j]]^=misc; } } ! 353: } ! 354:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.