--- trunk/reactos/subsys/system/notepad/text.c 2005-09-25 00:00:03 UTC (rev 18038)
+++ trunk/reactos/subsys/system/notepad/text.c 2005-09-25 00:12:12 UTC (rev 18039)
@@ -1,389 +1,389 @@
-/*
- * Notepad (text.c)
- *
- * Copyright 1998,99 Marcel Baur <mbaur@g26.ethz.ch>
- * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
- * Copyright 2002 Andriy Palamarchuk
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#define UNICODE
-
-#include <assert.h>
-#include <stdio.h>
-#include <windows.h>
-#include <commdlg.h>
-
-#include "main.h"
-
-static BOOL Append(LPWSTR *ppszText, DWORD *pdwTextLen, LPCWSTR pszAppendText, DWORD dwAppendLen)
-{
- LPWSTR pszNewText;
-
- if (dwAppendLen > 0)
- {
- if (*ppszText)
- {
- pszNewText = (LPWSTR) HeapReAlloc(GetProcessHeap(), 0, *ppszText, (*pdwTextLen + dwAppendLen) * sizeof(WCHAR));
- }
- else
- {
- pszNewText = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, dwAppendLen * sizeof(WCHAR));
- }
-
- if (!pszNewText)
- return FALSE;
-
- memcpy(pszNewText + *pdwTextLen, pszAppendText, dwAppendLen * sizeof(WCHAR));
- *ppszText = pszNewText;
- *pdwTextLen += dwAppendLen;
- }
- return TRUE;
-}
-
-BOOL ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, int *piEncoding, int *piEoln)
-{
- DWORD dwSize;
- LPBYTE pBytes = NULL;
- LPCWSTR pszText;
- LPWSTR pszAllocText = NULL;
- DWORD dwPos, i;
- DWORD dwCharCount;
- BOOL bSuccess = FALSE;
- BYTE b;
- int iEncoding = ENCODING_ANSI;
- int iCodePage;
- WCHAR szCrlf[2] = { '\r', '\n' };
- DWORD adwEolnCount[3] = { 0, 0, 0 };
-
- *ppszText = NULL;
- *pdwTextLen = 0;
-
- dwSize = GetFileSize(hFile, NULL);
- if (dwSize == INVALID_FILE_SIZE)
- goto done;
-
- pBytes = HeapAlloc(GetProcessHeap(), 0, dwSize + 2);
- if (!pBytes)
- goto done;
-
- if (!ReadFile(hFile, pBytes, dwSize, &dwSize, NULL))
- goto done;
- dwPos = 0;
-
- /* Make sure that there is a NUL character at the end, in any encoding */
- pBytes[dwSize + 0] = '\0';
- pBytes[dwSize + 1] = '\0';
-
- /* Look for Byte Order Marks */
- if ((dwSize >= 2) && (pBytes[0] == 0xFF) && (pBytes[1] == 0xFE))
- {
- iEncoding = ENCODING_UNICODE;
- dwPos += 2;
- }
- else if ((dwSize >= 2) && (pBytes[0] == 0xFE) && (pBytes[1] == 0xFF))
- {
- iEncoding = ENCODING_UNICODE_BE;
- dwPos += 2;
- }
- else if ((dwSize >= 3) && (pBytes[0] == 0xEF) && (pBytes[1] == 0xBB) && (pBytes[2] == 0xBF))
- {
- iEncoding = ENCODING_UTF8;
- dwPos += 3;
- }
-
- switch(iEncoding)
- {
- case ENCODING_UNICODE_BE:
- for (i = dwPos; i < dwSize-1; i += 2)
- {
- b = pBytes[i+0];
- pBytes[i+0] = pBytes[i+1];
- pBytes[i+1] = b;
- }
- /* fall through */
-
- case ENCODING_UNICODE:
- pszText = (LPCWSTR) &pBytes[dwPos];
- dwCharCount = (dwSize - dwPos) / sizeof(WCHAR);
- break;
-
- case ENCODING_ANSI:
- case ENCODING_UTF8:
- if (iEncoding == ENCODING_ANSI)
- iCodePage = CP_ACP;
- else if (iEncoding == ENCODING_UTF8)
- iCodePage = CP_UTF8;
- else
- goto done;
-
- dwCharCount = MultiByteToWideChar(iCodePage, 0, &pBytes[dwPos], dwSize - dwPos, NULL, 0);
- if (dwCharCount == 0)
- goto done;
-
- pszAllocText = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, (dwCharCount + 1) * sizeof(WCHAR));
- if (!pszAllocText)
- goto done;
-
- if (!MultiByteToWideChar(iCodePage, 0, &pBytes[dwPos], dwSize - dwPos, pszAllocText, dwCharCount))
- goto done;
-
- pszAllocText[dwCharCount] = '\0';
- pszText = pszAllocText;
- break;
- }
-
- dwPos = 0;
- for (i = 0; i < dwCharCount; i++)
- {
- switch(pszText[i])
- {
- case '\r':
- if ((i < dwCharCount-1) && (pszText[i+1] == '\n'))
- {
- i++;
- adwEolnCount[EOLN_CRLF]++;
- break;
- }
- /* fall through */
-
- case '\n':
- if (!Append(ppszText, pdwTextLen, &pszText[dwPos], i - dwPos))
- return FALSE;
- if (!Append(ppszText, pdwTextLen, szCrlf, sizeof(szCrlf) / sizeof(szCrlf[0])))
- return FALSE;
- dwPos = i + 1;
-
- if (pszText[i] == '\r')
- adwEolnCount[EOLN_CR]++;
- else
- adwEolnCount[EOLN_LF]++;
- break;
- }
- }
-
- if (!*ppszText && (pszText == pszAllocText))
- {
- /* special case; don't need to reallocate */
- *ppszText = pszAllocText;
- *pdwTextLen = dwCharCount;
- pszAllocText = NULL;
- }
- else
- {
- /* append last remaining text */
- if (!Append(ppszText, pdwTextLen, &pszText[dwPos], i - dwPos + 1))
- return FALSE;
- }
-
- /* chose which eoln to use */
- *piEoln = EOLN_CRLF;
- if (adwEolnCount[EOLN_LF] > adwEolnCount[*piEoln])
- *piEoln = EOLN_LF;
- if (adwEolnCount[EOLN_CR] > adwEolnCount[*piEoln])
- *piEoln = EOLN_CR;
- *piEncoding = iEncoding;
-
- bSuccess = TRUE;
-
-done:
- if (pBytes)
- HeapFree(GetProcessHeap(), 0, pBytes);
- if (pszAllocText)
- HeapFree(GetProcessHeap(), 0, pszAllocText);
-
- if (!bSuccess && *ppszText)
- {
- HeapFree(GetProcessHeap(), 0, *ppszText);
- *ppszText = NULL;
- *pdwTextLen = 0;
- }
- return bSuccess;
-}
-
-static BOOL WriteEncodedText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding)
-{
- LPBYTE pBytes;
- LPBYTE pAllocBuffer = NULL;
- DWORD dwPos = 0;
- DWORD dwByteCount;
- BYTE buffer[1024];
- UINT iCodePage;
- DWORD dwDummy, i;
- BOOL bSuccess;
- int iBufferSize, iRequiredBytes;
- BYTE b;
-
- while(dwPos < dwTextLen)
- {
- switch(iEncoding)
- {
- case ENCODING_UNICODE:
- pBytes = (LPBYTE) &pszText[dwPos];
- dwByteCount = (dwTextLen - dwPos) * sizeof(WCHAR);
- dwPos = dwTextLen;
- break;
-
- case ENCODING_UNICODE_BE:
- dwByteCount = (dwTextLen - dwPos) * sizeof(WCHAR);
- if (dwByteCount > sizeof(buffer))
- dwByteCount = sizeof(buffer);
-
- memcpy(buffer, &pszText[dwPos], dwByteCount);
- for (i = 0; i < dwByteCount; i += 2)
- {
- b = buffer[i+0];
- buffer[i+0] = buffer[i+1];
- buffer[i+1] = b;
- }
- dwPos += dwByteCount / sizeof(WCHAR);
- break;
-
- case ENCODING_ANSI:
- case ENCODING_UTF8:
- if (iEncoding == ENCODING_ANSI)
- iCodePage = CP_ACP;
- else if (iEncoding == ENCODING_UTF8)
- iCodePage = CP_UTF8;
- else
- goto done;
-
- iRequiredBytes = WideCharToMultiByte(iCodePage, 0, &pszText[dwPos], dwTextLen - dwPos, NULL, 0, NULL, NULL);
- if (iRequiredBytes <= 0)
- {
- goto done;
- }
- else if (iRequiredBytes < sizeof(buffer))
- {
- pBytes = buffer;
- iBufferSize = sizeof(buffer);
- }
- else
- {
- pAllocBuffer = (LPBYTE) HeapAlloc(GetProcessHeap(), 0, iRequiredBytes);
- if (!pAllocBuffer)
- return FALSE;
- pBytes = pAllocBuffer;
- iBufferSize = iRequiredBytes;
- }
-
- dwByteCount = WideCharToMultiByte(iCodePage, 0, &pszText[dwPos], dwTextLen - dwPos, (LPSTR) pBytes, iBufferSize, NULL, NULL);
- if (!dwByteCount)
- goto done;
-
- dwPos = dwTextLen;
- break;
-
- default:
- goto done;
- }
-
- if (!WriteFile(hFile, pBytes, dwByteCount, &dwDummy, NULL))
- goto done;
-
- /* free the buffer, if we have allocated one */
- if (pAllocBuffer)
- {
- HeapFree(GetProcessHeap(), 0, pAllocBuffer);
- pAllocBuffer = NULL;
- }
- }
- bSuccess = TRUE;
-
-done:
- if (pAllocBuffer)
- HeapFree(GetProcessHeap(), 0, pAllocBuffer);
- return bSuccess;
-}
-
-BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding, int iEoln)
-{
- WCHAR wcBom;
- WCHAR wcEoln;
- BYTE bEoln;
- LPBYTE pbEoln = NULL;
- DWORD dwDummy, dwPos, dwNext, dwEolnSize = 0;
-
- /* Write the proper byte order marks if not ANSI */
- if (iEncoding != ENCODING_ANSI)
- {
- wcBom = 0xFEFF;
- if (!WriteEncodedText(hFile, &wcBom, 1, iEncoding))
- return FALSE;
- }
-
- /* Identify the proper eoln to use */
- switch(iEoln)
- {
- case EOLN_LF:
- bEoln = '\n';
- pbEoln = &bEoln;
- dwEolnSize = sizeof(bEoln);
- break;
- case EOLN_CR:
- bEoln = '\r';
- pbEoln = &bEoln;
- dwEolnSize = sizeof(bEoln);
- break;
- }
-
- /* If we have an eoln, make sure it is of the proper encoding */
- if (pbEoln && ((iEncoding == ENCODING_UNICODE) || (iEncoding == ENCODING_UNICODE_BE)))
- {
- wcEoln = bEoln;
- pbEoln = (LPBYTE) &wcEoln;
- dwEolnSize = sizeof(wcEoln);
- }
-
- dwPos = 0;
-
- while(dwPos < dwTextLen)
- {
- if (pbEoln)
- {
- /* Find the next eoln */
- dwNext = dwPos;
- while(dwNext < dwTextLen-1)
- {
- if ((pszText[dwNext] == '\r') && (pszText[dwNext+1] == '\n'))
- break;
- dwNext++;
- }
- }
- else
- {
- /* No eoln conversion is necessary */
- dwNext = dwTextLen;
- }
-
- if (!WriteEncodedText(hFile, &pszText[dwPos], dwNext - dwPos, iEncoding))
- return FALSE;
- dwPos = dwNext;
-
- /* are we at an eoln? */
- while ((dwPos < dwTextLen-1) &&
- ((pszText[dwPos] == '\r') && (pszText[dwPos+1] == '\n')))
- {
- if (!WriteFile(hFile, pbEoln, dwEolnSize, &dwDummy, NULL))
- return FALSE;
- dwPos += 2;
- }
- }
- while(dwPos < dwTextLen);
-
- return TRUE;
-}
-
+/*
+ * Notepad (text.c)
+ *
+ * Copyright 1998,99 Marcel Baur <mbaur@g26.ethz.ch>
+ * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define UNICODE
+
+#include <assert.h>
+#include <stdio.h>
+#include <windows.h>
+#include <commdlg.h>
+
+#include "main.h"
+
+static BOOL Append(LPWSTR *ppszText, DWORD *pdwTextLen, LPCWSTR pszAppendText, DWORD dwAppendLen)
+{
+ LPWSTR pszNewText;
+
+ if (dwAppendLen > 0)
+ {
+ if (*ppszText)
+ {
+ pszNewText = (LPWSTR) HeapReAlloc(GetProcessHeap(), 0, *ppszText, (*pdwTextLen + dwAppendLen) * sizeof(WCHAR));
+ }
+ else
+ {
+ pszNewText = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, dwAppendLen * sizeof(WCHAR));
+ }
+
+ if (!pszNewText)
+ return FALSE;
+
+ memcpy(pszNewText + *pdwTextLen, pszAppendText, dwAppendLen * sizeof(WCHAR));
+ *ppszText = pszNewText;
+ *pdwTextLen += dwAppendLen;
+ }
+ return TRUE;
+}
+
+BOOL ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, int *piEncoding, int *piEoln)
+{
+ DWORD dwSize;
+ LPBYTE pBytes = NULL;
+ LPCWSTR pszText;
+ LPWSTR pszAllocText = NULL;
+ DWORD dwPos, i;
+ DWORD dwCharCount;
+ BOOL bSuccess = FALSE;
+ BYTE b;
+ int iEncoding = ENCODING_ANSI;
+ int iCodePage;
+ WCHAR szCrlf[2] = { '\r', '\n' };
+ DWORD adwEolnCount[3] = { 0, 0, 0 };
+
+ *ppszText = NULL;
+ *pdwTextLen = 0;
+
+ dwSize = GetFileSize(hFile, NULL);
+ if (dwSize == INVALID_FILE_SIZE)
+ goto done;
+
+ pBytes = HeapAlloc(GetProcessHeap(), 0, dwSize + 2);
+ if (!pBytes)
+ goto done;
+
+ if (!ReadFile(hFile, pBytes, dwSize, &dwSize, NULL))
+ goto done;
+ dwPos = 0;
+
+ /* Make sure that there is a NUL character at the end, in any encoding */
+ pBytes[dwSize + 0] = '\0';
+ pBytes[dwSize + 1] = '\0';
+
+ /* Look for Byte Order Marks */
+ if ((dwSize >= 2) && (pBytes[0] == 0xFF) && (pBytes[1] == 0xFE))
+ {
+ iEncoding = ENCODING_UNICODE;
+ dwPos += 2;
+ }
+ else if ((dwSize >= 2) && (pBytes[0] == 0xFE) && (pBytes[1] == 0xFF))
+ {
+ iEncoding = ENCODING_UNICODE_BE;
+ dwPos += 2;
+ }
+ else if ((dwSize >= 3) && (pBytes[0] == 0xEF) && (pBytes[1] == 0xBB) && (pBytes[2] == 0xBF))
+ {
+ iEncoding = ENCODING_UTF8;
+ dwPos += 3;
+ }
+
+ switch(iEncoding)
+ {
+ case ENCODING_UNICODE_BE:
+ for (i = dwPos; i < dwSize-1; i += 2)
+ {
+ b = pBytes[i+0];
+ pBytes[i+0] = pBytes[i+1];
+ pBytes[i+1] = b;
+ }
+ /* fall through */
+
+ case ENCODING_UNICODE:
+ pszText = (LPCWSTR) &pBytes[dwPos];
+ dwCharCount = (dwSize - dwPos) / sizeof(WCHAR);
+ break;
+
+ case ENCODING_ANSI:
+ case ENCODING_UTF8:
+ if (iEncoding == ENCODING_ANSI)
+ iCodePage = CP_ACP;
+ else if (iEncoding == ENCODING_UTF8)
+ iCodePage = CP_UTF8;
+ else
+ goto done;
+
+ dwCharCount = MultiByteToWideChar(iCodePage, 0, &pBytes[dwPos], dwSize - dwPos, NULL, 0);
+ if (dwCharCount == 0)
+ goto done;
+
+ pszAllocText = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, (dwCharCount + 1) * sizeof(WCHAR));
+ if (!pszAllocText)
+ goto done;
+
+ if (!MultiByteToWideChar(iCodePage, 0, &pBytes[dwPos], dwSize - dwPos, pszAllocText, dwCharCount))
+ goto done;
+
+ pszAllocText[dwCharCount] = '\0';
+ pszText = pszAllocText;
+ break;
+ }
+
+ dwPos = 0;
+ for (i = 0; i < dwCharCount; i++)
+ {
+ switch(pszText[i])
+ {
+ case '\r':
+ if ((i < dwCharCount-1) && (pszText[i+1] == '\n'))
+ {
+ i++;
+ adwEolnCount[EOLN_CRLF]++;
+ break;
+ }
+ /* fall through */
+
+ case '\n':
+ if (!Append(ppszText, pdwTextLen, &pszText[dwPos], i - dwPos))
+ return FALSE;
+ if (!Append(ppszText, pdwTextLen, szCrlf, sizeof(szCrlf) / sizeof(szCrlf[0])))
+ return FALSE;
+ dwPos = i + 1;
+
+ if (pszText[i] == '\r')
+ adwEolnCount[EOLN_CR]++;
+ else
+ adwEolnCount[EOLN_LF]++;
+ break;
+ }
+ }
+
+ if (!*ppszText && (pszText == pszAllocText))
+ {
+ /* special case; don't need to reallocate */
+ *ppszText = pszAllocText;
+ *pdwTextLen = dwCharCount;
+ pszAllocText = NULL;
+ }
+ else
+ {
+ /* append last remaining text */
+ if (!Append(ppszText, pdwTextLen, &pszText[dwPos], i - dwPos + 1))
+ return FALSE;
+ }
+
+ /* chose which eoln to use */
+ *piEoln = EOLN_CRLF;
+ if (adwEolnCount[EOLN_LF] > adwEolnCount[*piEoln])
+ *piEoln = EOLN_LF;
+ if (adwEolnCount[EOLN_CR] > adwEolnCount[*piEoln])
+ *piEoln = EOLN_CR;
+ *piEncoding = iEncoding;
+
+ bSuccess = TRUE;
+
+done:
+ if (pBytes)
+ HeapFree(GetProcessHeap(), 0, pBytes);
+ if (pszAllocText)
+ HeapFree(GetProcessHeap(), 0, pszAllocText);
+
+ if (!bSuccess && *ppszText)
+ {
+ HeapFree(GetProcessHeap(), 0, *ppszText);
+ *ppszText = NULL;
+ *pdwTextLen = 0;
+ }
+ return bSuccess;
+}
+
+static BOOL WriteEncodedText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding)
+{
+ LPBYTE pBytes;
+ LPBYTE pAllocBuffer = NULL;
+ DWORD dwPos = 0;
+ DWORD dwByteCount;
+ BYTE buffer[1024];
+ UINT iCodePage;
+ DWORD dwDummy, i;
+ BOOL bSuccess;
+ int iBufferSize, iRequiredBytes;
+ BYTE b;
+
+ while(dwPos < dwTextLen)
+ {
+ switch(iEncoding)
+ {
+ case ENCODING_UNICODE:
+ pBytes = (LPBYTE) &pszText[dwPos];
+ dwByteCount = (dwTextLen - dwPos) * sizeof(WCHAR);
+ dwPos = dwTextLen;
+ break;
+
+ case ENCODING_UNICODE_BE:
+ dwByteCount = (dwTextLen - dwPos) * sizeof(WCHAR);
+ if (dwByteCount > sizeof(buffer))
+ dwByteCount = sizeof(buffer);
+
+ memcpy(buffer, &pszText[dwPos], dwByteCount);
+ for (i = 0; i < dwByteCount; i += 2)
+ {
+ b = buffer[i+0];
+ buffer[i+0] = buffer[i+1];
+ buffer[i+1] = b;
+ }
+ dwPos += dwByteCount / sizeof(WCHAR);
+ break;
+
+ case ENCODING_ANSI:
+ case ENCODING_UTF8:
+ if (iEncoding == ENCODING_ANSI)
+ iCodePage = CP_ACP;
+ else if (iEncoding == ENCODING_UTF8)
+ iCodePage = CP_UTF8;
+ else
+ goto done;
+
+ iRequiredBytes = WideCharToMultiByte(iCodePage, 0, &pszText[dwPos], dwTextLen - dwPos, NULL, 0, NULL, NULL);
+ if (iRequiredBytes <= 0)
+ {
+ goto done;
+ }
+ else if (iRequiredBytes < sizeof(buffer))
+ {
+ pBytes = buffer;
+ iBufferSize = sizeof(buffer);
+ }
+ else
+ {
+ pAllocBuffer = (LPBYTE) HeapAlloc(GetProcessHeap(), 0, iRequiredBytes);
+ if (!pAllocBuffer)
+ return FALSE;
+ pBytes = pAllocBuffer;
+ iBufferSize = iRequiredBytes;
+ }
+
+ dwByteCount = WideCharToMultiByte(iCodePage, 0, &pszText[dwPos], dwTextLen - dwPos, (LPSTR) pBytes, iBufferSize, NULL, NULL);
+ if (!dwByteCount)
+ goto done;
+
+ dwPos = dwTextLen;
+ break;
+
+ default:
+ goto done;
+ }
+
+ if (!WriteFile(hFile, pBytes, dwByteCount, &dwDummy, NULL))
+ goto done;
+
+ /* free the buffer, if we have allocated one */
+ if (pAllocBuffer)
+ {
+ HeapFree(GetProcessHeap(), 0, pAllocBuffer);
+ pAllocBuffer = NULL;
+ }
+ }
+ bSuccess = TRUE;
+
+done:
+ if (pAllocBuffer)
+ HeapFree(GetProcessHeap(), 0, pAllocBuffer);
+ return bSuccess;
+}
+
+BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding, int iEoln)
+{
+ WCHAR wcBom;
+ WCHAR wcEoln;
+ BYTE bEoln;
+ LPBYTE pbEoln = NULL;
+ DWORD dwDummy, dwPos, dwNext, dwEolnSize = 0;
+
+ /* Write the proper byte order marks if not ANSI */
+ if (iEncoding != ENCODING_ANSI)
+ {
+ wcBom = 0xFEFF;
+ if (!WriteEncodedText(hFile, &wcBom, 1, iEncoding))
+ return FALSE;
+ }
+
+ /* Identify the proper eoln to use */
+ switch(iEoln)
+ {
+ case EOLN_LF:
+ bEoln = '\n';
+ pbEoln = &bEoln;
+ dwEolnSize = sizeof(bEoln);
+ break;
+ case EOLN_CR:
+ bEoln = '\r';
+ pbEoln = &bEoln;
+ dwEolnSize = sizeof(bEoln);
+ break;
+ }
+
+ /* If we have an eoln, make sure it is of the proper encoding */
+ if (pbEoln && ((iEncoding == ENCODING_UNICODE) || (iEncoding == ENCODING_UNICODE_BE)))
+ {
+ wcEoln = bEoln;
+ pbEoln = (LPBYTE) &wcEoln;
+ dwEolnSize = sizeof(wcEoln);
+ }
+
+ dwPos = 0;
+
+ while(dwPos < dwTextLen)
+ {
+ if (pbEoln)
+ {
+ /* Find the next eoln */
+ dwNext = dwPos;
+ while(dwNext < dwTextLen-1)
+ {
+ if ((pszText[dwNext] == '\r') && (pszText[dwNext+1] == '\n'))
+ break;
+ dwNext++;
+ }
+ }
+ else
+ {
+ /* No eoln conversion is necessary */
+ dwNext = dwTextLen;
+ }
+
+ if (!WriteEncodedText(hFile, &pszText[dwPos], dwNext - dwPos, iEncoding))
+ return FALSE;
+ dwPos = dwNext;
+
+ /* are we at an eoln? */
+ while ((dwPos < dwTextLen-1) &&
+ ((pszText[dwPos] == '\r') && (pszText[dwPos+1] == '\n')))
+ {
+ if (!WriteFile(hFile, pbEoln, dwEolnSize, &dwDummy, NULL))
+ return FALSE;
+ dwPos += 2;
+ }
+ }
+ while(dwPos < dwTextLen);
+
+ return TRUE;
+}
+
Property changes on: trunk/reactos/subsys/system/notepad/text.c
___________________________________________________________________
Name: svn:eol-style
+ native