Annotation of sbbs/sbbs2/xfer_lo.c, revision 1.1.1.1

1.1       root        1: #line 1 "XFER_LO.C"
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: #include "sbbs.h"
                      6: 
                      7: /****************************************************************************/
                      8: /* Prompts user for file specification. <CR> is *.* and .* is assumed.      */
                      9: /* Returns padded file specification.                                       */
                     10: /* Returns NULL if input was aborted.                                       */
                     11: /****************************************************************************/
                     12: char *getfilespec(char *str)
                     13: {
                     14: bputs(text[FileSpecStarDotStar]);
                     15: if(!getstr(str,12,K_UPPER))
                     16:     strcpy(str,"*.*");
                     17: else if(!strchr(str,'.') && strlen(str)<=8)
                     18:     strcat(str,".*");
                     19: if(sys_status&SS_ABORT)
                     20:     return(0);
                     21: return(str);
                     22: }
                     23: 
                     24: /****************************************************************************/
                     25: /* Turns FILE.EXT into FILE    .EXT                                         */
                     26: /****************************************************************************/
                     27: char *padfname(char *filename, char *str)
                     28: {
                     29:     char c,d;
                     30: 
                     31: for(c=0;c<8;c++)
                     32:     if(filename[c]=='.' || !filename[c]) break;
                     33:     else str[c]=filename[c];
                     34: d=c;
                     35: if(filename[c]=='.') c++;
                     36: while(d<8)
                     37:     str[d++]=SP;
                     38: str[d++]='.';
                     39: while(d<12)
                     40:     if(!filename[c]) break;
                     41:     else str[d++]=filename[c++];
                     42: while(d<12)
                     43:     str[d++]=SP;
                     44: str[d]=0;
                     45: return(str);
                     46: }
                     47: 
                     48: /****************************************************************************/
                     49: /* Turns FILE    .EXT into FILE.EXT                                         */
                     50: /****************************************************************************/
                     51: char *unpadfname(char *filename, char *str)
                     52: {
                     53:     char c,d;
                     54: 
                     55: for(c=0,d=0;c<strlen(filename);c++)
                     56:     if(filename[c]!=SP) str[d++]=filename[c];
                     57: str[d]=0;
                     58: return(str);
                     59: }
                     60: 
                     61: /****************************************************************************/
                     62: /* Checks to see if filename matches filespec. Returns 1 if yes, 0 if no    */
                     63: /****************************************************************************/
                     64: char filematch(char *filename, char *filespec)
                     65: {
                     66:     char c;
                     67: 
                     68: for(c=0;c<8;c++) /* Handle Name */
                     69:     if(filespec[c]=='*') break;
                     70:     else if(filespec[c]=='?') continue;
                     71:     else if(filename[c]!=filespec[c]) return(0);
                     72: for(c=9;c<12;c++)
                     73:     if(filespec[c]=='*') break;
                     74:     else if(filespec[c]=='?') continue;
                     75:     else if(filename[c]!=filespec[c]) return(0);
                     76: return(1);
                     77: }
                     78: 
                     79: /****************************************************************************/
                     80: /* Deletes all files in dir 'path' that match file spec 'spec'              */
                     81: /****************************************************************************/
                     82: int delfiles(char *inpath, char *spec)
                     83: {
                     84:        char str[256],path[128],done;
                     85:     int files=0;
                     86:     struct ffblk ff;
                     87: 
                     88: strcpy(path,inpath);
                     89: backslash(path);
                     90: sprintf(str,"%s%s",path,spec);
                     91: done=findfirst(str,&ff,0);
                     92: while(!done) {
                     93:     sprintf(str,"%s%s",path,ff.ff_name);
                     94:        _chmod(str,1,FA_NORMAL);        // Incase it's been marked RDONLY
                     95:     if(remove(str))
                     96:         errormsg(WHERE,ERR_REMOVE,str,0);
                     97:     else
                     98:         files++;
                     99:     done=findnext(&ff); }
                    100: return(files);
                    101: }
                    102: 
                    103: /*****************************************************************************/
                    104: /* Checks the filename 'fname' for invalid symbol or character sequences     */
                    105: /*****************************************************************************/
                    106: char checkfname(char *fname)
                    107: {
                    108:        char str[256],c=0,d;
                    109: 
                    110: if(strcspn(fname,"\\/|<>+[]:=\";,%")!=strlen(fname)) {
                    111:        sprintf(str,"Suspicious filename attempt: '%s'",fname);
                    112:     errorlog(str);
                    113:        return(0); }
                    114: if(strstr(fname,".."))
                    115:        return(0);
                    116: if(strcspn(fname,".")>8)
                    117:        return(0);
                    118: d=strlen(fname);
                    119: while(c<d) {
                    120:        if(fname[c]<=SP || fname[c]&0x80)
                    121:                return(0);
                    122:        c++; }
                    123: return(1);
                    124: }
                    125: 
                    126: /**************************************************************************/
                    127: /* Add file 'f' to batch download queue. Return 1 if successful, 0 if not */
                    128: /**************************************************************************/
                    129: char addtobatdl(file_t f)
                    130: {
                    131:     char str[256],tmp2[256];
                    132:     uint i;
                    133:        ulong totalcdt, totalsize, totaltime;
                    134: 
                    135: if(useron.rest&FLAG('D')) {
                    136:        bputs(text[R_Download]);
                    137:        return(0); }
                    138: /***
                    139: sprintf(str,"%s%s",f.altpath>0 && f.altpath<=altpaths ? altpath[f.altpath-1]
                    140:     : dir[f.dir]->path,unpadfname(f.name,tmp));
                    141: ***/
                    142: for(i=0;i<batdn_total;i++) {
                    143:     if(!strcmp(batdn_name[i],f.name) && f.dir==batdn_dir[i]) {
                    144:                bprintf(text[FileAlreadyInQueue],f.name);
                    145:         return(0); } }
                    146: if(f.size<=0 /* !fexist(str) */) {
                    147:        bprintf(text[CantAddToQueue],f.name);
                    148:     bputs(text[FileIsNotOnline]);
                    149:     return(0); }
                    150: if(batdn_total>=max_batdn) {
                    151:        bprintf(text[CantAddToQueue],f.name);
                    152:     bputs(text[BatchDlQueueIsFull]);
                    153:     return(0); }
                    154: for(i=0,totalcdt=0;i<batdn_total;i++)
                    155:     totalcdt+=batdn_cdt[i];
                    156: if(dir[f.dir]->misc&DIR_FREE) f.cdt=0L;
                    157: totalcdt+=f.cdt;
                    158: if(!(useron.exempt&FLAG('D')) && totalcdt>useron.cdt+useron.freecdt) {
                    159:        bprintf(text[CantAddToQueue],f.name);
                    160:        bprintf(text[YouOnlyHaveNCredits],ultoac(useron.cdt+useron.freecdt,tmp));
                    161:     return(0); }
                    162: if(!chk_ar(dir[f.dir]->dl_ar,useron)) {
                    163:        bprintf(text[CantAddToQueue],f.name);
                    164:        bputs(text[CantDownloadFromDir]);
                    165:        return(0); }
                    166: for(i=0,totalsize=totaltime=0;i<batdn_total;i++) {
                    167:     totalsize+=batdn_size[i];
                    168:        if(!(dir[batdn_dir[i]]->misc&DIR_TFREE) && cur_cps)
                    169:                totaltime+=batdn_size[i]/(ulong)cur_cps; }
                    170: totalsize+=f.size;
                    171: if(!(dir[f.dir]->misc&DIR_TFREE) && cur_cps)
                    172:        totaltime+=f.size/(ulong)cur_cps;
                    173: if(!(useron.exempt&FLAG('T')) && totaltime>timeleft) {
                    174:        bprintf(text[CantAddToQueue],f.name);
                    175:     bputs(text[NotEnoughTimeToDl]);
                    176:     return(0); }
                    177: strcpy(batdn_name[batdn_total],f.name);
                    178: batdn_dir[batdn_total]=f.dir;
                    179: batdn_cdt[batdn_total]=f.cdt;
                    180: batdn_offset[batdn_total]=f.datoffset;
                    181: batdn_size[batdn_total]=f.size;
                    182: batdn_alt[batdn_total]=f.altpath;
                    183: batdn_total++;
                    184: openfile(f);
                    185: bprintf(text[FileAddedToBatDlQueue]
                    186:     ,f.name,batdn_total,max_batdn,ultoac(totalcdt,tmp)
                    187:     ,ultoac(totalsize,tmp2)
                    188:     ,sectostr(totalsize/(ulong)cur_cps,str));
                    189: return(1);
                    190: }
                    191: 
                    192: /****************************************************************************/
                    193: /* This function returns the command line for the temp file extension for      */
                    194: /* current user online.                                                                                                        */
                    195: /****************************************************************************/
                    196: char *temp_cmd(void)
                    197: {
                    198:        int i;
                    199: 
                    200: if(!total_fcomps) {
                    201:        errormsg(WHERE,ERR_CHK,"compressable file types",0);
                    202:        return(nulstr); }
                    203: for(i=0;i<total_fcomps;i++)
                    204:        if(!stricmp(useron.tmpext,fcomp[i]->ext)
                    205:                && chk_ar(fcomp[i]->ar,useron))
                    206:                return(fcomp[i]->cmd);
                    207: return(fcomp[0]->cmd);
                    208: }
                    209: 

unix.superglobalmegacorp.com

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