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