Annotation of sbbs/sbbs2/main_sec.c, revision 1.1

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: }

unix.superglobalmegacorp.com

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