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