home *** CD-ROM | disk | FTP | other *** search
/ ftp.rarlab.com / 2014.05.ftp.rarlab.com.tar / ftp.rarlab.com / rar / sunrar.zip / smallfn.c < prev    next >
C/C++ Source or Header  |  1998-07-01  |  5KB  |  284 lines

  1. void tunpack(unsigned char *Mem,int Solid,int Mode)
  2. {
  3.   if (Mode==OLD_UNPACK)
  4.     OldUnpack(Mem,Solid);
  5.   else
  6.     Unpack(Mem,Solid);
  7. }
  8.  
  9.  
  10. int twrite(FILE *stream,void *buf,unsigned len)
  11. {
  12.   int rescode;
  13.  
  14. #ifdef _WIN_32
  15.   errno=0;
  16. #endif
  17.  
  18.   rescode=fwrite(buf,1,len,stream);
  19.   if (rescode!=len || ferror(stream))
  20.     ErrExit(EWRITE,WRITE_ERROR);
  21.  
  22. #ifdef _WIN_32
  23.   if (errno==ENOSPC)
  24.     ErrExit(EWRITE,WRITE_ERROR);
  25. #endif
  26.  
  27.   return(rescode);
  28. }
  29.  
  30.  
  31. int tread(FILE *stream,void *buf,unsigned len)
  32. {
  33.   return(fread(buf,1,len,stream));
  34. }
  35.  
  36.  
  37. int tseek(FILE *stream,long offset,int fromwhere)
  38. {
  39.   return(fseek(stream,offset,fromwhere));
  40. }
  41.  
  42.  
  43. long filelen(FILE *FPtr)
  44. {
  45.   long RetPos,SavePos;
  46.   SavePos=ftell(FPtr);
  47.   tseek(FPtr,0,SEEK_END);
  48.   RetPos=ftell(FPtr);
  49.   tseek(FPtr,SavePos,SEEK_SET);
  50.   return(RetPos);
  51. }
  52.  
  53.  
  54. void tclose(FILE *FPtr)
  55. {
  56.   if (FPtr!=NULL && fclose(FPtr)==EOF)
  57.     ErrExit(ECLOSE,FATAL_ERROR);
  58. }
  59.  
  60.  
  61. FILE* FileCreate(char *Name,int OverwriteMode,int *UserReject)
  62. {
  63.   FILE *Ptr;
  64.   if (UserReject!=NULL)
  65.     *UserReject=0;
  66.   while (FileExist(Name))
  67.   {
  68.     if (OverwriteMode==NO_OVERWR)
  69.     {
  70.       if (UserReject!=NULL)
  71.         *UserReject=1;
  72.       return(NULL);
  73.     }
  74.     if (Opt.AllYes || OverwriteAll || OverwriteMode==ALL_OVERWR)
  75.       break;
  76.     if (OverwriteMode==ASK_OVERWR)
  77.     {
  78.       mprintf(MFileExists,Name);
  79.       Ask(MYesNoAllRenQ);
  80.       if (Choice==1)
  81.         break;
  82.       if (Choice==2)
  83.       {
  84.         if (UserReject!=NULL)
  85.           *UserReject=1;
  86.         return(NULL);
  87.       }
  88.       if (Choice==3)
  89.       {
  90.         OverwriteAll=1;
  91.         break;
  92.       }
  93.       if (Choice==4)
  94.       {
  95.         mprintf(MAskNewName);
  96.         gets(Name);
  97.         continue;
  98.       }
  99.       if (Choice==5)
  100.         ErrExit(EEMPTY,USER_BREAK);
  101.     }
  102.   }
  103.   if ((Ptr=fopen(Name,CREATEBINARY))!=NULL)
  104.     return(Ptr);
  105.   CreatePath(Name);
  106.   return(fopen(Name,CREATEBINARY));
  107. }
  108.  
  109.  
  110. int GetKey(void)
  111. {
  112.   char Str[80];
  113.   gets(Str);
  114.   return(Str[0]);
  115. }
  116.  
  117.  
  118. int ToUpperCase(int Ch)
  119. {
  120.   if (Ch<256)
  121.     return(loctoupper(Ch));
  122.   else
  123.     return(Ch);
  124. }
  125.  
  126.  
  127. char* PointToName(char *Path)
  128. {
  129.   int I;
  130.   char *ChPtr;
  131.   for (I=strlen(Path)-1;I>=0;I--)
  132.     if (IsPathDiv(Path[I]))
  133.       return(&Path[I+1]);
  134.   if ((ChPtr=strchr(Path,':'))!=NULL)
  135.     return(ChPtr+1);
  136.   else
  137.     return(Path);
  138. }
  139.  
  140.  
  141. void SetExt(char *Name,char *NewExt)
  142. {
  143.   char *Ch;
  144.   if ((Ch=strrchr(Name,'.'))==NULL)
  145.   {
  146.     strcat(Name,".");
  147.     strcat(Name,NewExt);
  148.   }
  149.   else
  150.     strcpy(Ch+1,NewExt);
  151. }
  152.  
  153.  
  154. int GetPassword(int AskCount)
  155. {
  156.   int RetCode;
  157.   char CmpStr[128],PromptStr[128];
  158.   strcpy(PromptStr,MAskPsw);
  159.   if (AskCount==1)
  160.   {
  161.     strcat(PromptStr,MFor);
  162.     strcat(PromptStr,PointToName(ArcFileName));
  163.   }
  164.   mprintf("\n%s: ",PromptStr);
  165.   GetPswStr(Password);
  166.   if (*Password!=0)
  167.   {
  168.     if (AskCount==1)
  169.       return(1);
  170.     mprintf(MReAskPsw1);
  171.     GetPswStr(CmpStr);
  172.     if (*CmpStr==0)
  173.     {
  174.       RetCode=-1;
  175.       memset(Password,0,sizeof(Password));
  176.     }
  177.     else
  178.       if (strcmp(Password,CmpStr)!=0)
  179.       {
  180.         memset(Password,0,sizeof(Password));
  181.         mprintf(MNotMatchPsw);
  182.         RetCode=0;
  183.       }
  184.       else
  185.         RetCode=1;
  186.   }
  187.   else
  188.   {
  189.     memset(Password,0,sizeof(Password));
  190.     RetCode=-1;
  191.   }
  192.   memset(CmpStr,0,sizeof(CmpStr));
  193.   return(RetCode);
  194. }
  195.  
  196.  
  197. void Ask(char *AskStr)
  198. {
  199.   char Item[5][40],*ChPtr,AskString[80];
  200.   int NumItems=0,Ch,I;
  201.  
  202.   strcpy(AskString,AskStr);
  203.   while ((ChPtr=strchr(AskString,'_'))!=NULL)
  204.   {
  205.     strncpy(Item[NumItems],ChPtr+1,sizeof(Item[NumItems]));
  206.     *ChPtr=' ';
  207.     if ((ChPtr=strchr(Item[NumItems],'_'))!=NULL)
  208.       *ChPtr=0;
  209.     if (strcmp(Item[NumItems],MCmpYesStr)==0 && Opt.AllYes)
  210.     {
  211.       Choice=NumItems+1;
  212.       return;
  213.     }
  214.     NumItems++;
  215.   }
  216.   mprintf("  %s",Item[0]);
  217.   for (I=1;I<NumItems;I++)
  218.     mprintf("/%s",Item[I]);
  219.   mprintf(" ");
  220.   Ch=ToUpperCase(GetKey());
  221.   for (Choice=0,I=1;I<=NumItems;I++)
  222.     if (Ch==Item[I-1][0])
  223.       Choice=I;
  224. }
  225.  
  226.  
  227. int ToPercent(long N1,long N2)
  228. {
  229.   if (N1 > 10000)
  230.   {
  231.     N1/=100;
  232.     N2/=100;
  233.   }
  234.   if (N2==0)
  235.     return(0);
  236.   if (N2<N1)
  237.     return(100);
  238.   return((int)(N1*100/N2));
  239. }
  240.  
  241.  
  242. char* strlower(char *Str)
  243. {
  244.   char *ChPtr;
  245.   for (ChPtr=Str;*ChPtr;ChPtr++)
  246.     *ChPtr=(char)tolower(*ChPtr);
  247.   return(Str);
  248. }
  249.  
  250. char* strupper(char *Str)
  251. {
  252.   char *ChPtr;
  253.   for (ChPtr=Str;*ChPtr;ChPtr++)
  254.     *ChPtr=(char)toupper(*ChPtr);
  255.   return(Str);
  256. }
  257.  
  258.  
  259. int stricomp(char *Str1,char *Str2)
  260. {
  261.   char S1[512],S2[512];
  262.   strncpy(S1,Str1,sizeof(S1));
  263.   strncpy(S2,Str2,sizeof(S2));
  264.   return(strcmp(strupper(S1),strupper(S2)));
  265. }
  266.  
  267.  
  268. int strnicomp(char *Str1,char *Str2,int N)
  269. {
  270.   char S1[512],S2[512];
  271.   strncpy(S1,Str1,sizeof(S1));
  272.   strncpy(S2,Str2,sizeof(S2));
  273.   return(strncmp(strupper(S1),strupper(S2),N));
  274. }
  275.  
  276.  
  277. char* RemoveEOL(char *Str)
  278. {
  279.   int I;
  280.   for (I=strlen(Str)-1;I>=0 && iscntrl(Str[I]);I--)
  281.     Str[I]=0;
  282.   return(Str);
  283. }
  284.