|
|
1.1 root 1: /* execmsg.cpp */
2:
3: /* Synchronet message-related command shell/module routines */
4:
1.1.1.2 ! root 5: /* $Id: execmsg.cpp,v 1.7 2004/05/30 06:47:52 deuce Exp $ */
1.1 root 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:
1.1.1.2 ! root 41: int sbbs_t::exec_msg(csi_t *csi)
1.1 root 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('*');
1.1.1.2 ! root 62: else outchar(' ');
! 63: if(i<9) outchar(' ');
! 64: if(i<99) outchar(' ');
1.1 root 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('*');
1.1.1.2 ! root 85: else outchar(' ');
1.1 root 86: sprintf(str,text[SubLstFmt],i+1
87: ,cfg.sub[usrsub[j][i]]->lname,nulstr
1.1.1.2 ! root 88: ,getposts(&cfg,usrsub[j][i]));
! 89: if(i<9) outchar(' ');
! 90: if(i<99) outchar(' ');
1.1 root 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('*');
1.1.1.2 ! root 203: else outchar(' ');
! 204: if(i<9) outchar(' ');
1.1 root 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('*');
1.1.1.2 ! root 220: else outchar(' ');
1.1 root 221: sprintf(str,text[SubLstFmt],i+1
222: ,cfg.sub[usrsub[curgrp][i]]->lname,nulstr
1.1.1.2 ! root 223: ,getposts(&cfg,usrsub[curgrp][i]));
! 224: if(i<9) outchar(' ');
! 225: if(i<99) outchar(' ');
1.1 root 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++) {
1.1.1.2 ! root 277: subscan[i].ptr=subscan[i].sav_ptr;
! 278: subscan[i].last=subscan[i].sav_last;
1.1 root 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.