void tunpack(unsigned char *Mem,int Solid,int Mode) { if (Mode==OLD_UNPACK) OldUnpack(Mem,Solid); else Unpack(Mem,Solid); } int twrite(FILE *stream,void *buf,unsigned len) { int rescode; #ifdef _WIN_32 errno=0; #endif rescode=fwrite(buf,1,len,stream); if (rescode!=len || ferror(stream)) ErrExit(EWRITE,WRITE_ERROR); #ifdef _WIN_32 if (errno==ENOSPC) ErrExit(EWRITE,WRITE_ERROR); #endif return(rescode); } int tread(FILE *stream,void *buf,unsigned len) { return(fread(buf,1,len,stream)); } int tseek(FILE *stream,long offset,int fromwhere) { return(fseek(stream,offset,fromwhere)); } long filelen(FILE *FPtr) { long RetPos,SavePos; SavePos=ftell(FPtr); tseek(FPtr,0,SEEK_END); RetPos=ftell(FPtr); tseek(FPtr,SavePos,SEEK_SET); return(RetPos); } void tclose(FILE *FPtr) { if (FPtr!=NULL && fclose(FPtr)==EOF) ErrExit(ECLOSE,FATAL_ERROR); } FILE* FileCreate(char *Name,int OverwriteMode,int *UserReject) { FILE *Ptr; if (UserReject!=NULL) *UserReject=0; while (FileExist(Name)) { if (OverwriteMode==NO_OVERWR) { if (UserReject!=NULL) *UserReject=1; return(NULL); } if (Opt.AllYes || OverwriteAll || OverwriteMode==ALL_OVERWR) break; if (OverwriteMode==ASK_OVERWR) { mprintf(MFileExists,Name); Ask(MYesNoAllRenQ); if (Choice==1) break; if (Choice==2) { if (UserReject!=NULL) *UserReject=1; return(NULL); } if (Choice==3) { OverwriteAll=1; break; } if (Choice==4) { mprintf(MAskNewName); gets(Name); continue; } if (Choice==5) ErrExit(EEMPTY,USER_BREAK); } } if ((Ptr=fopen(Name,CREATEBINARY))!=NULL) return(Ptr); CreatePath(Name); return(fopen(Name,CREATEBINARY)); } int GetKey(void) { char Str[80]; gets(Str); return(Str[0]); } int ToUpperCase(int Ch) { if (Ch<256) return(loctoupper(Ch)); else return(Ch); } char* PointToName(char *Path) { int I; char *ChPtr; for (I=strlen(Path)-1;I>=0;I--) if (IsPathDiv(Path[I])) return(&Path[I+1]); if ((ChPtr=strchr(Path,':'))!=NULL) return(ChPtr+1); else return(Path); } void SetExt(char *Name,char *NewExt) { char *Ch; if ((Ch=strrchr(Name,'.'))==NULL) { strcat(Name,"."); strcat(Name,NewExt); } else strcpy(Ch+1,NewExt); } int GetPassword(int AskCount) { int RetCode; char CmpStr[128],PromptStr[128]; strcpy(PromptStr,MAskPsw); if (AskCount==1) { strcat(PromptStr,MFor); strcat(PromptStr,PointToName(ArcFileName)); } mprintf("\n%s: ",PromptStr); GetPswStr(Password); if (*Password!=0) { if (AskCount==1) return(1); mprintf(MReAskPsw1); GetPswStr(CmpStr); if (*CmpStr==0) { RetCode=-1; memset(Password,0,sizeof(Password)); } else if (strcmp(Password,CmpStr)!=0) { memset(Password,0,sizeof(Password)); mprintf(MNotMatchPsw); RetCode=0; } else RetCode=1; } else { memset(Password,0,sizeof(Password)); RetCode=-1; } memset(CmpStr,0,sizeof(CmpStr)); return(RetCode); } void Ask(char *AskStr) { char Item[5][40],*ChPtr,AskString[80]; int NumItems=0,Ch,I; strcpy(AskString,AskStr); while ((ChPtr=strchr(AskString,'_'))!=NULL) { strncpy(Item[NumItems],ChPtr+1,sizeof(Item[NumItems])); *ChPtr=' '; if ((ChPtr=strchr(Item[NumItems],'_'))!=NULL) *ChPtr=0; if (strcmp(Item[NumItems],MCmpYesStr)==0 && Opt.AllYes) { Choice=NumItems+1; return; } NumItems++; } mprintf(" %s",Item[0]); for (I=1;I 10000) { N1/=100; N2/=100; } if (N2==0) return(0); if (N2=0 && iscntrl(Str[I]);I--) Str[I]=0; return(Str); }