Annotation of sbbs/sbbs2/execfunc.c, revision 1.1

1.1     ! root        1: #line 1 "EXECFUNC.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: int exec_function(csi_t *csi)
        !             9: {
        !            10:        uchar   str[256],tmp2[128],ch,*p;
        !            11:        int     i,j,k,s,file;
        !            12:        long    l;
        !            13:        stats_t stats;
        !            14:        node_t  node;
        !            15:        file_t  f;
        !            16:        time_t  t;
        !            17: 
        !            18: switch(*(csi->ip++)) {
        !            19: 
        !            20: 
        !            21:        case CS_PRINTFILE_STR:
        !            22:                printfile(csi->str,P_NOATCODES);
        !            23:                return(0);
        !            24: 
        !            25: /********************************/
        !            26: /* General Main Menu Type Stuff */
        !            27: /********************************/
        !            28:        case CS_AUTO_MESSAGE:
        !            29:                automsg();
        !            30:                return(0);
        !            31:        case CS_MINUTE_BANK:
        !            32:                if(sys_misc&SM_TIMEBANK) {      /* Allow users to deposit free time */
        !            33:                        s=(level_timeperday[useron.level]-useron.ttoday)+useron.textra;
        !            34:                        if(s<0) s=0;
        !            35:                        if(s>level_timepercall[useron.level])
        !            36:                                s=level_timepercall[useron.level];
        !            37:                        s-=(now-starttime)/60;
        !            38:                        if(s<0) s=0;
        !            39:                        bprintf(text[FreeMinLeft],s);
        !            40:                        bprintf(text[UserMinutes],ultoac(useron.min,tmp));
        !            41:                        if(max_minutes && useron.min>=max_minutes) {
        !            42:                                bputs(text[YouHaveTooManyMinutes]);
        !            43:                                return(0); }
        !            44:                        if(max_minutes)
        !            45:                                while(s>0 && s+useron.min>max_minutes) s--;
        !            46:                        bprintf(text[FreeMinToDeposit],s);
        !            47:                        s=getnum(s);
        !            48:                        if(s>0) {
        !            49:                                logline("  ","Minute Bank Deposit");
        !            50:                                useron.min=adjustuserrec(useron.number,U_MIN,10,s);
        !            51:                                useron.ttoday=adjustuserrec(useron.number,U_TTODAY,10,s);
        !            52:                                sprintf(str,"Minute Adjustment: %u",s*cdt_min_value);
        !            53:                                logline("*+",str); } }
        !            54: 
        !            55:                if(!(sys_misc&SM_NOCDTCVT)) {
        !            56:                        bprintf(text[ConversionRate],cdt_min_value);
        !            57:                        bprintf(text[UserCredits]
        !            58:                                ,ultoac(useron.cdt,tmp)
        !            59:                                ,ultoac(useron.freecdt,tmp2)
        !            60:                                ,ultoac(level_freecdtperday[useron.level],str));
        !            61:                        bprintf(text[UserMinutes],ultoac(useron.min,tmp));
        !            62:                        if(useron.cdt/102400L<1L) {
        !            63:                                bprintf(text[YouOnlyHaveNCredits],ultoac(useron.cdt,tmp));
        !            64:                                return(0); }
        !            65:                        if(max_minutes && useron.min>=max_minutes) {
        !            66:                                bputs(text[YouHaveTooManyMinutes]);
        !            67:                                return(0); }
        !            68:                        s=useron.cdt/102400L;
        !            69:                        if(max_minutes)
        !            70:                                while(s>0 && (s*cdt_min_value)+useron.min>max_minutes) s--;
        !            71:                        bprintf(text[CreditsToMin],s);
        !            72:                        s=getnum(s);
        !            73:                        if(s>0) {
        !            74:                                logline("  ","Credit to Minute Conversion");
        !            75:                                useron.cdt=adjustuserrec(useron.number,U_CDT,10,-(s*102400L));
        !            76:                                useron.min=adjustuserrec(useron.number,U_MIN,10,s*cdt_min_value);
        !            77:                                sprintf(str,"Credit Adjustment: %ld",-(s*102400L));
        !            78:                                logline("$-",str);
        !            79:                                sprintf(str,"Minute Adjustment: %u",s*cdt_min_value);
        !            80:                                logline("*+",str); } }
        !            81:                return(0);
        !            82:        case CS_CHAT_SECTION:
        !            83:                if(useron.rest&FLAG('C'))
        !            84:                        bputs(text[R_Chat]);
        !            85:                else
        !            86:                        chatsection();
        !            87:                return(0);
        !            88:        case CS_USER_DEFAULTS:
        !            89:                maindflts(useron);
        !            90:                if(!(useron.rest&FLAG('G')))    /* not guest */
        !            91:                        getuserdat(&useron);
        !            92:                return(0);
        !            93:        case CS_TEXT_FILE_SECTION:
        !            94:                text_sec();
        !            95:                return(0);
        !            96:        case CS_INFO_SYSTEM:   /* System information */
        !            97:                bputs(text[SiHdr]);
        !            98:                getstats(0,&stats);
        !            99:                bprintf(text[SiSysName],sys_name);
        !           100:                bprintf(text[SiSysID],sys_id);  /* QWK ID */
        !           101:                for(i=0;i<total_faddrs;i++)
        !           102:                        bprintf(text[SiSysFaddr],faddrtoa(faddr[i]));
        !           103:                if(sys_psname[0])                               /* PostLink/PCRelay */
        !           104:                        bprintf(text[SiSysPsite],sys_psname,sys_psnum);
        !           105:                bprintf(text[SiSysLocation],sys_location);
        !           106:                bprintf(text[SiSysop],sys_op);
        !           107:                bprintf(text[SiSysNodes],sys_nodes);
        !           108:                bprintf(text[SiNodeNumberName],node_num,node_name);
        !           109:                bprintf(text[SiNodePhone],node_phone);
        !           110:                bprintf(text[SiTotalLogons],ultoac(stats.logons,tmp));
        !           111:                bprintf(text[SiLogonsToday],ultoac(stats.ltoday,tmp));
        !           112:                bprintf(text[SiTotalTime],ultoac(stats.timeon,tmp));
        !           113:                bprintf(text[SiTimeToday],ultoac(stats.ttoday,tmp));
        !           114:                ver();
        !           115:                if(yesno(text[ViewSysInfoFileQ])) {
        !           116:                        CLS;
        !           117:                        sprintf(str,"%sSYSTEM.MSG",text_dir);
        !           118:                        printfile(str,0); }
        !           119:                if(yesno(text[ViewLogonMsgQ])) {
        !           120:                        CLS;
        !           121:                        menu("LOGON"); }
        !           122:                return(0);
        !           123:        case CS_INFO_SUBBOARD:   /* Sub-board information */
        !           124:                if(!usrgrps) return(0);
        !           125:                subinfo(usrsub[curgrp][cursub[curgrp]]);
        !           126:                return(0);
        !           127:        case CS_INFO_DIRECTORY:   /* Sub-board information */
        !           128:                if(!usrlibs) return(0);
        !           129:                dirinfo(usrdir[curlib][curdir[curlib]]);
        !           130:                return(0);
        !           131:        case CS_INFO_VERSION:   /* Version */
        !           132:                ver();
        !           133:                return(0);
        !           134:        case CS_INFO_USER:       /* User's statistics */
        !           135:                bprintf(text[UserStats],useron.alias,useron.number);
        !           136:                unixtodos(useron.laston,&date,&curtime);
        !           137:                bprintf(text[UserDates]
        !           138:                        ,unixtodstr(useron.firston,str)
        !           139:                        ,unixtodstr(useron.expire,tmp)
        !           140:                        ,unixtodstr(useron.laston,tmp2)
        !           141:                        ,curtime.ti_hour,curtime.ti_min);
        !           142:                bprintf(text[UserTimes]
        !           143:                        ,useron.timeon,useron.ttoday
        !           144:                        ,level_timeperday[useron.level]
        !           145:                        ,useron.tlast
        !           146:                        ,level_timepercall[useron.level]
        !           147:                        ,useron.textra);
        !           148:                bprintf(text[UserLogons]
        !           149:                        ,useron.logons,useron.ltoday
        !           150:                        ,level_callsperday[useron.level],useron.posts
        !           151:                        ,i ? 100/i : useron.posts>useron.logons ? 100 : 0
        !           152:                        ,useron.ptoday);
        !           153:                bprintf(text[UserEmails]
        !           154:                        ,useron.emails,useron.fbacks
        !           155:                        ,getmail(useron.number,0),useron.etoday);
        !           156:                CRLF;
        !           157:                bprintf(text[UserUploads]
        !           158:                        ,ultoac(useron.ulb,tmp),useron.uls);
        !           159:                bprintf(text[UserDownloads]
        !           160:                        ,ultoac(useron.dlb,tmp),useron.dls,nulstr);
        !           161:                bprintf(text[UserCredits],ultoac(useron.cdt,tmp)
        !           162:                        ,ultoac(useron.freecdt,tmp2)
        !           163:                        ,ultoac(level_freecdtperday[useron.level],str));
        !           164:                bprintf(text[UserMinutes],ultoac(useron.min,tmp));
        !           165:                return(0);
        !           166:        case CS_INFO_XFER_POLICY:
        !           167:                if(!usrlibs) return(0);
        !           168:                sprintf(str,"%sMENU\\TPOLICY.*",text_dir);
        !           169:                if(fexist(str))
        !           170:                        menu("TPOLICY");
        !           171:                else {
        !           172:                        bprintf(text[TransferPolicyHdr],sys_name);
        !           173:                        bprintf(text[TpUpload]
        !           174:                                ,dir[usrdir[curlib][curdir[curlib]]]->up_pct);
        !           175:                        bprintf(text[TpDownload]
        !           176:                                ,dir[usrdir[curlib][curdir[curlib]]]->dn_pct);
        !           177:                        }
        !           178:                return(0);
        !           179:        case CS_XTRN_EXEC:
        !           180:                csi->logic=LOGIC_TRUE;
        !           181:                for(i=0;i<total_xtrns;i++)
        !           182:                        if(!stricmp(xtrn[i]->code,csi->str))
        !           183:                                break;
        !           184:                if(i<total_xtrns)
        !           185:                        exec_xtrn(i);
        !           186:                else
        !           187:                        csi->logic=LOGIC_FALSE;
        !           188:                return(0);
        !           189:        case CS_XTRN_SECTION:
        !           190:                if(useron.rest&FLAG('X'))
        !           191:                        bputs(text[R_ExternalPrograms]);
        !           192:                else
        !           193:                        xtrn_sec();     /* If external available, don't pause */
        !           194:                return(0);
        !           195:        case CS_LOGOFF:
        !           196:                if(!noyes(text[LogOffQ])) {
        !           197:                        if(logoff_mod[0])
        !           198:                                exec_bin(logoff_mod,csi);
        !           199:                        user_event(EVENT_LOGOFF);
        !           200:                        menu("LOGOFF");
        !           201:                        SYNC;
        !           202:                        hangup(); }
        !           203:                return(0);
        !           204:        case CS_LOGOFF_FAST:
        !           205:                SYNC;
        !           206:                if(online==ON_REMOTE && !(mdm_misc&MDM_NODTR))
        !           207:                        dtr(0);
        !           208:                hangup();
        !           209:                return(0);
        !           210:        case CS_NODELIST_ALL:
        !           211:                CRLF;
        !           212:                bputs(text[NodeLstHdr]);
        !           213:                for(i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
        !           214:                        getnodedat(i,&node,0);
        !           215:                        printnodedat(i,node); }
        !           216:                return(0);
        !           217:        case CS_NODELIST_USERS:
        !           218:                whos_online(1);
        !           219:                return(0);
        !           220:        case CS_USERLIST_SUB:
        !           221:                userlist(UL_SUB);
        !           222:                return(0);
        !           223:        case CS_USERLIST_DIR:
        !           224:                userlist(UL_DIR);
        !           225:                return(0);
        !           226:        case CS_USERLIST_ALL:
        !           227:                userlist(UL_ALL);
        !           228:                return(0);
        !           229:        case CS_USERLIST_LOGONS:
        !           230:                sprintf(str,"%sLOGON.LST",data_dir);
        !           231:                if(flength(str)<1) {
        !           232:                        bputs("\r\n\r\n");
        !           233:                        bputs(text[NoOneHasLoggedOnToday]); }
        !           234:                else {
        !           235:                        bputs(text[CallersToday]);
        !           236:                        printfile(str,P_NOATCODES|P_OPENCLOSE);
        !           237:                        CRLF; }
        !           238:                return(0);
        !           239:        case CS_PAGE_SYSOP:
        !           240:                ch=kbd_state();          /* Check scroll lock */
        !           241:                if(ch&16 || (sys_chat_ar[0] && chk_ar(sys_chat_ar,useron))
        !           242:                        || useron.exempt&FLAG('C')) {
        !           243:                        sysop_page();
        !           244:                        return(0); }
        !           245:                bprintf(text[SysopIsNotAvailable],sys_op);
        !           246:                return(0);
        !           247:        case CS_PAGE_GURU:
        !           248:                csi->logic=LOGIC_FALSE;
        !           249:                for(i=0;i<total_gurus;i++)
        !           250:                        if(!stricmp(csi->str,guru[i]->code)
        !           251:                                && chk_ar(guru[i]->ar,useron))
        !           252:                                break;
        !           253:                if(i>=total_gurus)
        !           254:                        return(0);
        !           255:         sprintf(str,"%s%s.DAT",ctrl_dir,guru[i]->code);
        !           256:                if((file=nopen(str,O_RDONLY))==-1) {
        !           257:                        errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
        !           258:                        return(0); }
        !           259:                if((p=MALLOC(filelength(file)+1))==NULL) {
        !           260:                        close(file);
        !           261:                        errormsg(WHERE,ERR_ALLOC,str,filelength(file)+1);
        !           262:                        return(0); }
        !           263:                read(file,p,filelength(file));
        !           264:                p[filelength(file)]=0;
        !           265:                close(file);
        !           266:                localguru(p,i);
        !           267:                FREE(p);
        !           268:                csi->logic=LOGIC_TRUE;
        !           269:                return(0);
        !           270:        case CS_PRIVATE_CHAT:
        !           271:                privchat();
        !           272:                return(0);
        !           273:        case CS_PRIVATE_MESSAGE:
        !           274:                nodemsg();
        !           275:                return(0);
        !           276: 
        !           277: /*******************/
        !           278: /* Sysop Functions */
        !           279: /*******************/
        !           280:        case CS_USER_EDIT:
        !           281:                useredit(csi->str[0] ? finduser(csi->str) : 0,0);
        !           282:                return(0);
        !           283: 
        !           284: 
        !           285: /******************/
        !           286: /* Mail Functions */
        !           287: /******************/
        !           288: 
        !           289:        case CS_MAIL_READ:       /* Read E-mail */
        !           290:                readmail(useron.number,MAIL_YOUR);
        !           291:                return(0);
        !           292:        case CS_MAIL_READ_SENT:           /* Kill/read sent mail */
        !           293:                if(useron.rest&FLAG('K'))
        !           294:                        bputs(text[R_ReadSentMail]);
        !           295:                else
        !           296:                        readmail(useron.number,MAIL_SENT);
        !           297:                return(0);
        !           298:        case CS_MAIL_READ_ALL:
        !           299:                readmail(useron.number,MAIL_ALL);
        !           300:                return(0);
        !           301:        case CS_MAIL_SEND:               /* Send E-mail */
        !           302:                if(strchr(csi->str,'@')) {
        !           303:                        i=1;
        !           304:                        netmail(csi->str,nulstr,0); }
        !           305:                else if((i=finduser(csi->str))!=0)
        !           306:                        email(i,nulstr,nulstr,WM_EMAIL);
        !           307:                csi->logic=!i;
        !           308:                return(0);
        !           309:        case CS_MAIL_SEND_FEEDBACK:       /* Feedback */
        !           310:                if((i=finduser(csi->str))!=0)
        !           311:                        email(i,text[ReFeedback],nulstr,WM_EMAIL);
        !           312:                csi->logic=!i;
        !           313:                return(0);
        !           314:        case CS_MAIL_SEND_NETMAIL:
        !           315:                bputs(text[EnterNetMailAddress]);
        !           316:                if(getstr(str,60,K_LINE)) {
        !           317:                        netmail(str,nulstr,0);
        !           318:                        csi->logic=LOGIC_TRUE; }
        !           319:                else
        !           320:                        csi->logic=LOGIC_FALSE;
        !           321:                return(0);
        !           322: 
        !           323:        case CS_MAIL_SEND_NETFILE:
        !           324:                bputs(text[EnterNetMailAddress]);
        !           325:                if(getstr(str,60,K_LINE)) {
        !           326:                        netmail(str,nulstr,WM_FILE);
        !           327:                        csi->logic=LOGIC_TRUE; }
        !           328:                else
        !           329:                        csi->logic=LOGIC_FALSE;
        !           330:                return(0);
        !           331: 
        !           332:        case CS_MAIL_SEND_FILE:   /* Upload Attached File to E-mail */
        !           333:                if(strchr(csi->str,'@')) {
        !           334:                        i=1;
        !           335:                        netmail(csi->str,nulstr,WM_FILE); }
        !           336:                else if((i=finduser(csi->str))!=0)
        !           337:                        email(i,nulstr,nulstr,WM_EMAIL|WM_FILE);
        !           338:                csi->logic=!i;
        !           339:                return(0);
        !           340:        case CS_MAIL_SEND_BULK:
        !           341:                if(csi->str[0])
        !           342:                        p=arstr(0,csi->str);
        !           343:                else
        !           344:                        p=nulstr;
        !           345:                bulkmail(p);
        !           346:                if(p && p[0])
        !           347:                        FREE(p);
        !           348:                return(0);
        !           349: 
        !           350:     case CS_INC_MAIN_CMDS:
        !           351:         main_cmds++;
        !           352:         return(0);
        !           353: 
        !           354:     case CS_INC_FILE_CMDS:
        !           355:         xfer_cmds++;
        !           356:         return(0);
        !           357: 
        !           358:     case CS_SYSTEM_LOG:                 /* System log */
        !           359:                if(!chksyspass(0))
        !           360:             return(0);
        !           361:         unixtodos(now,&date,&curtime);
        !           362:         sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG",data_dir
        !           363:             ,date.da_mon,date.da_day,date.da_year-1900);
        !           364:         printfile(str,0);
        !           365:         return(0);
        !           366:     case CS_SYSTEM_YLOG:                /* Yesterday's log */
        !           367:                if(!chksyspass(0))
        !           368:             return(0);
        !           369:         now-=(ulong)60L*24L*60L;
        !           370:         unixtodos(now,&date,&curtime);
        !           371:         sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG",data_dir
        !           372:             ,date.da_mon,date.da_day,date.da_year-1900);
        !           373:         printfile(str,0);
        !           374:         return(0);
        !           375:     case CS_SYSTEM_STATS:               /* System Statistics */
        !           376:         bputs(text[SystemStatsHdr]);
        !           377:         getstats(0,&stats);
        !           378:         bprintf(text[StatsTotalLogons],ultoac(stats.logons,tmp));
        !           379:         bprintf(text[StatsLogonsToday],ultoac(stats.ltoday,tmp));
        !           380:         bprintf(text[StatsTotalTime],ultoac(stats.timeon,tmp));
        !           381:         bprintf(text[StatsTimeToday],ultoac(stats.ttoday,tmp));
        !           382:         bprintf(text[StatsUploadsToday],ultoac(stats.ulb,tmp)
        !           383:             ,stats.uls);
        !           384:         bprintf(text[StatsDownloadsToday],ultoac(stats.dlb,tmp)
        !           385:             ,stats.dls);
        !           386:         bprintf(text[StatsPostsToday],ultoac(stats.ptoday,tmp));
        !           387:         bprintf(text[StatsEmailsToday],ultoac(stats.etoday,tmp));
        !           388:         bprintf(text[StatsFeedbacksToday],ultoac(stats.ftoday,tmp));
        !           389:         return(0);
        !           390:     case CS_NODE_STATS:              /* Node Statistics */
        !           391:         i=atoi(csi->str);
        !           392:         if(i>sys_nodes) {
        !           393:             bputs(text[InvalidNode]);
        !           394:             return(0); }
        !           395:         if(!i) i=node_num;
        !           396:         bprintf(text[NodeStatsHdr],i);
        !           397:         getstats(i,&stats);
        !           398:         bprintf(text[StatsTotalLogons],ultoac(stats.logons,tmp));
        !           399:         bprintf(text[StatsLogonsToday],ultoac(stats.ltoday,tmp));
        !           400:         bprintf(text[StatsTotalTime],ultoac(stats.timeon,tmp));
        !           401:         bprintf(text[StatsTimeToday],ultoac(stats.ttoday,tmp));
        !           402:         bprintf(text[StatsUploadsToday],ultoac(stats.ulb,tmp)
        !           403:             ,stats.uls);
        !           404:         bprintf(text[StatsDownloadsToday],ultoac(stats.dlb,tmp)
        !           405:             ,stats.dls);
        !           406:         bprintf(text[StatsPostsToday],ultoac(stats.ptoday,tmp));
        !           407:         bprintf(text[StatsEmailsToday],ultoac(stats.etoday,tmp));
        !           408:         bprintf(text[StatsFeedbacksToday],ultoac(stats.ftoday,tmp));
        !           409:         return(0);
        !           410:     case CS_CHANGE_USER:                 /* Change to another user */
        !           411:                if(!chksyspass(0))
        !           412:             return(0);
        !           413:         bputs(text[ChUserPrompt]);
        !           414:         if(!getstr(str,LEN_ALIAS,K_UPPER))
        !           415:             return(0);
        !           416:         if((i=finduser(str))==0)
        !           417:             return(0);
        !           418:         if(online==ON_REMOTE) {
        !           419:             getuserrec(i,U_LEVEL,2,str);
        !           420:             if(atoi(str)>logon_ml) {
        !           421:                 getuserrec(i,U_PASS,8,tmp);
        !           422:                 bputs(text[ChUserPwPrompt]);
        !           423:                 console|=CON_R_ECHOX;
        !           424:                 if(!(sys_misc&SM_ECHO_PW))
        !           425:                     console|=CON_L_ECHOX;
        !           426:                 getstr(str,8,K_UPPER);
        !           427:                 console&=~(CON_R_ECHOX|CON_L_ECHOX);
        !           428:                 if(strcmp(str,tmp))
        !           429:                     return(0); } }
        !           430:         putmsgptrs();
        !           431:                putuserrec(useron.number,U_CURSUB,8
        !           432:                        ,sub[usrsub[curgrp][cursub[curgrp]]]->code);
        !           433:                putuserrec(useron.number,U_CURDIR,8
        !           434:                        ,dir[usrdir[curlib][curdir[curlib]]]->code);
        !           435:         useron.number=i;
        !           436:         getuserdat(&useron);
        !           437:                getnodedat(node_num,&thisnode,1);
        !           438:                thisnode.useron=useron.number;
        !           439:                putnodedat(node_num,thisnode);
        !           440:         getmsgptrs();
        !           441:         if(REALSYSOP) sys_status&=~SS_TMPSYSOP;
        !           442:         else sys_status|=SS_TMPSYSOP;
        !           443:         statline=sys_def_stat;
        !           444:         statusline();
        !           445:         sprintf(str,"Changed into %s #%u",useron.alias,useron.number);
        !           446:         logline("S+",str);
        !           447:         return(0);
        !           448:     case CS_SHOW_MEM:
        !           449: #ifdef __MSDOS__
        !           450:          bprintf(text[NBytesFreeMemory],farcoreleft());
        !           451: #endif
        !           452:         return(0);
        !           453:     case CS_ERROR_LOG:
        !           454:         sprintf(str,"%sERROR.LOG",data_dir);
        !           455:         if(fexist(str)) {
        !           456:             bputs(text[ErrorLogHdr]);
        !           457:             printfile(str,0);
        !           458:             if(!noyes(text[DeleteErrorLogQ]))
        !           459:                 remove(str); }
        !           460:         else
        !           461:             bputs(text[NoErrorLogExists]);
        !           462:         for(i=1;i<=sys_nodes;i++) {
        !           463:             getnodedat(i,&node,0);
        !           464:             if(node.errors)
        !           465:                 break; }
        !           466:         if(i<=sys_nodes || criterrs) {
        !           467:             if(!noyes(text[ClearErrCounter])) {
        !           468:                 for(i=1;i<=sys_nodes;i++) {
        !           469:                     getnodedat(i,&node,1);
        !           470:                     node.errors=0;
        !           471:                     putnodedat(i,node); }
        !           472:                 criterrs=0; } }
        !           473:         return(0);
        !           474:     case CS_ANSI_CAPTURE:           /* Capture ANSI codes */
        !           475:         sys_status^=SS_ANSCAP;
        !           476:         bprintf(text[ANSICaptureIsNow]
        !           477:             ,sys_status&SS_ANSCAP ? text[ON] : text[OFF]);
        !           478:         return(0);
        !           479:     case CS_LIST_TEXT_FILE:              /* View ASCII/ANSI/Ctrl-A file */
        !           480:                if(!chksyspass(0))
        !           481:             return(0);
        !           482:         bputs(text[Filename]);
        !           483:         if(getstr(str,60,K_UPPER))
        !           484:             printfile(str,0);
        !           485:         return(0);
        !           486:     case CS_EDIT_TEXT_FILE:              /* Edit ASCII/Ctrl-A file */
        !           487:                if(!chksyspass(0))
        !           488:             return(0);
        !           489:         bputs(text[Filename]);
        !           490:         if(getstr(str,60,K_UPPER))
        !           491:             editfile(str);
        !           492:         return(0);
        !           493:     case CS_GURU_LOG:
        !           494:         sprintf(str,"%sGURU.LOG",data_dir);
        !           495:         if(fexist(str)) {
        !           496:             printfile(str,0);
        !           497:             CRLF;
        !           498:             if(!noyes(text[DeleteGuruLogQ]))
        !           499:                 remove(str); }
        !           500:         return(0);
        !           501:     case CS_FILE_SET_ALT_PATH:
        !           502:         altul=atoi(csi->str);
        !           503:         if(altul>altpaths)
        !           504:             altul=0;
        !           505:         bprintf(text[AltULPathIsNow],altul ? altpath[altul-1] : text[OFF]);
        !           506:         return(0);
        !           507:     case CS_FILE_RESORT_DIRECTORY:
        !           508:         for(i=1;i<=sys_nodes;i++)
        !           509:             if(i!=node_num) {
        !           510:                 getnodedat(i,&node,0);
        !           511:                 if(node.status==NODE_INUSE
        !           512:                     || node.status==NODE_QUIET)
        !           513:                     break; }
        !           514: 
        !           515:         if(i<=sys_nodes) {
        !           516:             bputs(text[ResortWarning]);
        !           517:             return(0); }
        !           518: 
        !           519:         if(!stricmp(csi->str,"ALL")) {     /* all libraries */
        !           520:             for(i=0;i<usrlibs;i++)
        !           521:                 for(j=0;j<usrdirs[i];j++)
        !           522:                     resort(usrdir[i][j]);
        !           523:             return(0); }
        !           524:         if(!stricmp(csi->str,"LIB")) {     /* current library */
        !           525:             for(i=0;i<usrdirs[curlib];i++)
        !           526:                 resort(usrdir[curlib][i]);
        !           527:             return(0); }
        !           528:         resort(usrdir[curlib][curdir[curlib]]);
        !           529:         return(0);
        !           530: 
        !           531:     case CS_FILE_GET:
        !           532: 
        !           533:         if(!fexist(csi->str)) {
        !           534:             bputs(text[FileNotFound]);
        !           535:             return(0); }
        !           536:                if(!chksyspass(0))
        !           537:             return(0);
        !           538: 
        !           539:        case CS_FILE_SEND:
        !           540: 
        !           541:         menu("DLPROT");
        !           542:         mnemonics(text[ProtocolOrQuit]);
        !           543:         strcpy(str,"Q");
        !           544:         for(i=0;i<total_prots;i++)
        !           545:             if(prot[i]->dlcmd[0] && chk_ar(prot[i]->ar,useron)) {
        !           546:                 sprintf(tmp,"%c",prot[i]->mnemonic);
        !           547:                 strcat(str,tmp); }
        !           548:         ch=getkeys(str,0);
        !           549:         if(ch=='Q' || sys_status&SS_ABORT) {
        !           550:             return(0); }
        !           551:         for(i=0;i<total_prots;i++)
        !           552:             if(prot[i]->mnemonic==ch && chk_ar(prot[i]->ar,useron))
        !           553:                 break;
        !           554:         if(i<total_prots) {
        !           555:                        protocol(cmdstr(prot[i]->dlcmd,csi->str,csi->str,str),0);
        !           556:             autohangup(); }
        !           557:         return(0);
        !           558: 
        !           559:     case CS_FILE_PUT:
        !           560:                if(!chksyspass(0))
        !           561:             return(0);
        !           562:         menu("ULPROT");
        !           563:         mnemonics(text[ProtocolOrQuit]);
        !           564:         strcpy(str,"Q");
        !           565:         for(i=0;i<total_prots;i++)
        !           566:             if(prot[i]->ulcmd[0] && chk_ar(prot[i]->ar,useron)) {
        !           567:                 sprintf(tmp,"%c",prot[i]->mnemonic);
        !           568:                 strcat(str,tmp); }
        !           569:         ch=getkeys(str,0);
        !           570:         if(ch=='Q' || sys_status&SS_ABORT) {
        !           571:             lncntr=0;
        !           572:             return(0); }
        !           573:         for(i=0;i<total_prots;i++)
        !           574:             if(prot[i]->mnemonic==ch && chk_ar(prot[i]->ar,useron))
        !           575:                 break;
        !           576:         if(i<total_prots) {
        !           577:                        protocol(cmdstr(prot[i]->ulcmd,csi->str,csi->str,str),0);
        !           578:             autohangup(); }
        !           579:         return(0);
        !           580: 
        !           581:     case CS_FILE_UPLOAD_BULK:
        !           582: 
        !           583:         if(!usrlibs) return(0);
        !           584: 
        !           585:         if(!stricmp(csi->str,"ALL")) {     /* all libraries */
        !           586:             for(i=0;i<usrlibs;i++)
        !           587:                 for(j=0;j<usrdirs[i];j++) {
        !           588:                     if(lib[i]->offline_dir==usrdir[i][j])
        !           589:                         continue;
        !           590:                     if(bulkupload(usrdir[i][j])) return(0); }
        !           591:             return(0); }
        !           592:         if(!stricmp(csi->str,"LIB")) {     /* current library */
        !           593:             for(i=0;i<usrdirs[curlib];i++) {
        !           594:                 if(lib[usrlib[curlib]]->offline_dir
        !           595:                     ==usrdir[curlib][i])
        !           596:                     continue;
        !           597:                 if(bulkupload(usrdir[curlib][i])) return(0); }
        !           598:             return(0); }
        !           599:         bulkupload(usrdir[curlib][curdir[curlib]]); /* current dir */
        !           600:         return(0);
        !           601: 
        !           602:     case CS_FILE_FIND_OLD:
        !           603:     case CS_FILE_FIND_OPEN:
        !           604:     case CS_FILE_FIND_OFFLINE:
        !           605:     case CS_FILE_FIND_OLD_UPLOADS:
        !           606:         if(!usrlibs) return(0);
        !           607:         if(!getfilespec(tmp))
        !           608:             return(0);
        !           609:         padfname(tmp,str);
        !           610:         k=0;
        !           611:         bputs("\r\nSearching ");
        !           612:         if(!stricmp(csi->str,"ALL"))
        !           613:             bputs("all libraries");
        !           614:         else if(!stricmp(csi->str,"LIB"))
        !           615:             bputs("library");
        !           616:         else
        !           617:             bputs("directory");
        !           618:         bputs(" for files ");
        !           619:         if(*(csi->ip-1)==CS_FILE_FIND_OLD_UPLOADS) {
        !           620:             l=FI_OLDUL;
        !           621:             bprintf("uploaded before %s\r\n",timestr(&ns_time)); }
        !           622:         else if(*(csi->ip-1)==CS_FILE_FIND_OLD) { /* go by download date */
        !           623:             l=FI_OLD;
        !           624:             bprintf("not downloaded since %s\r\n",timestr(&ns_time)); }
        !           625:         else if(*(csi->ip-1)==CS_FILE_FIND_OFFLINE) {
        !           626:             l=FI_OFFLINE;
        !           627:             bputs("not online...\r\n"); }
        !           628:         else {
        !           629:             l=FI_CLOSE;
        !           630:             bputs("currently open...\r\n"); }
        !           631:         if(!stricmp(csi->str,"ALL")) {
        !           632:             for(i=0;i<usrlibs;i++)
        !           633:                 for(j=0;j<usrdirs[i];j++) {
        !           634:                     if(lib[i]->offline_dir==usrdir[i][j])
        !           635:                         continue;
        !           636:                     if((s=listfileinfo(usrdir[i][j],str,l))==-1)
        !           637:                         return(0);
        !           638:                     else k+=s; } }
        !           639:         else if(!stricmp(csi->str,"LIB")) {
        !           640:             for(i=0;i<usrdirs[curlib];i++) {
        !           641:                 if(lib[usrlib[curlib]]->offline_dir==usrdir[curlib][i])
        !           642:                         continue;
        !           643:                 if((s=listfileinfo(usrdir[curlib][i],str,l))==-1)
        !           644:                     return(0);
        !           645:                 else k+=s; } }
        !           646:         else {
        !           647:             s=listfileinfo(usrdir[curlib][curdir[curlib]],str,l);
        !           648:             if(s==-1)
        !           649:                 return(0);
        !           650:             k=s; }
        !           651:         if(k>1) {
        !           652:             bprintf(text[NFilesListed],k); }
        !           653:                return(0); }
        !           654: 
        !           655: if(*(csi->ip-1)>=CS_MSG_SET_AREA && *(csi->ip-1)<=CS_MSG_UNUSED1) {
        !           656:        csi->ip--;
        !           657:        return(execmsg(csi)); }
        !           658: 
        !           659: if(*(csi->ip-1)>=CS_FILE_SET_AREA && *(csi->ip-1)<=CS_FILE_UNUSED1) {
        !           660:        csi->ip--;
        !           661:        return(execfile(csi)); }
        !           662: 
        !           663: errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1));
        !           664: return(0);
        !           665: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.