Annotation of sbbs/sbbs2/execfunc.c, revision 1.1.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.