JD2022-TU1/main/extern/Camcam/Tools/File_IO.cpp

276 lines
5.4 KiB
C++

#include "TRACK.H"
extern char CurrentDir[];
u32 ReadLine(FILE *F,char *LineFeed)
{
u32 LineL;
u32 NotFinish;
char PreviousType;
PreviousType = 100;
LineL = 0;
do {
NotFinish = fread(&LineFeed[LineL],1,1,F);
if ((LineFeed[LineL] < 32) && (LineFeed[LineL] != '\n')) LineFeed[LineL] = 32;
if ((PreviousType == 32) && (LineFeed[LineL] == 32))
LineL --;
PreviousType = LineFeed[LineL];
}
while ((LineFeed[LineL++] != '\n') && (NotFinish));
LineFeed[LineL] = 0;
if (LineL && (LineFeed[LineL-1] == '\n'))
LineFeed[LineL-1] = 0;
return NotFinish;
}
u32 GetFileNameExtend(char *TRACKqs)
{
u32 FFF;
FFF = 0;
while(*TRACKqs)
{
if (*TRACKqs != '"')
{
FFF <<= 8;
if ((*TRACKqs >= 'a') && (*TRACKqs <= 'z'))
FFF |= *TRACKqs + 'A' - 'a';
else
FFF |= *TRACKqs;
}
TRACKqs++;
}
return FFF;
};
void SetFileNameExtend(char *TRACKqs,u32 Extend)
{
u32 FFF = GetFileNameExtend(TRACKqs);
if (FFF != Extend)
{
char *End;
End = TRACKqs;
while (*End) {End++;};
if (End - 4 > TRACKqs)
{
End-=4;
*(End++) = (Extend>>24) & 0xff;
*(End++) = (Extend>>16) & 0xff;
*(End++) = (Extend>>8) & 0xff;
*(End++) = (Extend) & 0xff;
*(End++) = 0;
}
}
};
void AddFileNameExtend(char *TRACKqs,u32 Extend)
{
u32 FFF = GetFileNameExtend(TRACKqs);
if (FFF != Extend)
{
char *End;
End = TRACKqs;
while (*End) {End++;};
*(End++) = (Extend>>24) & 0xff;
*(End++) = (Extend>>16) & 0xff;
*(End++) = (Extend>>8) & 0xff;
*(End++) = (Extend) & 0xff;
*(End++) = 0;
}
};
unsigned long CDLG_USR_GetFileName (char *Name, char *Filter,HWND MUM,unsigned long ChangeDir,char *SubDir, u32 saveMode)
{
static char FileDir[1024] = "";
OPENFILENAME ofn;
char Convert[1024];
char Current_ID[1024];
char Title[256];
char Result1[1024];
char *ucSrc,*ucDst;
int result;
Result1[0] = 0;
ucDst = Convert;
ucSrc = Filter ;
while (*(ucSrc))
{
*ucDst = *ucSrc;
if (*ucDst == '|') *ucDst = 0;
ucDst ++;
ucSrc ++;
}
Name[0] = 0;
*ucDst = 0;
*(ucDst+1)=0;
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = MUM;
ofn.hInstance = NULL;
ofn.lpstrFilter = Convert;
ofn.lpstrCustomFilter = NULL;
ofn.nFilterIndex = 0;
ofn.lpstrFile = Name;
ofn.nMaxFile = 256;
ofn.lpstrFileTitle = Title;
ofn.nMaxFileTitle = 256;
if (!*FileDir)
strcpy(FileDir, CurrentDir);
ofn.lpstrInitialDir = FileDir;
if (SubDir)
{
while(SubDir[strlen(SubDir)-1]=='\\')
SubDir[strlen(SubDir)-1] = 0;
if (strlen(SubDir)>2 && (SubDir[1]==':') && (SubDir[2]=='\\'))
sprintf(Current_ID,"%s\\",SubDir);
else
//sprintf(Current_ID,"%s\\%s\\",FileDir,SubDir);
sprintf(Current_ID,"%s\\%s\\",CurrentDir,SubDir);
}
else
sprintf(Current_ID,"%s\\",FileDir);
ofn.lpstrInitialDir = Current_ID;
ofn.lpstrTitle = "Open File";
//if (ChangeDir)
// ofn.Flags = 0;
//else
ofn.Flags = OFN_NOCHANGEDIR ;
ofn.lpstrDefExt = NULL;
// Force no Unpack when File is browsing -> Prevent unpack on bad directory
extern HANDLE PackFileMutex;
if (WAIT_OBJECT_0 != WaitForSingleObject(PackFileMutex, INFINITE))
return 0;
if (saveMode)
result = GetSaveFileName(&ofn);
else
result = GetOpenFileName(&ofn);
ReleaseMutex(PackFileMutex);
if (result)
{
strcpy(Result1, Name);
char *titlePtr = strstr(Result1, Title);
if (titlePtr)
{
*titlePtr = 0;
strcpy(FileDir, Result1);
}
}
return result;
}
#include "shlobj.h"
unsigned long CDLG_USR_GetDirName (char *Name, HWND MUM, char *SubDir)
{
BROWSEINFO bnfo;
char Current_ID[1024];
if (SubDir)
{
while(SubDir[strlen(SubDir)-1]=='\\')
SubDir[strlen(SubDir)-1] = 0;
if (strlen(SubDir)>2 && (SubDir[1]==':') && (SubDir[2]=='\\'))
sprintf(Current_ID,"%s\\",SubDir);
else
sprintf(Current_ID,"%s\\%s\\",CurrentDir,SubDir);
}
else
sprintf(Current_ID,"%s\\",CurrentDir);
LPITEMIDLIST item;
WCHAR filename[ 1024 ];
MultiByteToWideChar(CP_ACP,0,Current_ID,-1,filename,1024);
SHParseDisplayName(filename, NULL, &item, 0, NULL);
Name[0] = 0;
bnfo.hwndOwner = MUM;
bnfo.pidlRoot = item;
bnfo.pszDisplayName = Name;
bnfo.lpszTitle = NULL;
bnfo.ulFlags = BIF_NONEWFOLDERBUTTON;
bnfo.lpfn = NULL;
bnfo.lParam = NULL;
bnfo.iImage = 0;
if (!SHBrowseForFolder(&bnfo))
return 0;
return 1;
}
u32 GetFileLenght(char *Filename)
{
u32 Size;
Size = 0;
FILE *F;
F = GetSceneFileHanler(Filename);
if (F)
{
u32 LocalSize;
u8 Buufer[2048];
LocalSize = 1;
while (LocalSize)
{
LocalSize = fread( Buufer , sizeof( char ), 2048, F);
Size += LocalSize;
}
CC_fclose(F);
}
return Size;
}
u32 IsDifferent(char *Filename1,char *Filename2)
{
u32 Size1,Size2;
FILE *F1,*F2;
Size1 = GetFileLenght(Filename1);
Size2 = GetFileLenght(Filename2);
if ((!Size2) || (!Size1)) return 0;
if (Size1 != Size2) return 1;
F1 = GetSceneFileHanler(Filename1);
F2 = GetSceneFileHanler(Filename2);
if (F1 && F2)
{
u32 LocalSize1;
u32 LocalSize2;
u8 Buufer1[2048];
u8 Buufer2[2048];
LocalSize1 = 1;
LocalSize2 = 1;
while (LocalSize1 && LocalSize2)
{
u32 Counter;
LocalSize1 = fread( Buufer1 , sizeof( char ), 2048, F1);
LocalSize2 = fread( Buufer2 , sizeof( char ), 2048, F2);
Counter = LocalSize1;
while (Counter--)
{
if (Buufer1[Counter] != Buufer2[Counter])
{
if (F1) CC_fclose(F1);
if (F2) CC_fclose(F2);
return 1;
}
}
}
}
if (F1) CC_fclose(F1);
if (F2) CC_fclose(F2);
return 0;
}
u32 IsExist(char *Filename)
{
u32 Size;
Size = 0;
FILE *F;
F = fopen(Filename,"rb");
if (F)
{
CC_fclose(F);
return 1;
}
return 0;
}