home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / MAIN_SEC.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  8.9 KB  |  331 lines

  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. }
  331.