|
|
1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.