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

  1. #line 1 "EXECMSG.C"
  2.  
  3. /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
  4.  
  5. #include "sbbs.h"
  6. #include "cmdshell.h"
  7.  
  8. int execmsg(csi_t *csi)
  9. {
  10.     uchar    str[256],tmp2[128],*path,ch,*p;
  11.     int     s,file,x,y;
  12.     long    i,j,k;        // Changes from ints - 03/25/96
  13.     long    l;
  14.     stats_t stats;
  15.     node_t    node;
  16.     file_t    f;
  17.     time_t    t;
  18.     csi_t   bin;
  19.  
  20.  
  21. switch(*(csi->ip++)) {
  22.  
  23.     case CS_MSG_SELECT_AREA:
  24.         csi->logic=LOGIC_FALSE;
  25.         if(!usrgrps) return(0);
  26.         while(online) {
  27.             j=0;
  28.             if(usrgrps>1) {
  29.                 sprintf(str,"%sMENU\\GRPS.*",text_dir);
  30.                 if(fexist(str))
  31.                     menu("GRPS");
  32.                 else {
  33.                     bputs(text[CfgGrpLstHdr]);
  34.                     for(i=0;i<usrgrps && !msgabort();i++) {
  35.                         if(i==curgrp)
  36.                             outchar('*');
  37.                         else outchar(SP);
  38.                         if(i<9) outchar(SP);
  39.                         if(i<99) outchar(SP);
  40.                         bprintf(text[CfgGrpLstFmt]
  41.                             ,i+1,grp[usrgrp[i]]->lname); } }
  42.                 sprintf(str,text[JoinWhichGrp],curgrp+1);
  43.                 mnemonics(str);
  44.                 j=getnum(usrgrps);
  45.                 if((int)j==-1)
  46.                     return(0);
  47.                 if(!j)
  48.                     j=curgrp;
  49.                 else
  50.                     j--; }
  51.             sprintf(str,"%sMENU\\SUBS%u.*",text_dir,usrgrp[j]+1);
  52.             if(fexist(str)) {
  53.                 sprintf(str,"SUBS%u",usrgrp[j]+1);
  54.                 menu(str); }
  55.             else {
  56.                 CLS;
  57.                 bprintf(text[SubLstHdr],grp[usrgrp[j]]->lname);
  58.                 for(i=0;i<usrsubs[j] && !msgabort();i++) {
  59.                     if(i==cursub[j]) outchar('*');
  60.                     else outchar(SP);
  61.                     sprintf(str,text[SubLstFmt],i+1
  62.                         ,sub[usrsub[j][i]]->lname,nulstr
  63.                         ,getposts(usrsub[j][i]));
  64.                     if(i<9) outchar(SP);
  65.                     if(i<99) outchar(SP);
  66.                     bputs(str); } }
  67.             sprintf(str,text[JoinWhichSub],cursub[j]+1);
  68.             mnemonics(str);
  69.             i=getnum(usrsubs[j]);
  70.             if((int)i==-1) {
  71.                 if(usrgrps==1)
  72.                     return(0);
  73.                 continue; }
  74.             if(!i)
  75.                 i=cursub[j];
  76.             else
  77.                 i--;
  78.             curgrp=j;
  79.             cursub[curgrp]=i;
  80.             csi->logic=LOGIC_TRUE;
  81.             return(0); }
  82.         return(0);
  83.  
  84.     case CS_MSG_GET_SUB_NUM:
  85.  
  86.         if(useron.misc&COLDKEYS) {
  87.             i=atoi(csi->str);
  88.             if(i && usrgrps && i<=usrsubs[curgrp])
  89.                 cursub[curgrp]=i-1;
  90.             return(0); }
  91.  
  92.         ch=getkey(K_UPPER);
  93.         outchar(ch);
  94.         if(usrgrps && (ch&0xf)*10<=usrsubs[curgrp] && (ch&0xf)) {
  95.             i=(ch&0xf)*10;
  96.             ch=getkey(K_UPPER);
  97.             if(!isdigit(ch) && ch!=CR) {
  98.                 ungetkey(ch);
  99.                 cursub[curgrp]=(i/10)-1;
  100.                 return(0); }
  101.             outchar(ch);
  102.             if(ch==CR) {
  103.                 cursub[curgrp]=(i/10)-1;
  104.                 return(0); }
  105.             logch(ch,0);
  106.             i+=ch&0xf;
  107.             if(i*10<=usrsubs[curgrp]) {     /* 100+ subs */
  108.                 i*=10;
  109.                 ch=getkey(K_UPPER);
  110.                 if(!isdigit(ch) && ch!=CR) {
  111.                     ungetkey(ch);
  112.                     cursub[curgrp]=(i/10)-1;
  113.                     return(0); }
  114.                 outchar(ch);
  115.                 if(ch==CR) {
  116.                     cursub[curgrp]=(i/10)-1;
  117.                     return(0); }
  118.                 logch(ch,0);
  119.                 i+=ch&0xf; }
  120.             if(i<=usrsubs[curgrp])
  121.                 cursub[curgrp]=i-1;
  122.             return(0); }
  123.         if((ch&0xf)<=usrsubs[curgrp] && (ch&0xf) && usrgrps)
  124.             cursub[curgrp]=(ch&0xf)-1;
  125.         return(0);
  126.  
  127.     case CS_MSG_GET_GRP_NUM:
  128.  
  129.         if(useron.misc&COLDKEYS) {
  130.             i=atoi(csi->str);
  131.             if(i && i<=usrgrps)
  132.                 curgrp=i-1;
  133.             return(0); }
  134.  
  135.         ch=getkey(K_UPPER);
  136.         outchar(ch);
  137.         if((ch&0xf)*10<=usrgrps && (ch&0xf)) {
  138.             i=(ch&0xf)*10;
  139.             ch=getkey(K_UPPER);
  140.             if(!isdigit(ch) && ch!=CR) {
  141.                 ungetkey(ch);
  142.                 curgrp=(i/10)-1;
  143.                 return(0); }
  144.             outchar(ch);
  145.             if(ch==CR) {
  146.                 curgrp=(i/10)-1;
  147.                 return(0); }
  148.             logch(ch,0);
  149.             i+=ch&0xf;
  150.             if(i<=usrgrps)
  151.                 curgrp=i-1;
  152.             return(0); }
  153.         if((ch&0xf)<=usrgrps && (ch&0xf))
  154.             curgrp=(ch&0xf)-1;
  155.         return(0);
  156.  
  157.     case CS_MSG_SET_GROUP:
  158.         csi->logic=LOGIC_TRUE;
  159.         for(i=0;i<usrgrps;i++)
  160.             if(!stricmp(grp[usrgrp[i]]->sname,csi->str))
  161.                 break;
  162.         if(i<usrgrps)
  163.             curgrp=i;
  164.         else
  165.             csi->logic=LOGIC_FALSE;
  166.         return(0);
  167.  
  168.     case CS_MSG_SHOW_GROUPS:
  169.         if(!usrgrps) return(0);
  170.         sprintf(str,"%sMENU\\GRPS.*",text_dir);
  171.         if(fexist(str)) {
  172.             menu("GRPS");
  173.             return(0); }
  174.         bputs(text[GrpLstHdr]);
  175.         for(i=0;i<usrgrps && !msgabort();i++) {
  176.             if(i==curgrp)
  177.                 outchar('*');
  178.             else outchar(SP);
  179.             if(i<9) outchar(SP);
  180.             bprintf(text[GrpLstFmt],i+1
  181.                 ,grp[usrgrp[i]]->lname,nulstr,usrsubs[i]); }
  182.         return(0);
  183.  
  184.     case CS_MSG_SHOW_SUBBOARDS:
  185.         if(!usrgrps) return(0);
  186.         sprintf(str,"%sMENU\\SUBS%u.*",text_dir,usrgrp[curgrp]+1);
  187.         if(fexist(str)) {
  188.             sprintf(str,"SUBS%u",usrgrp[curgrp]+1);
  189.             menu(str);
  190.             return(0); }
  191.         CRLF;
  192.         bprintf(text[SubLstHdr],grp[usrgrp[curgrp]]->lname);
  193.         for(i=0;i<usrsubs[curgrp] && !msgabort();i++) {
  194.             if(i==cursub[curgrp]) outchar('*');
  195.             else outchar(SP);
  196.             sprintf(str,text[SubLstFmt],i+1
  197.                 ,sub[usrsub[curgrp][i]]->lname,nulstr
  198.                 ,getposts(usrsub[curgrp][i]));
  199.             if(i<9) outchar(SP);
  200.             if(i<99) outchar(SP);
  201.             bputs(str); }
  202.         return(0);
  203.  
  204.     case CS_MSG_GROUP_UP:
  205.         curgrp++;
  206.         if(curgrp>=usrgrps)
  207.             curgrp=0;
  208.         return(0);
  209.     case CS_MSG_GROUP_DOWN:
  210.         if(!curgrp)
  211.             curgrp=usrgrps-1;
  212.         else curgrp--;
  213.         return(0);
  214.     case CS_MSG_SUBBOARD_UP:
  215.         if(!usrgrps) return(0);
  216.         cursub[curgrp]++;
  217.         if(cursub[curgrp]>=usrsubs[curgrp])
  218.             cursub[curgrp]=0;
  219.         return(0);
  220.     case CS_MSG_SUBBOARD_DOWN:
  221.         if(!usrgrps) return(0);
  222.         if(!cursub[curgrp])
  223.             cursub[curgrp]=usrsubs[curgrp]-1;
  224.         else cursub[curgrp]--;
  225.         return(0);
  226.     case CS_MSG_SET_AREA:
  227.         csi->logic=LOGIC_TRUE;
  228.         for(i=0;i<usrgrps;i++)
  229.             for(j=0;j<usrsubs[i];j++)
  230.                 if(!stricmp(csi->str,sub[usrsub[i][j]]->code)) {
  231.                     curgrp=i;
  232.                     cursub[i]=j;
  233.                     return(0); }
  234.         csi->logic=LOGIC_FALSE;
  235.         return(0);
  236.     case CS_MSG_READ:
  237.         if(!usrgrps) return(0);
  238.         csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],0,nulstr);
  239.         return(0);
  240.     case CS_MSG_POST:
  241.         if(!usrgrps) return(0);
  242.         csi->logic=LOGIC_FALSE;
  243.         if(!chk_ar(sub[usrsub[curgrp][cursub[curgrp]]]->post_ar,useron)) {
  244.             bputs(text[CantPostOnSub]);
  245.             return(0); }
  246.         csi->logic=!postmsg(usrsub[curgrp][cursub[curgrp]],0,0);
  247.         return(0);
  248.     case CS_MSG_QWK:
  249.         qwk_sec();
  250.         return(0);
  251.     case CS_MSG_PTRS_CFG:
  252.         new_scan_ptr_cfg();
  253.         return(0);
  254.     case CS_MSG_PTRS_REINIT:
  255.         for(i=0;i<total_subs;i++) {
  256.             sub[i]->ptr=sub_ptr[i];
  257.             sub[i]->last=sub_last[i]; }
  258.         bputs(text[MsgPtrsInitialized]);
  259.         return(0);
  260.     case CS_MSG_NEW_SCAN_CFG:
  261.         new_scan_cfg(SUB_NSCAN);
  262.         return(0);
  263.     case CS_MSG_NEW_SCAN:
  264.         scansubs(SCAN_NEW);
  265.         return(0);
  266.     case CS_MSG_NEW_SCAN_SUB:
  267.         csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],SCAN_NEW,nulstr);
  268.         return(0);
  269.     case CS_MSG_NEW_SCAN_ALL:
  270.         scanallsubs(SCAN_NEW);
  271.         return(0);
  272.     case CS_MSG_CONT_SCAN:
  273.         scansubs(SCAN_NEW|SCAN_CONST);
  274.         return(0);
  275.     case CS_MSG_CONT_SCAN_ALL:
  276.         scanallsubs(SCAN_NEW|SCAN_CONST);
  277.         return(0);
  278.     case CS_MSG_BROWSE_SCAN:
  279.         scansubs(SCAN_NEW|SCAN_BACK);
  280.         return(0);
  281.     case CS_MSG_BROWSE_SCAN_ALL:
  282.         scanallsubs(SCAN_BACK|SCAN_NEW);
  283.         return(0);
  284.     case CS_MSG_FIND_TEXT:
  285.         scansubs(SCAN_FIND);
  286.         return(0);
  287.     case CS_MSG_FIND_TEXT_ALL:
  288.         scanallsubs(SCAN_FIND);
  289.         return(0);
  290.     case CS_MSG_YOUR_SCAN_CFG:
  291.         new_scan_cfg(SUB_SSCAN);
  292.         return(0);
  293.     case CS_MSG_YOUR_SCAN:
  294.         scansubs(SCAN_TOYOU);
  295.         return(0);
  296.     case CS_MSG_YOUR_SCAN_ALL:
  297.         scanallsubs(SCAN_TOYOU);
  298.         return(0); }
  299. errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1));
  300. return(0);
  301. }
  302.