3 static bool IsUnicode(byte *Data,int Size);
5 bool ReadTextFile(char *Name,StringList *List,bool Config,bool AbortOnError,
6 bool ConvertToAnsi,bool Unquote,bool SkipComments)
10 GetConfigName(Name,FileName,true);
12 strcpy(FileName,Name);
17 bool OpenCode=AbortOnError ? SrcFile.WOpen(FileName):SrcFile.Open(FileName);
22 ErrHandler.Exit(OPEN_ERROR);
27 SrcFile.SetHandleType(FILE_HANDLESTD);
29 unsigned int DataSize=0,ReadSize;
30 const int ReadBlock=1024;
31 Array<char> Data(ReadBlock+5);
32 while ((ReadSize=SrcFile.Read(&Data[DataSize],ReadBlock))!=0)
38 memset(&Data[DataSize],0,5);
40 if (IsUnicode((byte *)&Data[0],DataSize))
42 wchar *CurStr=(wchar *)&Data[2];
47 wchar *NextStr=CurStr,*CmtPtr=NULL;
48 while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0)
50 if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/')
58 for (wchar *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--)
60 if (*SpacePtr!=' ' && *SpacePtr!='\t')
66 int Length=strlenw(CurStr);
67 int AddSize=Length-AnsiName.Size()+1;
69 AnsiName.Add(AddSize);
70 if (Unquote && *CurStr=='\"' && CurStr[Length-1]=='\"')
75 WideToChar(CurStr,&AnsiName[0]);
76 List->AddString(&AnsiName[0],CurStr);
79 while (*CurStr=='\r' || *CurStr=='\n')
85 char *CurStr=&Data[0];
88 char *NextStr=CurStr,*CmtPtr=NULL;
89 while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0)
91 if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/')
99 for (char *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--)
101 if (*SpacePtr!=' ' && *SpacePtr!='\t')
107 if (Unquote && *CurStr=='\"')
109 int Length=strlen(CurStr);
110 if (CurStr[Length-1]=='\"')
116 #if defined(_WIN_32) && !defined(TARGET_POSIX)
118 OemToChar(CurStr,CurStr);
120 List->AddString(CurStr);
123 while (*CurStr=='\r' || *CurStr=='\n')
131 bool IsUnicode(byte *Data,int Size)
133 if (Size<4 || Data[0]!=0xff || Data[1]!=0xfe)
135 for (int I=2;I<Size;I++)