Annotation of sbbs/sbbs3/scansubs.cpp, revision 1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.