|
|
1.1 ! root 1: /* execmsg.cpp */ ! 2: ! 3: /* Synchronet message-related command shell/module routines */ ! 4: ! 5: /* $Id: execmsg.cpp,v 1.7 2004/05/30 06:47:52 deuce 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: #include "cmdshell.h" ! 40: ! 41: int sbbs_t::exec_msg(csi_t *csi) ! 42: { ! 43: char str[256],ch; ! 44: ulong i,j; ! 45: ! 46: switch(*(csi->ip++)) { ! 47: ! 48: case CS_MSG_SELECT_AREA: ! 49: csi->logic=LOGIC_FALSE; ! 50: if(!usrgrps) return(0); ! 51: while(online) { ! 52: j=0; ! 53: if(usrgrps>1) { ! 54: sprintf(str,"%smenu/grps.*", cfg.text_dir); ! 55: if(fexist(str)) ! 56: menu("grps"); ! 57: else { ! 58: bputs(text[CfgGrpLstHdr]); ! 59: for(i=0;i<usrgrps && !msgabort();i++) { ! 60: if(i==curgrp) ! 61: outchar('*'); ! 62: else outchar(' '); ! 63: if(i<9) outchar(' '); ! 64: if(i<99) outchar(' '); ! 65: bprintf(text[CfgGrpLstFmt] ! 66: ,i+1, cfg.grp[usrgrp[i]]->lname); } } ! 67: sprintf(str,text[JoinWhichGrp],curgrp+1); ! 68: mnemonics(str); ! 69: j=getnum(usrgrps); ! 70: if((int)j==-1) ! 71: return(0); ! 72: if(!j) ! 73: j=curgrp; ! 74: else ! 75: j--; } ! 76: sprintf(str,"%smenu/subs%u.*", cfg.text_dir, usrgrp[j]+1); ! 77: if(fexist(str)) { ! 78: sprintf(str,"subs%u",usrgrp[j]+1); ! 79: menu(str); } ! 80: else { ! 81: CLS; ! 82: bprintf(text[SubLstHdr], cfg.grp[usrgrp[j]]->lname); ! 83: for(i=0;i<usrsubs[j] && !msgabort();i++) { ! 84: if(i==cursub[j]) outchar('*'); ! 85: else outchar(' '); ! 86: sprintf(str,text[SubLstFmt],i+1 ! 87: ,cfg.sub[usrsub[j][i]]->lname,nulstr ! 88: ,getposts(&cfg,usrsub[j][i])); ! 89: if(i<9) outchar(' '); ! 90: if(i<99) outchar(' '); ! 91: bputs(str); } } ! 92: sprintf(str,text[JoinWhichSub],cursub[j]+1); ! 93: mnemonics(str); ! 94: i=getnum(usrsubs[j]); ! 95: if((int)i==-1) { ! 96: if(usrgrps==1) ! 97: return(0); ! 98: continue; } ! 99: if(!i) ! 100: i=cursub[j]; ! 101: else ! 102: i--; ! 103: curgrp=j; ! 104: cursub[curgrp]=i; ! 105: csi->logic=LOGIC_TRUE; ! 106: return(0); } ! 107: return(0); ! 108: ! 109: case CS_MSG_GET_SUB_NUM: ! 110: ! 111: if(useron.misc&COLDKEYS) { ! 112: i=atoi(csi->str); ! 113: if(i && usrgrps && i<=usrsubs[curgrp]) ! 114: cursub[curgrp]=i-1; ! 115: return(0); } ! 116: ! 117: ch=getkey(K_UPPER); ! 118: outchar(ch); ! 119: if(usrgrps && (ch&0xf)*10U<=usrsubs[curgrp] && (ch&0xf)) { ! 120: i=(ch&0xf)*10; ! 121: ch=getkey(K_UPPER); ! 122: if(!isdigit(ch) && ch!=CR) { ! 123: ungetkey(ch); ! 124: cursub[curgrp]=(i/10)-1; ! 125: return(0); } ! 126: outchar(ch); ! 127: if(ch==CR) { ! 128: cursub[curgrp]=(i/10)-1; ! 129: return(0); } ! 130: logch(ch,0); ! 131: i+=ch&0xf; ! 132: if(i*10<=usrsubs[curgrp]) { /* 100+ subs */ ! 133: i*=10; ! 134: ch=getkey(K_UPPER); ! 135: if(!isdigit(ch) && ch!=CR) { ! 136: ungetkey(ch); ! 137: cursub[curgrp]=(i/10)-1; ! 138: return(0); } ! 139: outchar(ch); ! 140: if(ch==CR) { ! 141: cursub[curgrp]=(i/10)-1; ! 142: return(0); } ! 143: logch(ch,0); ! 144: i+=ch&0xf; } ! 145: if(i<=usrsubs[curgrp]) ! 146: cursub[curgrp]=i-1; ! 147: return(0); } ! 148: if((uint)(ch&0xf)<=usrsubs[curgrp] && (ch&0xf) && usrgrps) ! 149: cursub[curgrp]=(ch&0xf)-1; ! 150: return(0); ! 151: ! 152: case CS_MSG_GET_GRP_NUM: ! 153: ! 154: if(useron.misc&COLDKEYS) { ! 155: i=atoi(csi->str); ! 156: if(i && i<=usrgrps) ! 157: curgrp=i-1; ! 158: return(0); } ! 159: ! 160: ch=getkey(K_UPPER); ! 161: outchar(ch); ! 162: if((ch&0xf)*10U<=usrgrps && (ch&0xf)) { ! 163: i=(ch&0xf)*10; ! 164: ch=getkey(K_UPPER); ! 165: if(!isdigit(ch) && ch!=CR) { ! 166: ungetkey(ch); ! 167: curgrp=(i/10)-1; ! 168: return(0); } ! 169: outchar(ch); ! 170: if(ch==CR) { ! 171: curgrp=(i/10)-1; ! 172: return(0); } ! 173: logch(ch,0); ! 174: i+=ch&0xf; ! 175: if(i<=usrgrps) ! 176: curgrp=i-1; ! 177: return(0); } ! 178: if((uint)(ch&0xf)<=usrgrps && (ch&0xf)) ! 179: curgrp=(ch&0xf)-1; ! 180: return(0); ! 181: ! 182: case CS_MSG_SET_GROUP: ! 183: csi->logic=LOGIC_TRUE; ! 184: for(i=0;i<usrgrps;i++) ! 185: if(!stricmp(cfg.grp[usrgrp[i]]->sname,csi->str)) ! 186: break; ! 187: if(i<usrgrps) ! 188: curgrp=i; ! 189: else ! 190: csi->logic=LOGIC_FALSE; ! 191: return(0); ! 192: ! 193: case CS_MSG_SHOW_GROUPS: ! 194: if(!usrgrps) return(0); ! 195: sprintf(str,"%smenu/grps.*", cfg.text_dir); ! 196: if(fexist(str)) { ! 197: menu("grps"); ! 198: return(0); } ! 199: bputs(text[GrpLstHdr]); ! 200: for(i=0;i<usrgrps && !msgabort();i++) { ! 201: if(i==curgrp) ! 202: outchar('*'); ! 203: else outchar(' '); ! 204: if(i<9) outchar(' '); ! 205: bprintf(text[GrpLstFmt],i+1 ! 206: ,cfg.grp[usrgrp[i]]->lname,nulstr,usrsubs[i]); } ! 207: return(0); ! 208: ! 209: case CS_MSG_SHOW_SUBBOARDS: ! 210: if(!usrgrps) return(0); ! 211: sprintf(str,"%smenu/subs%u.*", cfg.text_dir, usrgrp[curgrp]+1); ! 212: if(fexist(str)) { ! 213: sprintf(str,"subs%u",usrgrp[curgrp]+1); ! 214: menu(str); ! 215: return(0); } ! 216: CRLF; ! 217: bprintf(text[SubLstHdr],cfg.grp[usrgrp[curgrp]]->lname); ! 218: for(i=0;i<usrsubs[curgrp] && !msgabort();i++) { ! 219: if(i==cursub[curgrp]) outchar('*'); ! 220: else outchar(' '); ! 221: sprintf(str,text[SubLstFmt],i+1 ! 222: ,cfg.sub[usrsub[curgrp][i]]->lname,nulstr ! 223: ,getposts(&cfg,usrsub[curgrp][i])); ! 224: if(i<9) outchar(' '); ! 225: if(i<99) outchar(' '); ! 226: bputs(str); } ! 227: return(0); ! 228: ! 229: case CS_MSG_GROUP_UP: ! 230: curgrp++; ! 231: if(curgrp>=usrgrps) ! 232: curgrp=0; ! 233: return(0); ! 234: case CS_MSG_GROUP_DOWN: ! 235: if(!curgrp) ! 236: curgrp=usrgrps-1; ! 237: else curgrp--; ! 238: return(0); ! 239: case CS_MSG_SUBBOARD_UP: ! 240: if(!usrgrps) return(0); ! 241: cursub[curgrp]++; ! 242: if(cursub[curgrp]>=usrsubs[curgrp]) ! 243: cursub[curgrp]=0; ! 244: return(0); ! 245: case CS_MSG_SUBBOARD_DOWN: ! 246: if(!usrgrps) return(0); ! 247: if(!cursub[curgrp]) ! 248: cursub[curgrp]=usrsubs[curgrp]-1; ! 249: else cursub[curgrp]--; ! 250: return(0); ! 251: case CS_MSG_SET_AREA: ! 252: csi->logic=LOGIC_TRUE; ! 253: for(i=0;i<usrgrps;i++) ! 254: for(j=0;j<usrsubs[i];j++) ! 255: if(!stricmp(csi->str,cfg.sub[usrsub[i][j]]->code)) { ! 256: curgrp=i; ! 257: cursub[i]=j; ! 258: return(0); } ! 259: csi->logic=LOGIC_FALSE; ! 260: return(0); ! 261: case CS_MSG_READ: ! 262: if(!usrgrps) return(0); ! 263: csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],0,nulstr); ! 264: return(0); ! 265: case CS_MSG_POST: ! 266: if(!usrgrps) return(0); ! 267: csi->logic=!postmsg(usrsub[curgrp][cursub[curgrp]],0,0); ! 268: return(0); ! 269: case CS_MSG_QWK: ! 270: qwk_sec(); ! 271: return(0); ! 272: case CS_MSG_PTRS_CFG: ! 273: new_scan_ptr_cfg(); ! 274: return(0); ! 275: case CS_MSG_PTRS_REINIT: ! 276: for(i=0;i<cfg.total_subs;i++) { ! 277: subscan[i].ptr=subscan[i].sav_ptr; ! 278: subscan[i].last=subscan[i].sav_last; ! 279: } ! 280: bputs(text[MsgPtrsInitialized]); ! 281: return(0); ! 282: case CS_MSG_NEW_SCAN_CFG: ! 283: new_scan_cfg(SUB_CFG_NSCAN); ! 284: return(0); ! 285: case CS_MSG_NEW_SCAN: ! 286: scansubs(SCAN_NEW); ! 287: return(0); ! 288: case CS_MSG_NEW_SCAN_SUB: ! 289: csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],SCAN_NEW,nulstr); ! 290: return(0); ! 291: case CS_MSG_NEW_SCAN_ALL: ! 292: scanallsubs(SCAN_NEW); ! 293: return(0); ! 294: case CS_MSG_CONT_SCAN: ! 295: scansubs(SCAN_NEW|SCAN_CONST); ! 296: return(0); ! 297: case CS_MSG_CONT_SCAN_ALL: ! 298: scanallsubs(SCAN_NEW|SCAN_CONST); ! 299: return(0); ! 300: case CS_MSG_BROWSE_SCAN: ! 301: scansubs(SCAN_NEW|SCAN_BACK); ! 302: return(0); ! 303: case CS_MSG_BROWSE_SCAN_ALL: ! 304: scanallsubs(SCAN_BACK|SCAN_NEW); ! 305: return(0); ! 306: case CS_MSG_FIND_TEXT: ! 307: scansubs(SCAN_FIND); ! 308: return(0); ! 309: case CS_MSG_FIND_TEXT_ALL: ! 310: scanallsubs(SCAN_FIND); ! 311: return(0); ! 312: case CS_MSG_YOUR_SCAN_CFG: ! 313: new_scan_cfg(SUB_CFG_SSCAN); ! 314: return(0); ! 315: case CS_MSG_YOUR_SCAN: ! 316: scansubs(SCAN_TOYOU); ! 317: return(0); ! 318: case CS_MSG_YOUR_SCAN_ALL: ! 319: scanallsubs(SCAN_TOYOU); ! 320: return(0); } ! 321: errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1)); ! 322: return(0); ! 323: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.