Notepad will no longer add .txt if you invoke it specifying a file that does not...
[reactos.git] / reactos / subsys / system / notepad / main.c
index e7890ae..c0f1ed2 100644 (file)
@@ -94,7 +94,7 @@ static int NOTEPAD_MenuCommand(WPARAM wParam)
     case CMD_ABOUT_WINE:       DIALOG_HelpAboutWine(); break;
 
     default:
-       break;
+    break;
     }
    return 0;
 }
@@ -108,7 +108,7 @@ static BOOL NOTEPAD_FindTextAt(FINDREPLACE *pFindReplace, LPCTSTR pszText, int i
 {
     BOOL bMatches;
     int iTargetLength;
-       
+
     iTargetLength = _tcslen(pFindReplace->lpstrFindWhat);
 
     /* Make proper comparison */
@@ -145,8 +145,8 @@ static BOOL NOTEPAD_FindNext(FINDREPLACE *pFindReplace, BOOL bReplace, BOOL bSho
 
     iTargetLength = _tcslen(pFindReplace->lpstrFindWhat);
 
+    /* Retrieve the window text */
     iTextLength = GetWindowTextLength(Globals.hEdit);
-
     if (iTextLength > 0)
     {
         pszText = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (iTextLength + 1) * sizeof(TCHAR));
@@ -158,25 +158,37 @@ static BOOL NOTEPAD_FindNext(FINDREPLACE *pFindReplace, BOOL bReplace, BOOL bSho
 
     SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM) &dwBegin, (LPARAM) &dwEnd);
     if (bReplace && ((dwEnd - dwBegin) == iTargetLength))
-       {
+    {
         if (NOTEPAD_FindTextAt(pFindReplace, pszText, iTextLength, dwBegin))
-               {
+        {
             SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM) pFindReplace->lpstrReplaceWith);
             iAdjustment = _tcslen(pFindReplace->lpstrReplaceWith) - (dwEnd - dwBegin);
-               }
-       }
+        }
+    }
 
-    dwPosition = dwEnd;
-    while(dwPosition < iTextLength)
+    if (pFindReplace->Flags & FR_DOWN)
     {
-        bMatches = NOTEPAD_FindTextAt(pFindReplace, pszText, iTextLength, dwPosition);
-        if (bMatches)
-            break;
-
-        if (pFindReplace->Flags & FR_DOWN) 
+        /* Find Down */
+        dwPosition = dwEnd;
+        while(dwPosition < iTextLength)
+        {
+            bMatches = NOTEPAD_FindTextAt(pFindReplace, pszText, iTextLength, dwPosition);
+            if (bMatches)
+                break;
             dwPosition++;
-        else
+        }
+    }
+    else
+    {
+        /* Find Up */
+        dwPosition = dwBegin;
+        while(dwPosition > 0)
+        {
             dwPosition--;
+            bMatches = NOTEPAD_FindTextAt(pFindReplace, pszText, iTextLength, dwPosition);
+            if (bMatches)
+                break;
+        }
     }
 
     if (bMatches)
@@ -188,18 +200,18 @@ static BOOL NOTEPAD_FindNext(FINDREPLACE *pFindReplace, BOOL bReplace, BOOL bSho
         SendMessage(Globals.hEdit, EM_SCROLLCARET, 0, 0);
         bSuccess = TRUE;
     }
-       else
-       {
+    else
+    {
         /* Can't find target */
         if (bShowAlert)
-               {
+        {
             LoadString(Globals.hInstance, STRING_CANNOTFIND, szResource, SIZEOF(szResource));
             _sntprintf(szText, SIZEOF(szText), szResource, pFindReplace->lpstrFindWhat);
             LoadString(Globals.hInstance, STRING_NOTEPAD, szResource, SIZEOF(szResource));
             MessageBox(Globals.hFindReplaceDlg, szText, szResource, MB_OK);
-               }
+        }
         bSuccess = FALSE;
-       }
+    }
 
     if (pszText)
         HeapFree(GetProcessHeap(), 0, pszText);
@@ -220,7 +232,7 @@ static VOID NOTEPAD_ReplaceAll(FINDREPLACE *pFindReplace)
     while (NOTEPAD_FindNext(pFindReplace, TRUE, bShowAlert))
     {
         bShowAlert = FALSE;
-       }
+    }
 }
 
 /***********************************************************************
@@ -428,8 +440,8 @@ static void HandleCommandLine(LPWSTR cmdline)
     if (*cmdline)
     {
         /* file name is passed in the command line */
-        LPCWSTR file_name;
-        BOOL file_exists;
+        LPCWSTR file_name = NULL;
+        BOOL file_exists = FALSE;
         WCHAR buf[MAX_PATH];
 
         if (cmdline[0] == '"')
@@ -443,7 +455,7 @@ static void HandleCommandLine(LPWSTR cmdline)
             file_exists = TRUE;
             file_name = cmdline;
         }
-        else
+        else if (!HasFileExtension(cmdline))
         {
             static const WCHAR txtW[] = { '.','t','x','t',0 };
 
@@ -451,7 +463,6 @@ static void HandleCommandLine(LPWSTR cmdline)
             if (!lstrcmp(txtW, cmdline + lstrlen(cmdline) - lstrlen(txtW)))
             {
                 file_exists = FALSE;
-                file_name = cmdline;
             }
             else
             {
@@ -464,6 +475,7 @@ static void HandleCommandLine(LPWSTR cmdline)
 
         if (file_exists)
         {
+            file_name = cmdline;
             DoOpenFile(file_name);
             InvalidateRect(Globals.hMainWnd, NULL, FALSE);
             if (opt_print)