|
|
1.1 ! root 1: #line 1 "EXECFILE.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 execfile(csi_t *csi) ! 9: { ! 10: uchar str[256],tmp2[128],*path,ch,*p; ! 11: int i,j,k,s,file,x,y; ! 12: long l; ! 13: stats_t stats; ! 14: node_t node; ! 15: file_t f; ! 16: time_t t; ! 17: csi_t bin; ! 18: ! 19: switch(*(csi->ip++)) { ! 20: ! 21: case CS_FILE_SELECT_AREA: ! 22: csi->logic=LOGIC_FALSE; ! 23: if(!usrlibs) return(0); ! 24: while(online) { ! 25: j=0; ! 26: if(usrlibs>1) { ! 27: sprintf(str,"%sMENU\\LIBS.*",text_dir); ! 28: if(fexist(str)) ! 29: menu("LIBS"); ! 30: else { ! 31: bputs(text[CfgLibLstHdr]); ! 32: for(i=0;i<usrlibs && !msgabort();i++) { ! 33: if(i==curlib) ! 34: outchar('*'); ! 35: else outchar(SP); ! 36: if(i<9) outchar(SP); ! 37: if(i<99) outchar(SP); ! 38: bprintf(text[CfgLibLstFmt] ! 39: ,i+1,lib[usrlib[i]]->lname); } } ! 40: sprintf(str,text[JoinWhichLib],curlib+1); ! 41: mnemonics(str); ! 42: j=getnum(usrlibs); ! 43: if((int)j==-1) ! 44: return(0); ! 45: if(!j) ! 46: j=curlib; ! 47: else ! 48: j--; } ! 49: sprintf(str,"%sMENU\\DIRS%u.*",text_dir,usrlib[j]+1); ! 50: if(fexist(str)) { ! 51: sprintf(str,"DIRS%u",usrlib[j]+1); ! 52: menu(str); } ! 53: else { ! 54: CLS; ! 55: bprintf(text[DirLstHdr],lib[usrlib[j]]->lname); ! 56: for(i=0;i<usrdirs[j] && !msgabort();i++) { ! 57: if(i==curdir[j]) outchar('*'); ! 58: else outchar(SP); ! 59: sprintf(str,text[DirLstFmt],i+1 ! 60: ,dir[usrdir[j][i]]->lname,nulstr ! 61: ,getfiles(usrdir[j][i])); ! 62: if(i<9) outchar(SP); ! 63: if(i<99) outchar(SP); ! 64: bputs(str); } } ! 65: sprintf(str,text[JoinWhichDir],curdir[j]+1); ! 66: mnemonics(str); ! 67: i=getnum(usrdirs[j]); ! 68: if((int)i==-1) { ! 69: if(usrlibs==1) ! 70: return(0); ! 71: continue; } ! 72: if(!i) ! 73: i=curdir[j]; ! 74: else ! 75: i--; ! 76: curlib=j; ! 77: curdir[curlib]=i; ! 78: csi->logic=LOGIC_TRUE; ! 79: return(0); } ! 80: return(0); ! 81: ! 82: case CS_FILE_GET_DIR_NUM: ! 83: ! 84: if(useron.misc&COLDKEYS) { ! 85: i=atoi(csi->str); ! 86: if(i && i<=usrdirs[curlib] && usrlibs) ! 87: curdir[curlib]=i-1; ! 88: return(0); } ! 89: ! 90: ch=getkey(K_UPPER); ! 91: outchar(ch); ! 92: if((ch&0xf)*10<=usrdirs[curlib] && (ch&0xf) && usrlibs) { ! 93: i=(ch&0xf)*10; ! 94: ch=getkey(K_UPPER); ! 95: if(!isdigit(ch) && ch!=CR) { ! 96: ungetkey(ch); ! 97: curdir[curlib]=(i/10)-1; ! 98: return(0); } ! 99: outchar(ch); ! 100: if(ch==CR) { ! 101: curdir[curlib]=(i/10)-1; ! 102: return(0); } ! 103: logch(ch,0); ! 104: i+=ch&0xf; ! 105: if(i*10<=usrdirs[curlib]) { /* 100+ dirs */ ! 106: i*=10; ! 107: ch=getkey(K_UPPER); ! 108: if(!isdigit(ch) && ch!=CR) { ! 109: ungetkey(ch); ! 110: curdir[curlib]=(i/10)-1; ! 111: return(0); } ! 112: outchar(ch); ! 113: if(ch==CR) { ! 114: curdir[curlib]=(i/10)-1; ! 115: return(0); } ! 116: logch(ch,0); ! 117: i+=ch&0xf; } ! 118: if(i<=usrdirs[curlib]) ! 119: curdir[curlib]=i-1; ! 120: return(0); } ! 121: if((ch&0xf)<=usrdirs[curlib] && (ch&0xf) && usrlibs) ! 122: curdir[curlib]=(ch&0xf)-1; ! 123: return(0); ! 124: ! 125: case CS_FILE_GET_LIB_NUM: ! 126: ! 127: if(useron.misc&COLDKEYS) { ! 128: i=atoi(csi->str); ! 129: if(i && i<=usrlibs) ! 130: curlib=i-1; ! 131: return(0); } ! 132: ! 133: ch=getkey(K_UPPER); ! 134: outchar(ch); ! 135: if((ch&0xf)*10<=usrlibs && (ch&0xf)) { ! 136: i=(ch&0xf)*10; ! 137: ch=getkey(K_UPPER); ! 138: if(!isdigit(ch) && ch!=CR) { ! 139: ungetkey(ch); ! 140: curlib=(i/10)-1; ! 141: return(0); } ! 142: outchar(ch); ! 143: if(ch==CR) { ! 144: curlib=(i/10)-1; ! 145: return(0); } ! 146: logch(ch,0); ! 147: i+=ch&0xf; ! 148: if(i<=usrlibs) ! 149: curlib=i-1; ! 150: return(0); } ! 151: if((ch&0xf)<=usrlibs && (ch&0xf)) ! 152: curlib=(ch&0xf)-1; ! 153: return(0); ! 154: ! 155: case CS_FILE_SHOW_LIBRARIES: ! 156: if(!usrlibs) return(0); ! 157: sprintf(str,"%sMENU\\LIBS.*",text_dir); ! 158: if(fexist(str)) { ! 159: menu("LIBS"); ! 160: return(0); } ! 161: bputs(text[LibLstHdr]); ! 162: for(i=0;i<usrlibs && !msgabort();i++) { ! 163: if(i==curlib) ! 164: outchar('*'); ! 165: else outchar(SP); ! 166: if(i<9) outchar(SP); ! 167: bprintf(text[LibLstFmt],i+1 ! 168: ,lib[usrlib[i]]->lname,nulstr,usrdirs[i]); } ! 169: return(0); ! 170: ! 171: case CS_FILE_SHOW_DIRECTORIES: ! 172: if(!usrlibs) return(0); ! 173: sprintf(str,"%sMENU\\DIRS%u.*",text_dir,usrlib[curlib]+1); ! 174: if(fexist(str)) { ! 175: sprintf(str,"DIRS%u",usrlib[curlib]+1); ! 176: menu(str); ! 177: return(0); } ! 178: CRLF; ! 179: bprintf(text[DirLstHdr],lib[usrlib[curlib]]->lname); ! 180: for(i=0;i<usrdirs[curlib] && !msgabort();i++) { ! 181: if(i==curdir[curlib]) outchar('*'); ! 182: else outchar(SP); ! 183: sprintf(str,text[DirLstFmt],i+1 ! 184: ,dir[usrdir[curlib][i]]->lname,nulstr ! 185: ,getfiles(usrdir[curlib][i])); ! 186: if(i<9) outchar(SP); ! 187: if(i<99) outchar(SP); ! 188: bputs(str); } ! 189: return(0); ! 190: ! 191: case CS_FILE_LIBRARY_UP: ! 192: curlib++; ! 193: if(curlib>=usrlibs) ! 194: curlib=0; ! 195: return(0); ! 196: case CS_FILE_LIBRARY_DOWN: ! 197: if(!curlib) ! 198: curlib=usrlibs-1; ! 199: else curlib--; ! 200: return(0); ! 201: case CS_FILE_DIRECTORY_UP: ! 202: if(!usrlibs) return(0); ! 203: curdir[curlib]++; ! 204: if(curdir[curlib]>=usrdirs[curlib]) ! 205: curdir[curlib]=0; ! 206: return(0); ! 207: case CS_FILE_DIRECTORY_DOWN: ! 208: if(!usrlibs) return(0); ! 209: if(!curdir[curlib]) ! 210: curdir[curlib]=usrdirs[curlib]-1; ! 211: else curdir[curlib]--; ! 212: return(0); ! 213: case CS_FILE_SET_AREA: ! 214: csi->logic=LOGIC_TRUE; ! 215: for(i=0;i<usrlibs;i++) ! 216: for(j=0;j<usrdirs[i];j++) ! 217: if(!stricmp(csi->str,dir[usrdir[i][j]]->code)) { ! 218: curlib=i; ! 219: curdir[i]=j; ! 220: return(0); } ! 221: csi->logic=LOGIC_FALSE; ! 222: return(0); ! 223: case CS_FILE_SET_LIBRARY: ! 224: csi->logic=LOGIC_TRUE; ! 225: for(i=0;i<usrlibs;i++) ! 226: if(!stricmp(lib[usrlib[i]]->sname,csi->str)) ! 227: break; ! 228: if(i<usrlibs) ! 229: curlib=i; ! 230: else ! 231: csi->logic=LOGIC_FALSE; ! 232: return(0); ! 233: ! 234: case CS_FILE_UPLOAD: ! 235: csi->logic=LOGIC_FALSE; ! 236: if(useron.rest&FLAG('U')) { ! 237: bputs(text[R_Upload]); ! 238: return(0); } ! 239: if(usrlibs) { ! 240: i=usrdir[curlib][curdir[curlib]]; ! 241: if(upload_dir!=INVALID_DIR ! 242: && !chk_ar(dir[i]->ul_ar,useron)) ! 243: i=upload_dir; } ! 244: else ! 245: i=upload_dir; ! 246: ! 247: if((uint)i==INVALID_DIR || !chk_ar(dir[i]->ul_ar,useron)) { ! 248: bputs(text[CantUploadHere]); ! 249: return(0); } ! 250: ! 251: if(gettotalfiles(i)>=dir[i]->maxfiles) ! 252: bputs(text[DirFull]); ! 253: else { ! 254: upload(i); ! 255: csi->logic=LOGIC_TRUE; } ! 256: return(0); ! 257: case CS_FILE_UPLOAD_USER: ! 258: csi->logic=LOGIC_FALSE; ! 259: if(user_dir==INVALID_DIR) { ! 260: bputs(text[NoUserDir]); ! 261: return(0); } ! 262: if(gettotalfiles(user_dir)>=dir[user_dir]->maxfiles) ! 263: bputs(text[UserDirFull]); ! 264: else if(useron.rest&FLAG('U')) ! 265: bputs(text[R_Upload]); ! 266: else if(!chk_ar(dir[user_dir]->ul_ar,useron)) ! 267: bputs(text[CantUploadToUser]); ! 268: else { ! 269: upload(user_dir); ! 270: csi->logic=LOGIC_TRUE; } ! 271: return(0); ! 272: case CS_FILE_UPLOAD_SYSOP: ! 273: csi->logic=LOGIC_FALSE; ! 274: if(sysop_dir==INVALID_DIR) { ! 275: bputs(text[NoSysopDir]); ! 276: return(0); } ! 277: if(gettotalfiles(sysop_dir)>=dir[sysop_dir]->maxfiles) ! 278: bputs(text[DirFull]); ! 279: else if(useron.rest&FLAG('U')) ! 280: bputs(text[R_Upload]); ! 281: else if(!chk_ar(dir[sysop_dir]->ul_ar,useron)) ! 282: bputs(text[CantUploadToSysop]); ! 283: else { ! 284: upload(sysop_dir); ! 285: csi->logic=LOGIC_TRUE; } ! 286: return(0); ! 287: case CS_FILE_DOWNLOAD: ! 288: if(!usrlibs) return(0); ! 289: if(useron.rest&FLAG('D')) { ! 290: bputs(text[R_Download]); ! 291: return(0); } ! 292: padfname(csi->str,str); ! 293: strupr(str); ! 294: if(!listfileinfo(usrdir[curlib][curdir[curlib]],str,FI_DOWNLOAD)) { ! 295: bputs(text[SearchingAllDirs]); ! 296: for(i=0;i<usrdirs[curlib];i++) ! 297: if(i!=curdir[curlib] && ! 298: (s=listfileinfo(usrdir[curlib][i],str,FI_DOWNLOAD))!=0) ! 299: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 300: return(0); ! 301: bputs(text[SearchingAllLibs]); ! 302: for(i=0;i<usrlibs;i++) { ! 303: if(i==curlib) continue; ! 304: for(j=0;j<usrdirs[i];j++) ! 305: if((s=listfileinfo(usrdir[i][j],str,FI_DOWNLOAD))!=0) ! 306: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 307: return(0); } } ! 308: return(0); ! 309: case CS_FILE_DOWNLOAD_USER: /* Download from user dir */ ! 310: csi->logic=LOGIC_FALSE; ! 311: if(user_dir==INVALID_DIR) { ! 312: bputs(text[NoUserDir]); ! 313: return(0); } ! 314: if(useron.rest&FLAG('D')) { ! 315: bputs(text[R_Download]); ! 316: return(0); } ! 317: CRLF; ! 318: if(!listfileinfo(user_dir,nulstr,FI_USERXFER)) ! 319: bputs(text[NoFilesForYou]); ! 320: else ! 321: csi->logic=LOGIC_TRUE; ! 322: return(0); ! 323: case CS_FILE_DOWNLOAD_BATCH: ! 324: if(batdn_total && yesno(text[DownloadBatchQ])) { ! 325: start_batch_download(); ! 326: csi->logic=LOGIC_TRUE; } ! 327: else ! 328: csi->logic=LOGIC_FALSE; ! 329: return(0); ! 330: case CS_FILE_BATCH_ADD_LIST: ! 331: batch_add_list(csi->str); ! 332: return(0); ! 333: case CS_FILE_BATCH_ADD: ! 334: csi->logic=LOGIC_FALSE; ! 335: if(!csi->str[0]) ! 336: return(0); ! 337: padfname(csi->str,f.name); ! 338: strupr(f.name); ! 339: for(x=0;x<usrlibs;x++) { ! 340: for(y=0;y<usrdirs[x];y++) ! 341: if(findfile(usrdir[x][y],f.name)) ! 342: break; ! 343: if(y<usrdirs[x]) ! 344: break; } ! 345: if(x>=usrlibs) ! 346: return(0); ! 347: f.dir=usrdir[x][y]; ! 348: getfileixb(&f); ! 349: f.size=0; ! 350: getfiledat(&f); ! 351: addtobatdl(f); ! 352: csi->logic=LOGIC_TRUE; ! 353: return(0); ! 354: case CS_FILE_BATCH_CLEAR: ! 355: if(!batdn_total) { ! 356: csi->logic=LOGIC_FALSE; ! 357: return(0); } ! 358: csi->logic=LOGIC_TRUE; ! 359: for(i=0;i<batdn_total;i++) { ! 360: f.dir=batdn_dir[i]; ! 361: f.datoffset=batdn_offset[i]; ! 362: f.size=batdn_size[i]; ! 363: strcpy(f.name,batdn_name[i]); ! 364: closefile(f); } ! 365: batdn_total=0; ! 366: return(0); ! 367: ! 368: case CS_FILE_VIEW: ! 369: if(!usrlibs) return(0); ! 370: padfname(csi->str,str); ! 371: strupr(str); ! 372: csi->logic=LOGIC_TRUE; ! 373: if(listfiles(usrdir[curlib][curdir[curlib]],str,0,FL_VIEW)) ! 374: return(0); ! 375: bputs(text[SearchingAllDirs]); ! 376: for(i=0;i<usrdirs[curlib];i++) { ! 377: if(i==curdir[curlib]) continue; ! 378: if(listfiles(usrdir[curlib][i],str,0,FL_VIEW)) ! 379: break; } ! 380: if(i<usrdirs[curlib]) ! 381: return(0); ! 382: bputs(text[SearchingAllLibs]); ! 383: for(i=0;i<usrlibs;i++) { ! 384: if(i==curlib) continue; ! 385: for(j=0;j<usrdirs[i];j++) ! 386: if(listfiles(usrdir[i][j],str,0,FL_VIEW)) ! 387: return(0); } ! 388: csi->logic=LOGIC_FALSE; ! 389: bputs(text[FileNotFound]); ! 390: return(0); ! 391: case CS_FILE_LIST: /* List files in current dir */ ! 392: if(!usrlibs) return(0); ! 393: csi->logic=LOGIC_FALSE; ! 394: if(!getfiles(usrdir[curlib][curdir[curlib]])) { ! 395: bputs(text[EmptyDir]); ! 396: return(0); } ! 397: padfname(csi->str,str); ! 398: strupr(str); ! 399: s=listfiles(usrdir[curlib][curdir[curlib]],str,0,0); ! 400: if(s>1) { ! 401: bprintf(text[NFilesListed],s); } ! 402: csi->logic=!s; ! 403: return(0); ! 404: case CS_FILE_LIST_EXTENDED: /* Extended Information on files */ ! 405: if(!usrlibs) return(0); ! 406: padfname(csi->str,str); ! 407: strupr(str); ! 408: if(!listfileinfo(usrdir[curlib][curdir[curlib]],str,FI_INFO)) { ! 409: bputs(text[SearchingAllDirs]); ! 410: for(i=0;i<usrdirs[curlib];i++) ! 411: if(i!=curdir[curlib] && (s=listfileinfo(usrdir[curlib][i] ! 412: ,str,FI_INFO))!=0) ! 413: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 414: return(0); ! 415: bputs(text[SearchingAllLibs]); ! 416: for(i=0;i<usrlibs;i++) { ! 417: if(i==curlib) continue; ! 418: for(j=0;j<usrdirs[i];j++) ! 419: if((s=listfileinfo(usrdir[i][j],str,FI_INFO))!=0) ! 420: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 421: return(0); } } ! 422: return(0); ! 423: case CS_FILE_FIND_TEXT: /* Find text in descriptions */ ! 424: scandirs(FL_FINDDESC); ! 425: return(0); ! 426: case CS_FILE_FIND_TEXT_ALL: /* Find text in descriptions */ ! 427: scanalldirs(FL_FINDDESC); ! 428: return(0); ! 429: case CS_FILE_FIND_NAME: /* Find text in descriptions */ ! 430: scandirs(FL_NO_HDR); ! 431: return(0); ! 432: case CS_FILE_FIND_NAME_ALL: /* Find text in descriptions */ ! 433: scanalldirs(FL_NO_HDR); ! 434: return(0); ! 435: case CS_FILE_BATCH_SECTION: ! 436: batchmenu(); ! 437: return(0); ! 438: case CS_FILE_TEMP_SECTION: ! 439: temp_xfer(); ! 440: return(0); ! 441: case CS_FILE_PTRS_CFG: ! 442: csi->logic=!inputnstime(&ns_time); ! 443: return(0); ! 444: case CS_FILE_NEW_SCAN: ! 445: scandirs(FL_ULTIME); ! 446: return(0); ! 447: case CS_FILE_NEW_SCAN_ALL: ! 448: scanalldirs(FL_ULTIME); ! 449: return(0); ! 450: case CS_FILE_REMOVE: ! 451: if(!usrlibs) return(0); ! 452: if(useron.rest&FLAG('R')) { ! 453: bputs(text[R_RemoveFiles]); ! 454: return(0); } ! 455: padfname(csi->str,str); ! 456: strupr(str); ! 457: if(!listfileinfo(usrdir[curlib][curdir[curlib]],str,FI_REMOVE)) { ! 458: if(user_dir!=INVALID_DIR ! 459: && user_dir!=usrdir[curlib][curdir[curlib]]) ! 460: if((s=listfileinfo(user_dir,str,FI_REMOVE))!=0) ! 461: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 462: return(0); ! 463: bputs(text[SearchingAllDirs]); ! 464: for(i=0;i<usrdirs[curlib];i++) ! 465: if(i!=curdir[curlib] && i!=user_dir ! 466: && (s=listfileinfo(usrdir[curlib][i],str,FI_REMOVE))!=0) ! 467: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 468: return(0); ! 469: bputs(text[SearchingAllLibs]); ! 470: for(i=0;i<usrlibs;i++) { ! 471: if(i==curlib || i==user_dir) continue; ! 472: for(j=0;j<usrdirs[i]; j++) ! 473: if((s=listfileinfo(usrdir[i][j],str,FI_REMOVE))!=0) ! 474: if(s==-1 || (!strchr(str,'?') && !strchr(str,'*'))) ! 475: return(0); } } ! 476: return(0); ! 477: } ! 478: ! 479: errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1)); ! 480: return(0); ! 481: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.