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