|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.