home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / ATCODES.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  13.0 KB  |  500 lines

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