|
|
1.1 root 1: #line 1 "ATCODES.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: extern char *wday[]; /* 3 char days of week */
9: char question[128];
10:
11: int syncatcodes(char *sp, int len)
12: {
13: char str2[128],*tp;
14:
15: /* Synchronet Specific */
16:
17: if(!strncmp(sp,"SETSTR:",7))
18: strcpy(main_csi.str,sp+7);
19:
20: else if(!strncmp(sp,"EXEC:",5))
21: exec_bin(sp+5,&main_csi);
22:
23: else if(!strncmp(sp,"MENU:",5))
24: menu(sp+5);
25:
26: else if(!strncmp(sp,"TYPE:",5))
27: printfile(cmdstr(sp+5,nulstr,nulstr,str2),0);
28:
29: else if(!strcmp(sp,"QUESTION"))
30: bputs(question);
31:
32: else if(!strncmp(sp,"NAME-L",6))
33: bprintf("%-*.*s",len,len,useron.alias);
34:
35: else if(!strncmp(sp,"NAME-R",6))
36: bprintf("%*.*s",len,len,useron.alias);
37:
38: else if(!strcmp(sp,"HANDLE"))
39: bputs(useron.handle);
40:
41: else if(!strcmp(sp,"GRP"))
42: bputs(usrgrps ? grp[usrgrp[curgrp]]->sname : nulstr);
43:
44: else if(!strncmp(sp,"GRP-L",5))
45: bprintf("%-*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->sname : nulstr);
46:
47: else if(!strncmp(sp,"GRP-R",5))
48: bprintf("%*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->sname : nulstr);
49:
50: else if(!strcmp(sp,"GRPL"))
51: bputs(usrgrps ? grp[usrgrp[curgrp]]->lname : nulstr);
52:
53: else if(!strncmp(sp,"GRPL-L",6))
54: bprintf("%-*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->lname : nulstr);
55:
56: else if(!strncmp(sp,"GRPL-R",6))
57: bprintf("%*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->lname : nulstr);
58:
59: else if(!strcmp(sp,"GN"))
60: bprintf("%u",usrgrps ? curgrp+1 : 0);
61:
62: else if(!strcmp(sp,"GL"))
63: bprintf("%-4u",usrgrps ? curgrp+1 : 0);
64:
65: else if(!strcmp(sp,"GR"))
66: bprintf("%4u",usrgrps ? curgrp+1 : 0);
67:
68: else if(!strcmp(sp,"SUB"))
69: bputs(usrgrps ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
70:
71: else if(!strncmp(sp,"SUB-L",5))
72: bprintf("%-*.*s",len,len,usrgrps
73: ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
74:
75: else if(!strncmp(sp,"SUB-R",5))
76: bprintf("%*.*s",len,len,usrgrps
77: ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
78:
79: else if(!strcmp(sp,"SUBL"))
80: bputs(usrgrps ? sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
81:
82: else if(!strncmp(sp,"SUBL-L",6))
83: bprintf("%-*.*s",len,len,usrgrps
84: ? sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
85:
86: else if(!strncmp(sp,"SUBL-R",6))
87: bprintf("%*.*s",len,len,usrgrps
88: ? sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
89:
90: else if(!strcmp(sp,"SN"))
91: bprintf("%u",usrgrps ? cursub[curgrp]+1 : 0);
92:
93: else if(!strcmp(sp,"SL"))
94: bprintf("%-4u",usrgrps ? cursub[curgrp]+1 : 0);
95:
96: else if(!strcmp(sp,"SR"))
97: bprintf("%4u",usrgrps ? cursub[curgrp]+1 : 0);
98:
99: else if(!strcmp(sp,"LIB"))
100: bputs(usrlibs ? lib[usrlib[curlib]]->sname : nulstr);
101:
102: else if(!strncmp(sp,"LIB-L",5))
103: bprintf("%-*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->sname : nulstr);
104:
105: else if(!strncmp(sp,"LIB-R",5))
106: bprintf("%*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->sname : nulstr);
107:
108: else if(!strcmp(sp,"LIBL"))
109: bputs(usrlibs ? lib[usrlib[curlib]]->lname : nulstr);
110:
111: else if(!strncmp(sp,"LIBL-L",6))
112: bprintf("%-*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->lname : nulstr);
113:
114: else if(!strncmp(sp,"LIBL-R",6))
115: bprintf("%*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->lname : nulstr);
116:
117: else if(!strcmp(sp,"LN"))
118: bprintf("%u",usrlibs ? curlib+1 : 0);
119:
120: else if(!strcmp(sp,"LL"))
121: bprintf("%-4u",usrlibs ? curlib+1 : 0);
122:
123: else if(!strcmp(sp,"LR"))
124: bprintf("%4u",usrlibs ? curlib+1 : 0);
125:
126: else if(!strcmp(sp,"DIR"))
127: bputs(usrlibs ? dir[usrdir[curlib][curdir[curlib]]]->sname :nulstr);
128:
129: else if(!strncmp(sp,"DIR-L",5))
130: bprintf("%-*.*s",len,len,usrlibs
131: ? dir[usrdir[curlib][curdir[curlib]]]->sname : nulstr);
132:
133: else if(!strncmp(sp,"DIR-R",5))
134: bprintf("%*.*s",len,len,usrlibs
135: ? dir[usrdir[curlib][curdir[curlib]]]->sname : nulstr);
136:
137: else if(!strcmp(sp,"DIRL"))
138: bputs(usrlibs ? dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
139:
140: else if(!strncmp(sp,"DIRL-L",6))
141: bprintf("%-*.*s",len,len,usrlibs
142: ? dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
143:
144: else if(!strncmp(sp,"DIRL-R",6))
145: bprintf("%*.*s",len,len,usrlibs
146: ? dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
147:
148: else if(!strcmp(sp,"DN"))
149: bprintf("%u",usrlibs ? curdir[curlib]+1 : 0);
150:
151: else if(!strcmp(sp,"DL"))
152: bprintf("%-4u",usrlibs ? curdir[curlib]+1 : 0);
153:
154: else if(!strcmp(sp,"DR"))
155: bprintf("%4u",usrlibs ? curdir[curlib]+1 : 0);
156:
157: else if(!strcmp(sp,"NOACCESS")) {
158: if(noaccess_str==text[NoAccessTime])
159: bprintf(noaccess_str,noaccess_val/60,noaccess_val%60);
160: else if(noaccess_str==text[NoAccessDay])
161: bprintf(noaccess_str,wday[noaccess_val]);
162: else
163: bprintf(noaccess_str,noaccess_val); }
164:
165: else if(!strcmp(sp,"LAST")) {
166: tp=strrchr(useron.alias,SP);
167: if(tp) tp++;
168: else tp=useron.alias;
169: bputs(tp); }
170:
171: else if(!strcmp(sp,"REAL")) {
172: strcpy(str2,useron.name);
173: tp=strchr(str2,SP);
174: if(tp) *tp=0;
175: bputs(str2); }
176:
177: else if(!strcmp(sp,"FIRSTREAL")) {
178: strcpy(str2,useron.name);
179: tp=strchr(str2,SP);
180: if(tp) *tp=0;
181: bputs(str2); }
182:
183: else if(!strcmp(sp,"LASTREAL")) {
184: tp=strrchr(useron.name,SP);
185: if(tp) tp++;
186: else tp=useron.name;
187: bputs(tp); }
188:
189: else if(!strcmp(sp,"MAILW"))
190: bprintf("%u",getmail(useron.number,0));
191:
192: else if(!strcmp(sp,"MAILP"))
193: bprintf("%u",getmail(useron.number,1));
194:
195: else if(!strncmp(sp,"MAILW:",6))
196: bprintf("%u",getmail(atoi(sp+6),0));
197:
198: else if(!strncmp(sp,"MAILP:",6))
199: bprintf("%u",getmail(atoi(sp+6),1));
200:
201: else return(0);
202:
203: return(len);
204: }
205:
206: /****************************************************************************/
207: /* Returns 0 if invalid @ code. Returns length of @ code if valid. */
208: /****************************************************************************/
209: int atcodes(char *instr)
210: {
211: char str[64],str2[64],*p,*tp,*sp;
212: int i,len;
213: long l;
214: stats_t stats;
215: node_t node;
216: struct dfree d;
217:
218: sprintf(str,"%.40s",instr);
219: tp=strchr(str+1,'@');
220: if(!tp) /* no terminating @ */
221: return(0);
222: sp=strchr(str+1,SP);
223: if(sp && sp<tp) /* space before terminating @ */
224: return(0);
225: len=(tp-str)+1;
226: (*tp)=0;
227: sp=(str+1);
228:
229: if(!strcmp(sp,"VER"))
230: bputs(VERSION);
231:
232: else if(!strcmp(sp,"BBS") || !strcmp(sp,"BOARDNAME"))
233: bputs(sys_name);
234:
235: else if(!strcmp(sp,"BAUD") || !strcmp(sp,"BPS"))
236: bprintf("%lu",cur_rate);
237:
238: else if(!strcmp(sp,"SYSOP"))
239: bputs(sys_op);
240:
241: else if(!strcmp(sp,"NODE"))
242: bprintf("%u",node_num);
243:
244: else if(!strcmp(sp,"TIME") || !strcmp(sp,"SYSTIME")) {
245: now=time(NULL);
246: unixtodos(now,&date,&curtime);
247: bprintf("%02d:%02d %s"
248: ,curtime.ti_hour==0 ? 12
249: : curtime.ti_hour>12 ? curtime.ti_hour-12
250: : curtime.ti_hour, curtime.ti_min, curtime.ti_hour>11 ? "pm":"am"); }
251:
252: else if(!strcmp(sp,"DATE") || !strcmp(sp,"SYSDATE")) {
253: now=time(NULL);
254: bputs(unixtodstr(now,str2)); }
255:
256: else if(!strcmp(sp,"TMSG")) {
257: l=0;
258: for(i=0;i<total_subs;i++)
259: l+=getposts(i); /* l=total posts */
260: bprintf("%lu",l); }
261:
262: else if(!strcmp(sp,"TUSER"))
263: bprintf("%u",lastuser());
264:
265: else if(!strcmp(sp,"TFILE")) {
266: l=0;
267: for(i=0;i<total_dirs;i++)
268: l+=getfiles(i);
269: bprintf("%lu",l); }
270:
271: else if(!strcmp(sp,"TCALLS") || !strcmp(sp,"NUMCALLS")) {
272: getstats(0,&stats);
273: bprintf("%lu",stats.logons); }
274:
275: else if(!strcmp(sp,"PREVON") || !strcmp(sp,"LASTCALLERNODE")
276: || !strcmp(sp,"LASTCALLERSYSTEM"))
277: bputs(lastuseron);
278:
279: else if(!strcmp(sp,"CLS"))
280: CLS;
281:
282: else if(!strcmp(sp,"PAUSE") || !strcmp(sp,"MORE"))
283: pause();
284:
285: else if(!strcmp(sp,"NOPAUSE") || !strcmp(sp,"POFF"))
286: sys_status^=SS_PAUSEOFF;
287:
288: else if(!strcmp(sp,"PON") || !strcmp(sp,"AUTOMORE"))
289: sys_status^=SS_PAUSEON;
290:
291: /* NOSTOP */
292:
293: /* STOP */
294:
295: else if(!strcmp(sp,"BELL") || !strcmp(sp,"BEEP"))
296: outchar(7);
297:
298: // else if(!strcmp(sp,"EVENT"))
299: // bputs(sectostr(sys_eventtime,str2));
300:
301: /* LASTCALL */
302:
303: else if(!strncmp(sp,"NODE",4)) {
304: i=atoi(sp+4);
305: if(i && i<=sys_nodes) {
306: getnodedat(i,&node,0);
307: printnodedat(i,node); } }
308:
309: else if(!strcmp(sp,"WHO"))
310: whos_online(1);
311:
312: /* User Codes */
313:
314: else if(!strcmp(sp,"USER") || !strcmp(sp,"ALIAS") || !strcmp(sp,"NAME"))
315: bputs(useron.alias);
316:
317: else if(!strcmp(sp,"FIRST")) {
318: strcpy(str2,useron.alias);
319: tp=strchr(str2,SP);
320: if(tp) *tp=0;
321: bputs(str2); }
322:
323: else if(!strcmp(sp,"PHONE") || !strcmp(sp,"HOMEPHONE")
324: || !strcmp(sp,"DATAPHONE") || !strcmp(sp,"DATA"))
325: bputs(useron.phone);
326:
327: else if(!strcmp(sp,"ADDR1"))
328: bputs(useron.address);
329:
330: else if(!strcmp(sp,"FROM"))
331: bputs(useron.location);
332:
333: else if(!strcmp(sp,"CITY")) {
334: strcpy(str2,useron.location);
335: p=strchr(str2,',');
336: if(p) {
337: *p=0;
338: bputs(str2); } }
339:
340: else if(!strcmp(sp,"STATE")) {
341: p=strchr(useron.location,',');
342: if(p) {
343: p++;
344: if(*p==SP)
345: p++;
346: bputs(p); } }
347:
348: else if(!strcmp(sp,"CPU"))
349: bputs(useron.comp);
350:
351: else if(!strcmp(sp,"BDATE"))
352: bputs(useron.birth);
353:
354: else if(!strcmp(sp,"CALLS") || !strcmp(sp,"NUMTIMESON"))
355: bprintf("%u",useron.logons);
356:
357: else if(!strcmp(sp,"MEMO"))
358: bputs(unixtodstr(useron.pwmod,str2));
359:
360: else if(!strcmp(sp,"SEC") || !strcmp(sp,"SECURITY"))
361: bprintf("%u",useron.level);
362:
363: else if(!strcmp(sp,"SINCE"))
364: bputs(unixtodstr(useron.firston,str2));
365:
366: else if(!strcmp(sp,"TIMEON") || !strcmp(sp,"TIMEUSED")) {
367: now=time(NULL);
368: bprintf("%u",(now-logontime)/60); }
369:
370: else if(!strcmp(sp,"TUSED")) { /* Synchronet only */
371: now=time(NULL);
372: bputs(sectostr(now-logontime,str2)+1); }
373:
374: else if(!strcmp(sp,"TLEFT")) { /* Synchronet only */
375: gettimeleft();
376: bputs(sectostr(timeleft,str2)+1); }
377:
378: else if(!strcmp(sp,"TPERD")) /* Synchronet only */
379: bputs(sectostr(level_timeperday[useron.level],str)+1);
380:
381: else if(!strcmp(sp,"TPERC")) /* Synchronet only */
382: bputs(sectostr(level_timepercall[useron.level],str)+1);
383:
384: else if(!strcmp(sp,"TIMELIMIT"))
385: bprintf("%u",level_timepercall[useron.level]);
386:
387: else if(!strcmp(sp,"MINLEFT") || !strcmp(sp,"LEFT") || !strcmp(sp,"TIMELEFT")) {
388: gettimeleft();
389: bprintf("%u",timeleft/60); }
390:
391: else if(!strcmp(sp,"LASTON"))
392: bputs(timestr(&useron.laston));
393:
394: else if(!strcmp(sp,"LASTDATEON"))
395: bputs(unixtodstr(useron.laston,str2));
396:
397: else if(!strcmp(sp,"LASTTIMEON")) {
398: unixtodos(useron.laston,&date,&curtime);
399: bprintf("%02d:%02d %s"
400: ,curtime.ti_hour==0 ? 12
401: : curtime.ti_hour>12 ? curtime.ti_hour-12
402: : curtime.ti_hour, curtime.ti_min, curtime.ti_hour>11 ? "pm":"am"); }
403:
404: else if(!strcmp(sp,"MSGLEFT") || !strcmp(sp,"MSGSLEFT"))
405: bprintf("%u",useron.posts);
406:
407: else if(!strcmp(sp,"MSGREAD"))
408: bprintf("%u",posts_read);
409:
410: else if(!strcmp(sp,"FREESPACE")) {
411: if(temp_dir[1]==':')
412: i=temp_dir[0]-'A'+1;
413: else i=0;
414: getdfree(i,&d);
415: if(d.df_sclus!=0xffff)
416: bprintf("%lu",(ulong)d.df_bsec*(ulong)d.df_sclus*(ulong)d.df_avail); }
417:
418: else if(!strcmp(sp,"UPBYTES"))
419: bprintf("%lu",useron.ulb);
420:
421: else if(!strcmp(sp,"UPK"))
422: bprintf("%lu",useron.ulb/1024L);
423:
424: else if(!strcmp(sp,"UPS") || !strcmp(sp,"UPFILES"))
425: bprintf("%u",useron.uls);
426:
427: else if(!strcmp(sp,"DLBYTES"))
428: bprintf("%lu",useron.dlb);
429:
430: else if(!strcmp(sp,"DOWNK"))
431: bprintf("%lu",useron.dlb/1024L);
432:
433: else if(!strcmp(sp,"DOWNS") || !strcmp(sp,"DLFILES"))
434: bprintf("%u",useron.dls);
435:
436: else if(!strcmp(sp,"LASTNEW"))
437: bputs(unixtodstr(ns_time,str2));
438:
439: else if(!strcmp(sp,"NEWFILETIME"))
440: bputs(timestr(&ns_time));
441:
442: /* MAXDL */
443:
444: else if(!strcmp(sp,"MAXDK") || !strcmp(sp,"DLKLIMIT") || !strcmp(sp,"KBLIMIT"))
445: bprintf("%lu",level_freecdtperday[useron.level]/1024L);
446:
447: else if(!strcmp(sp,"DAYBYTES")) /* amt of free cdts used today */
448: bprintf("%lu",level_freecdtperday[useron.level]-useron.freecdt);
449:
450: else if(!strcmp(sp,"BYTELIMIT"))
451: bprintf("%lu",level_freecdtperday[useron.level]);
452:
453: else if(!strcmp(sp,"KBLEFT"))
454: bprintf("%lu",(useron.cdt+useron.freecdt)/1024L);
455:
456: else if(!strcmp(sp,"BYTESLEFT"))
457: bprintf("%lu",useron.cdt+useron.freecdt);
458:
459: else if(!strcmp(sp,"CONF"))
460: bprintf("%s %s"
461: ,usrgrps ? grp[usrgrp[curgrp]]->sname :nulstr
462: ,usrgrps ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
463:
464: else if(!strcmp(sp,"CONFNUM"))
465: bprintf("%u %u",curgrp+1,cursub[curgrp]+1);
466:
467: else if(!strcmp(sp,"NUMDIR"))
468: bprintf("%u %u",usrlibs ? curlib+1 : 0,usrlibs ? curdir[curlib]+1 : 0);
469:
470: else if(!strcmp(sp,"EXDATE") || !strcmp(sp,"EXPDATE"))
471: bputs(unixtodstr(useron.expire,str2));
472:
473: else if(!strcmp(sp,"EXPDAYS")) {
474: now=time(NULL);
475: l=useron.expire-now;
476: if(l<0)
477: l=0;
478: bprintf("%u",l/(1440L*60L)); }
479:
480: else if(!strcmp(sp,"MEMO1"))
481: bputs(useron.note);
482:
483: else if(!strcmp(sp,"MEMO2") || !strcmp(sp,"COMPANY"))
484: bputs(useron.name);
485:
486: else if(!strcmp(sp,"ZIP"))
487: bputs(useron.zipcode);
488:
489: else if(!strcmp(sp,"HANGUP"))
490: hangup();
491:
492: else
493: return(syncatcodes(sp,len));
494:
495: return(len);
496: }
497:
498:
499:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.