Annotation of sbbs/sbbs3/scansubs.cpp, revision 1.1.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.