|
|
1.1 ! root 1: #line 1 "DATA.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: /**************************************************************/ ! 6: /* Functions that store and retrieve data from disk or memory */ ! 7: /**************************************************************/ ! 8: ! 9: #include "sbbs.h" ! 10: ! 11: /****************************************************************************/ ! 12: /* Looks for a perfect match amoung all usernames (not deleted users) */ ! 13: /* Returns the number of the perfect matched username or 0 if no match */ ! 14: /* Called from functions waitforcall and newuser */ ! 15: /****************************************************************************/ ! 16: uint matchuser(char *str) ! 17: { ! 18: int file; ! 19: char str2[256],c; ! 20: ulong l,length; ! 21: FILE *stream; ! 22: ! 23: sprintf(str2,"%sUSER\\NAME.DAT",data_dir); ! 24: if((stream=fnopen(&file,str2,O_RDONLY))==NULL) ! 25: return(0); ! 26: length=filelength(file); ! 27: for(l=0;l<length;l+=LEN_ALIAS+2) { ! 28: fread(str2,LEN_ALIAS+2,1,stream); ! 29: for(c=0;c<LEN_ALIAS;c++) ! 30: if(str2[c]==ETX) break; ! 31: str2[c]=0; ! 32: if(!stricmp(str,str2)) { ! 33: fclose(stream); ! 34: return((l/(LEN_ALIAS+2))+1); } } ! 35: fclose(stream); ! 36: return(0); ! 37: } ! 38: ! 39: /****************************************************************************/ ! 40: /* Looks for close or perfect matches between str and valid usernames and */ ! 41: /* numbers and prompts user for near perfect matches in names. */ ! 42: /* Returns the number of the matched user or 0 if unsuccessful */ ! 43: /* Called from functions main_sec, useredit and readmailw */ ! 44: /****************************************************************************/ ! 45: uint finduser(char *instr) ! 46: { ! 47: int file,i; ! 48: char str[128],str2[256],str3[256],ynq[25],c,pass=1; ! 49: ulong l,length; ! 50: FILE *stream; ! 51: ! 52: i=atoi(instr); ! 53: if(i>0) { ! 54: username(i,str2); ! 55: if(str2[0] && strcmp(str2,"DELETED USER")) ! 56: return(i); } ! 57: strcpy(str,instr); ! 58: strupr(str); ! 59: sprintf(str3,"%sUSER\\NAME.DAT",data_dir); ! 60: if(flength(str3)<1L) ! 61: return(0); ! 62: if((stream=fnopen(&file,str3,O_RDONLY))==NULL) { ! 63: errormsg(WHERE,ERR_OPEN,str3,O_RDONLY); ! 64: return(0); } ! 65: sprintf(ynq,"%.2s",text[YN]); ! 66: ynq[2]='Q'; ! 67: ynq[3]=0; ! 68: length=filelength(file); ! 69: while(pass<3) { ! 70: fseek(stream,0L,SEEK_SET); /* seek to beginning for each pass */ ! 71: for(l=0;l<length;l+=LEN_ALIAS+2) { ! 72: if(!online) break; ! 73: fread(str2,LEN_ALIAS+2,1,stream); ! 74: for(c=0;c<LEN_ALIAS;c++) ! 75: if(str2[c]==ETX) break; ! 76: str2[c]=0; ! 77: if(!c) /* deleted user */ ! 78: continue; ! 79: strcpy(str3,str2); ! 80: strupr(str2); ! 81: if(pass==1 && !strcmp(str,str2)) { ! 82: fclose(stream); ! 83: return((l/(LEN_ALIAS+2))+1); } ! 84: if(pass==2 && strstr(str2,str)) { ! 85: bprintf(text[DoYouMeanThisUserQ],str3 ! 86: ,(uint)(l/(LEN_ALIAS+2))+1); ! 87: c=getkeys(ynq,0); ! 88: if(sys_status&SS_ABORT) { ! 89: fclose(stream); ! 90: return(0); } ! 91: if(c==text[YN][0]) { ! 92: fclose(stream); ! 93: return((l/(LEN_ALIAS+2))+1); } ! 94: if(c=='Q') { ! 95: fclose(stream); ! 96: return(0); } } } ! 97: pass++; } ! 98: bputs(text[UnknownUser]); ! 99: fclose(stream); ! 100: return(0); ! 101: } ! 102: ! 103: /****************************************************************************/ ! 104: /* Returns the number of files in the directory 'dirnum' */ ! 105: /****************************************************************************/ ! 106: int getfiles(uint dirnum) ! 107: { ! 108: char str[256]; ! 109: long l; ! 110: ! 111: sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code); ! 112: l=flength(str); ! 113: if(l>0L) ! 114: return(l/F_IXBSIZE); ! 115: return(0); ! 116: } ! 117: ! 118: /****************************************************************************/ ! 119: /* Returns the number of user transfers in XFER.IXT for either a dest user */ ! 120: /* source user, or filename. */ ! 121: /****************************************************************************/ ! 122: int getuserxfers(int fromuser, int destuser, char *fname) ! 123: { ! 124: char str[256]; ! 125: int file,found=0; ! 126: FILE *stream; ! 127: ! 128: sprintf(str,"%sXFER.IXT",data_dir); ! 129: if(!fexist(str)) ! 130: return(0); ! 131: if(!flength(str)) { ! 132: remove(str); ! 133: return(0); } ! 134: if((stream=fnopen(&file,str,O_RDONLY))==NULL) { ! 135: errormsg(WHERE,ERR_OPEN,str,O_RDONLY); ! 136: return(0); } ! 137: while(!ferror(stream)) { ! 138: if(!fgets(str,81,stream)) ! 139: break; ! 140: str[22]=0; ! 141: if(fname!=NULL && fname[0] && !strncmp(str+5,fname,12)) ! 142: found++; ! 143: else if(fromuser && atoi(str+18)==fromuser) ! 144: found++; ! 145: else if(destuser && atoi(str)==destuser) ! 146: found++; } ! 147: fclose(stream); ! 148: return(found); ! 149: } ! 150: ! 151: /****************************************************************************/ ! 152: /* Returns the number of the last user in USER.DAT (deleted ones too) */ ! 153: /* Called from function useredit */ ! 154: /****************************************************************************/ ! 155: uint lastuser() ! 156: { ! 157: char str[256]; ! 158: long length; ! 159: ! 160: sprintf(str,"%sUSER\\USER.DAT",data_dir); ! 161: if((length=flength(str))>0) ! 162: return((uint)(length/U_LEN)); ! 163: return(0); ! 164: } ! 165: ! 166: /****************************************************************************/ ! 167: /* Returns the number of files in the database for 'dir' */ ! 168: /****************************************************************************/ ! 169: uint gettotalfiles(uint dirnum) ! 170: { ! 171: char str[81]; ! 172: ! 173: sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code); ! 174: return((uint)(flength(str)/F_IXBSIZE)); ! 175: } ! 176: ! 177:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.