|
|
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.