home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / DATA.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  5.1 KB  |  178 lines

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