|
|
1.1 root 1: /* atcodes.cpp */
2:
3: /* Synchronet "@code" functions */
4:
5: /* $Id: atcodes.cpp,v 1.3 2000/11/14 02:16:57 rswindell 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: /****************************************************************************/
42: /* Returns 0 if invalid @ code. Returns length of @ code if valid. */
43: /****************************************************************************/
44: int sbbs_t::atcodes(char *instr)
45: {
46: char str[64],str2[64],*p,*tp,*sp;
47: int i,len;
48: long l;
49: stats_t stats;
50: node_t node;
51: struct tm tm;
52: struct tm * tm_p;
53:
54: sprintf(str,"%.40s",instr);
55: tp=strchr(str+1,'@');
56: if(!tp) /* no terminating @ */
57: return(0);
58: sp=strchr(str+1,SP);
59: if(sp && sp<tp) /* space before terminating @ */
60: return(0);
61: len=(tp-str)+1;
62: (*tp)=0;
63: sp=(str+1);
64:
65: if(!strcmp(sp,"VER"))
66: bputs(VERSION);
67:
68: else if(!strcmp(sp,"REV"))
69: bprintf("%c",REVISION);
70:
71: else if(!strcmp(sp,"BBS") || !strcmp(sp,"BOARDNAME"))
72: bputs(cfg.sys_name);
73:
74: else if(!strcmp(sp,"BAUD") || !strcmp(sp,"BPS"))
75: bprintf("%lu",cur_rate);
76:
77: else if(!strcmp(sp,"CONN"))
78: bputs(connection);
79:
80: else if(!strcmp(sp,"SYSOP"))
81: bputs(cfg.sys_op);
82:
83: else if(!strcmp(sp,"LOCATION"))
84: bputs(cfg.sys_location);
85:
86: else if(!strcmp(sp,"NODE"))
87: bprintf("%u",cfg.node_num);
88:
89: else if(!strcmp(sp,"TNODE"))
90: bprintf("%u",cfg.sys_nodes);
91:
92: else if(!strcmp(sp,"INETADDR"))
93: bputs(cfg.sys_inetaddr);
94:
95: else if(!strcmp(sp,"FIDOADDR")) {
96: if(cfg.total_faddrs)
97: bputs(faddrtoa(cfg.faddr[0]));
98: }
99:
100: else if(!strcmp(sp,"QWKID"))
101: bputs(cfg.sys_id);
102:
103: else if(!strcmp(sp,"TIME") || !strcmp(sp,"SYSTIME")) {
104: now=time(NULL);
105: tm_p=gmtime(&now);
106: if(tm_p!=NULL)
107: tm=*tm_p;
108: else
109: memset(&tm,0,sizeof(tm));
110: bprintf("%02d:%02d %s"
111: ,tm.tm_hour==0 ? 12
112: : tm.tm_hour>12 ? tm.tm_hour-12
113: : tm.tm_hour, tm.tm_min, tm.tm_hour>11 ? "pm":"am");
114: }
115:
116: else if(!strcmp(sp,"DATE") || !strcmp(sp,"SYSDATE")) {
117: now=time(NULL);
118: bputs(unixtodstr(&cfg,now,str2)); }
119:
120: else if(!strcmp(sp,"TMSG")) {
121: l=0;
122: for(i=0;i<cfg.total_subs;i++)
123: l+=getposts(i); /* l=total posts */
124: bprintf("%lu",l); }
125:
126: else if(!strcmp(sp,"TUSER"))
127: bprintf("%u",lastuser(&cfg));
128:
129: else if(!strcmp(sp,"TFILE")) {
130: l=0;
131: for(i=0;i<cfg.total_dirs;i++)
132: l+=getfiles(i);
133: bprintf("%lu",l); }
134:
135: else if(!strcmp(sp,"TCALLS") || !strcmp(sp,"NUMCALLS")) {
136: getstats(&cfg,0,&stats);
137: bprintf("%lu",stats.logons); }
138:
139: else if(!strcmp(sp,"PREVON") || !strcmp(sp,"LASTCALLERNODE")
140: || !strcmp(sp,"LASTCALLERSYSTEM"))
141: bputs(lastuseron);
142:
143: else if(!strcmp(sp,"CLS"))
144: CLS;
145:
146: else if(!strcmp(sp,"PAUSE") || !strcmp(sp,"MORE"))
147: pause();
148:
149: else if(!strcmp(sp,"NOPAUSE") || !strcmp(sp,"POFF"))
150: sys_status^=SS_PAUSEOFF;
151:
152: else if(!strcmp(sp,"PON") || !strcmp(sp,"AUTOMORE"))
153: sys_status^=SS_PAUSEON;
154:
155: /* NOSTOP */
156:
157: /* STOP */
158:
159: else if(!strcmp(sp,"BELL") || !strcmp(sp,"BEEP"))
160: outchar(BEL);
161:
162: // else if(!strcmp(sp,"EVENT"))
163: // bputs(sectostr(sys_eventtime,str2));
164:
165: /* LASTCALL */
166:
167: else if(!strncmp(sp,"NODE",4)) {
168: i=atoi(sp+4);
169: if(i && i<=cfg.sys_nodes) {
170: getnodedat(i,&node,0);
171: printnodedat(i,&node); } }
172:
173: else if(!strcmp(sp,"WHO"))
174: whos_online(true);
175:
176: /* User Codes */
177:
178: else if(!strcmp(sp,"USER") || !strcmp(sp,"ALIAS") || !strcmp(sp,"NAME"))
179: bputs(useron.alias);
180:
181: else if(!strcmp(sp,"FIRST")) {
182: strcpy(str2,useron.alias);
183: tp=strchr(str2,SP);
184: if(tp) *tp=0;
185: bputs(str2); }
186:
187: else if(!strcmp(sp,"USERNUM"))
188: bprintf("%u",useron.number);
189:
190: else if(!strcmp(sp,"PHONE") || !strcmp(sp,"HOMEPHONE")
191: || !strcmp(sp,"DATAPHONE") || !strcmp(sp,"DATA"))
192: bputs(useron.phone);
193:
194: else if(!strcmp(sp,"ADDR1"))
195: bputs(useron.address);
196:
197: else if(!strcmp(sp,"FROM"))
198: bputs(useron.location);
199:
200: else if(!strcmp(sp,"CITY")) {
201: strcpy(str2,useron.location);
202: p=strchr(str2,',');
203: if(p) {
204: *p=0;
205: bputs(str2); } }
206:
207: else if(!strcmp(sp,"STATE")) {
208: p=strchr(useron.location,',');
209: if(p) {
210: p++;
211: if(*p==SP)
212: p++;
213: bputs(p); } }
214:
215: else if(!strcmp(sp,"CPU") || !strcmp(sp,"HOST"))
216: bputs(useron.comp);
217:
218: else if(!strcmp(sp,"BDATE"))
219: bputs(useron.birth);
220:
221: else if(!strcmp(sp,"CALLS") || !strcmp(sp,"NUMTIMESON"))
222: bprintf("%u",useron.logons);
223:
224: else if(!strcmp(sp,"MEMO"))
225: bputs(unixtodstr(&cfg,useron.pwmod,str2));
226:
227: else if(!strcmp(sp,"SEC") || !strcmp(sp,"SECURITY"))
228: bprintf("%u",useron.level);
229:
230: else if(!strcmp(sp,"SINCE"))
231: bputs(unixtodstr(&cfg,useron.firston,str2));
232:
233: else if(!strcmp(sp,"TIMEON") || !strcmp(sp,"TIMEUSED")) {
234: now=time(NULL);
235: bprintf("%u",(now-logontime)/60); }
236:
237: else if(!strcmp(sp,"TUSED")) { /* Synchronet only */
238: now=time(NULL);
239: bputs(sectostr(now-logontime,str2)+1); }
240:
241: else if(!strcmp(sp,"TLEFT")) { /* Synchronet only */
242: gettimeleft();
243: bputs(sectostr(timeleft,str2)+1); }
244:
245: else if(!strcmp(sp,"TPERD")) /* Synchronet only */
246: bputs(sectostr(cfg.level_timeperday[useron.level],str)+1);
247:
248: else if(!strcmp(sp,"TPERC")) /* Synchronet only */
249: bputs(sectostr(cfg.level_timepercall[useron.level],str)+1);
250:
251: else if(!strcmp(sp,"TIMELIMIT"))
252: bprintf("%u",cfg.level_timepercall[useron.level]);
253:
254: else if(!strcmp(sp,"MINLEFT") || !strcmp(sp,"LEFT") || !strcmp(sp,"TIMELEFT")) {
255: gettimeleft();
256: bprintf("%u",timeleft/60); }
257:
258: else if(!strcmp(sp,"LASTON"))
259: bputs(timestr(&useron.laston));
260:
261: else if(!strcmp(sp,"LASTDATEON"))
262: bputs(unixtodstr(&cfg,useron.laston,str2));
263:
264: else if(!strcmp(sp,"LASTTIMEON")) {
265: tm_p=gmtime(&useron.laston);
266: if(tm_p)
267: tm=*tm_p;
268: else
269: memset(&tm,0,sizeof(tm));
270: bprintf("%02d:%02d %s"
271: ,tm.tm_hour==0 ? 12
272: : tm.tm_hour>12 ? tm.tm_hour-12
273: : tm.tm_hour, tm.tm_min, tm.tm_hour>11 ? "pm":"am");
274: }
275:
276: else if(!strcmp(sp,"MSGLEFT") || !strcmp(sp,"MSGSLEFT"))
277: bprintf("%u",useron.posts);
278:
279: else if(!strcmp(sp,"MSGREAD"))
280: bprintf("%u",posts_read);
281:
282: else if(!strcmp(sp,"FREESPACE"))
283: bprintf("%lu",getfreediskspace(cfg.temp_dir));
284:
285: else if(!strcmp(sp,"UPBYTES"))
286: bprintf("%lu",useron.ulb);
287:
288: else if(!strcmp(sp,"UPK"))
289: bprintf("%lu",useron.ulb/1024L);
290:
291: else if(!strcmp(sp,"UPS") || !strcmp(sp,"UPFILES"))
292: bprintf("%u",useron.uls);
293:
294: else if(!strcmp(sp,"DLBYTES"))
295: bprintf("%lu",useron.dlb);
296:
297: else if(!strcmp(sp,"DOWNK"))
298: bprintf("%lu",useron.dlb/1024L);
299:
300: else if(!strcmp(sp,"DOWNS") || !strcmp(sp,"DLFILES"))
301: bprintf("%u",useron.dls);
302:
303: else if(!strcmp(sp,"LASTNEW"))
304: bputs(unixtodstr(&cfg,ns_time,str2));
305:
306: else if(!strcmp(sp,"NEWFILETIME"))
307: bputs(timestr(&ns_time));
308:
309: /* MAXDL */
310:
311: else if(!strcmp(sp,"MAXDK") || !strcmp(sp,"DLKLIMIT") || !strcmp(sp,"KBLIMIT"))
312: bprintf("%lu",cfg.level_freecdtperday[useron.level]/1024L);
313:
314: else if(!strcmp(sp,"DAYBYTES")) /* amt of free cdts used today */
315: bprintf("%lu",cfg.level_freecdtperday[useron.level]-useron.freecdt);
316:
317: else if(!strcmp(sp,"BYTELIMIT"))
318: bprintf("%lu",cfg.level_freecdtperday[useron.level]);
319:
320: else if(!strcmp(sp,"KBLEFT"))
321: bprintf("%lu",(useron.cdt+useron.freecdt)/1024L);
322:
323: else if(!strcmp(sp,"BYTESLEFT"))
324: bprintf("%lu",useron.cdt+useron.freecdt);
325:
326: else if(!strcmp(sp,"CONF"))
327: bprintf("%s %s"
328: ,usrgrps ? cfg.grp[usrgrp[curgrp]]->sname :nulstr
329: ,usrgrps ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
330:
331: else if(!strcmp(sp,"CONFNUM"))
332: bprintf("%u %u",curgrp+1,cursub[curgrp]+1);
333:
334: else if(!strcmp(sp,"NUMDIR"))
335: bprintf("%u %u",usrlibs ? curlib+1 : 0,usrlibs ? curdir[curlib]+1 : 0);
336:
337: else if(!strcmp(sp,"EXDATE") || !strcmp(sp,"EXPDATE"))
338: bputs(unixtodstr(&cfg,useron.expire,str2));
339:
340: else if(!strcmp(sp,"EXPDAYS")) {
341: now=time(NULL);
342: l=useron.expire-now;
343: if(l<0)
344: l=0;
345: bprintf("%u",l/(1440L*60L)); }
346:
347: else if(!strcmp(sp,"MEMO1"))
348: bputs(useron.note);
349:
350: else if(!strcmp(sp,"MEMO2") || !strcmp(sp,"COMPANY"))
351: bputs(useron.name);
352:
353: else if(!strcmp(sp,"ZIP"))
354: bputs(useron.zipcode);
355:
356: else if(!strcmp(sp,"HANGUP"))
357: hangup();
358:
359: else
360: return(syncatcodes(sp, len));
361:
362: return(len);
363: }
364:
365: int sbbs_t::syncatcodes(char *sp, int len)
366: {
367: char str2[128],*tp;
368: stats_t stats;
369:
370: /* Synchronet Specific */
371:
372: if(!strncmp(sp,"SETSTR:",7))
373: strcpy(main_csi.str,sp+7);
374:
375: else if(!strncmp(sp,"EXEC:",5))
376: exec_bin(sp+5,&main_csi);
377:
378: else if(!strncmp(sp,"MENU:",5))
379: menu(sp+5);
380:
381: else if(!strncmp(sp,"TYPE:",5))
382: printfile(cmdstr(sp+5,nulstr,nulstr,str2),0);
383:
384: else if(!strcmp(sp,"QUESTION"))
385: bputs(question);
386:
387: else if(!strncmp(sp,"NAME-L",6))
388: bprintf("%-*.*s",len,len,useron.alias);
389:
390: else if(!strncmp(sp,"NAME-R",6))
391: bprintf("%*.*s",len,len,useron.alias);
392:
393: else if(!strcmp(sp,"HANDLE"))
394: bputs(useron.handle);
395:
396: else if(!strcmp(sp,"CID") || !strcmp(sp,"IP"))
397: bputs(cid);
398:
399: else if(!strcmp(sp,"LOCAL-IP")) {
400: struct in_addr in_addr;
401: in_addr.s_addr=local_addr;
402: bprintf("%s",inet_ntoa(in_addr));
403: }
404:
405: else if(!strcmp(sp,"CRLF")) {
406: CRLF;
407: }
408:
409: else if(!strcmp(sp,"PUSHXY"))
410: ANSI_SAVE();
411:
412: else if(!strcmp(sp,"POPXY"))
413: ANSI_RESTORE();
414:
415: else if(!strcmp(sp,"UP"))
416: rputs("\x1b[A");
417:
418: else if(!strcmp(sp,"DOWN"))
419: rputs("\x1b[B");
420:
421: else if(!strcmp(sp,"RIGHT"))
422: rputs("\x1b[C");
423:
424: else if(!strcmp(sp,"LEFT"))
425: rputs("\x1b[D");
426:
427: else if(!strncmp(sp,"UP:",3))
428: rprintf("\x1b[%dA",atoi(sp+3));
429:
430: else if(!strncmp(sp,"DOWN:",5))
431: rprintf("\x1b[%dB",atoi(sp+5));
432:
433: else if(!strncmp(sp,"LEFT:",5))
434: rprintf("\x1b[%dC",atoi(sp+5));
435:
436: else if(!strncmp(sp,"RIGHT:",6))
437: rprintf("\x1b[%dD",atoi(sp+6));
438:
439: else if(!strncmp(sp,"GOTOXY:",7)) {
440: tp=strchr(sp,',');
441: if(tp!=NULL) {
442: tp++;
443: GOTOXY(atoi(sp+7),atoi(tp));
444: }
445: }
446:
447: else if(!strcmp(sp,"GRP"))
448: bputs(usrgrps ? cfg.grp[usrgrp[curgrp]]->sname : nulstr);
449:
450: else if(!strncmp(sp,"GRP-L",5))
451: bprintf("%-*.*s",len,len,usrgrps ? cfg.grp[usrgrp[curgrp]]->sname : nulstr);
452:
453: else if(!strncmp(sp,"GRP-R",5))
454: bprintf("%*.*s",len,len,usrgrps ? cfg.grp[usrgrp[curgrp]]->sname : nulstr);
455:
456: else if(!strcmp(sp,"GRPL"))
457: bputs(usrgrps ? cfg.grp[usrgrp[curgrp]]->lname : nulstr);
458:
459: else if(!strncmp(sp,"GRPL-L",6))
460: bprintf("%-*.*s",len,len,usrgrps ? cfg.grp[usrgrp[curgrp]]->lname : nulstr);
461:
462: else if(!strncmp(sp,"GRPL-R",6))
463: bprintf("%*.*s",len,len,usrgrps ? cfg.grp[usrgrp[curgrp]]->lname : nulstr);
464:
465: else if(!strcmp(sp,"GN"))
466: bprintf("%u",usrgrps ? curgrp+1 : 0);
467:
468: else if(!strcmp(sp,"GL"))
469: bprintf("%-4u",usrgrps ? curgrp+1 : 0);
470:
471: else if(!strcmp(sp,"GR"))
472: bprintf("%4u",usrgrps ? curgrp+1 : 0);
473:
474: else if(!strcmp(sp,"SUB"))
475: bputs(usrgrps ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
476:
477: else if(!strncmp(sp,"SUB-L",5))
478: bprintf("%-*.*s",len,len,usrgrps
479: ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
480:
481: else if(!strncmp(sp,"SUB-R",5))
482: bprintf("%*.*s",len,len,usrgrps
483: ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
484:
485: else if(!strcmp(sp,"SUBL"))
486: bputs(usrgrps ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
487:
488: else if(!strncmp(sp,"SUBL-L",6))
489: bprintf("%-*.*s",len,len,usrgrps
490: ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
491:
492: else if(!strncmp(sp,"SUBL-R",6))
493: bprintf("%*.*s",len,len,usrgrps
494: ? cfg.sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
495:
496: else if(!strcmp(sp,"SN"))
497: bprintf("%u",usrgrps ? cursub[curgrp]+1 : 0);
498:
499: else if(!strcmp(sp,"SL"))
500: bprintf("%-4u",usrgrps ? cursub[curgrp]+1 : 0);
501:
502: else if(!strcmp(sp,"SR"))
503: bprintf("%4u",usrgrps ? cursub[curgrp]+1 : 0);
504:
505: else if(!strcmp(sp,"LIB"))
506: bputs(usrlibs ? cfg.lib[usrlib[curlib]]->sname : nulstr);
507:
508: else if(!strncmp(sp,"LIB-L",5))
509: bprintf("%-*.*s",len,len,usrlibs ? cfg.lib[usrlib[curlib]]->sname : nulstr);
510:
511: else if(!strncmp(sp,"LIB-R",5))
512: bprintf("%*.*s",len,len,usrlibs ? cfg.lib[usrlib[curlib]]->sname : nulstr);
513:
514: else if(!strcmp(sp,"LIBL"))
515: bputs(usrlibs ? cfg.lib[usrlib[curlib]]->lname : nulstr);
516:
517: else if(!strncmp(sp,"LIBL-L",6))
518: bprintf("%-*.*s",len,len,usrlibs ? cfg.lib[usrlib[curlib]]->lname : nulstr);
519:
520: else if(!strncmp(sp,"LIBL-R",6))
521: bprintf("%*.*s",len,len,usrlibs ? cfg.lib[usrlib[curlib]]->lname : nulstr);
522:
523: else if(!strcmp(sp,"LN"))
524: bprintf("%u",usrlibs ? curlib+1 : 0);
525:
526: else if(!strcmp(sp,"LL"))
527: bprintf("%-4u",usrlibs ? curlib+1 : 0);
528:
529: else if(!strcmp(sp,"LR"))
530: bprintf("%4u",usrlibs ? curlib+1 : 0);
531:
532: else if(!strcmp(sp,"DIR"))
533: bputs(usrlibs ? cfg.dir[usrdir[curlib][curdir[curlib]]]->sname :nulstr);
534:
535: else if(!strncmp(sp,"DIR-L",5))
536: bprintf("%-*.*s",len,len,usrlibs
537: ? cfg.dir[usrdir[curlib][curdir[curlib]]]->sname : nulstr);
538:
539: else if(!strncmp(sp,"DIR-R",5))
540: bprintf("%*.*s",len,len,usrlibs
541: ? cfg.dir[usrdir[curlib][curdir[curlib]]]->sname : nulstr);
542:
543: else if(!strcmp(sp,"DIRL"))
544: bputs(usrlibs ? cfg.dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
545:
546: else if(!strncmp(sp,"DIRL-L",6))
547: bprintf("%-*.*s",len,len,usrlibs
548: ? cfg.dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
549:
550: else if(!strncmp(sp,"DIRL-R",6))
551: bprintf("%*.*s",len,len,usrlibs
552: ? cfg.dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
553:
554: else if(!strcmp(sp,"DN"))
555: bprintf("%u",usrlibs ? curdir[curlib]+1 : 0);
556:
557: else if(!strcmp(sp,"DL"))
558: bprintf("%-4u",usrlibs ? curdir[curlib]+1 : 0);
559:
560: else if(!strcmp(sp,"DR"))
561: bprintf("%4u",usrlibs ? curdir[curlib]+1 : 0);
562:
563: else if(!strcmp(sp,"NOACCESS")) {
564: if(noaccess_str==text[NoAccessTime])
565: bprintf(noaccess_str,noaccess_val/60,noaccess_val%60);
566: else if(noaccess_str==text[NoAccessDay])
567: bprintf(noaccess_str,wday[noaccess_val]);
568: else
569: bprintf(noaccess_str,noaccess_val); }
570:
571: else if(!strcmp(sp,"LAST")) {
572: tp=strrchr(useron.alias,SP);
573: if(tp) tp++;
574: else tp=useron.alias;
575: bputs(tp); }
576:
577: else if(!strcmp(sp,"REAL")) {
578: strcpy(str2,useron.name);
579: tp=strchr(str2,SP);
580: if(tp) *tp=0;
581: bputs(str2); }
582:
583: else if(!strcmp(sp,"FIRSTREAL")) {
584: strcpy(str2,useron.name);
585: tp=strchr(str2,SP);
586: if(tp) *tp=0;
587: bputs(str2); }
588:
589: else if(!strcmp(sp,"LASTREAL")) {
590: tp=strrchr(useron.name,SP);
591: if(tp) tp++;
592: else tp=useron.name;
593: bputs(tp); }
594:
595: else if(!strcmp(sp,"MAILW"))
596: bprintf("%u",getmail(&cfg,useron.number,0));
597:
598: else if(!strcmp(sp,"MAILP"))
599: bprintf("%u",getmail(&cfg,useron.number,1));
600:
601: else if(!strncmp(sp,"MAILW:",6))
602: bprintf("%u",getmail(&cfg,atoi(sp+6),0));
603:
604: else if(!strncmp(sp,"MAILP:",6))
605: bprintf("%u",getmail(&cfg,atoi(sp+6),1));
606:
607: else if(!strcmp(sp,"MSGREPLY"))
608: bprintf("%c",cfg.sys_misc&SM_RA_EMU ? 'R' : 'A');
609:
610: else if(!strcmp(sp,"MSGREREAD"))
611: bprintf("%c",cfg.sys_misc&SM_RA_EMU ? 'A' : 'R');
612:
613: else if(!strncmp(sp,"STATS.",6)) {
614: getstats(&cfg,0,&stats);
615: sp+=6;
616: if(!strcmp(sp,"LOGONS"))
617: bprintf("%u",stats.logons);
618: else if(!strcmp(sp,"LTODAY"))
619: bprintf("%u",stats.ltoday);
620: else if(!strcmp(sp,"TIMEON"))
621: bprintf("%u",stats.timeon);
622: else if(!strcmp(sp,"TTODAY"))
623: bprintf("%u",stats.ttoday);
624: else if(!strcmp(sp,"ULS"))
625: bprintf("%u",stats.uls);
626: else if(!strcmp(sp,"ULB"))
627: bprintf("%u",stats.ulb);
628: else if(!strcmp(sp,"DLS"))
629: bprintf("%u",stats.dls);
630: else if(!strcmp(sp,"DLB"))
631: bprintf("%u",stats.dlb);
632: else if(!strcmp(sp,"PTODAY"))
633: bprintf("%u",stats.ptoday);
634: else if(!strcmp(sp,"ETODAY"))
635: bprintf("%u",stats.etoday);
636: else if(!strcmp(sp,"FTODAY"))
637: bprintf("%u",stats.ftoday);
638: else if(!strcmp(sp,"NUSERS"))
639: bprintf("%u",stats.nusers);
640: }
641:
642: else return(0);
643:
644: return(len);
645: }
646:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.