home *** CD-ROM | disk | FTP | other *** search
-
- /******************************************************************************\
- * This is a part of the Microsoft Source Code Samples.
- * Copyright (C) 1993-1997 Microsoft Corporation.
- * All rights reserved.
- * This source code is only intended as a supplement to
- * Microsoft Development Tools and/or WinHelp documentation.
- * See these sources for detailed information regarding the
- * Microsoft samples programs.
- \******************************************************************************/
-
- #include <windows.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include "console.h"
-
- /* Note: demos for Get/SetConsoleCP not implemented */
-
- /*********************************************************************
- * FUNCTION: showCP(HANDLE hConOut, UINT uiCP) *
- * *
- * PURPOSE: dump the 256 character set in the given codepage *
- * *
- * INPUT: the console output handle to use and the desired code page *
- * to display the characters in *
- *********************************************************************/
-
- void showCP(HANDLE hConOut, UINT uiCP)
- {
- BOOL bSuccess;
- DWORD dwSaveMode; /* store the current console mode to restore later */
- UINT uiSaveCP; /* store the current code page to restore later */
- int i;
- DWORD dwWritten;
-
- /* save the current output mode and code page */
- uiSaveCP = GetConsoleOutputCP();
- bSuccess = GetConsoleMode(hConOut, &dwSaveMode);
- PERR(bSuccess, "GetconsoleMode");
- /* turn off processed output so that all chars will display */
- bSuccess = SetConsoleMode(hConOut, dwSaveMode & ~ENABLE_PROCESSED_OUTPUT);
- PERR(bSuccess, "SetConsoleMode");
- bSuccess = SetConsoleOutputCP(uiCP);
- PERR(bSuccess, "SetConsoleOutputCP");
- for (i = 0; i < 256; i++)
- WriteConsole(hConOut, &i, 1, &dwWritten, NULL);
- /* now reset to original code page and output mode */
- SetConsoleOutputCP(uiSaveCP);
- bSuccess = SetConsoleMode(hConOut, dwSaveMode);
- PERR(bSuccess, "SetConsoleMode");
- return;
- }
-
- /*********************************************************************
- * FUNCTION: demoOutputCodePage(HANDLE hConOut) *
- * *
- * PURPOSE: demonstrate SetConsoleOutputCP and GetConsoleOutputCP. *
- * Dump the 256 character set for each code paged installed *
- * in the system. *
- * *
- * INPUT: the console output handle to manipulate the codepage for *
- *********************************************************************/
-
- void demoOutputCodePage(HANDLE hConOut)
- {
- DWORD iValue = 0; /* index value for RegEnumValue */
- LONG lSuccess; /* registry API return code */
- HKEY hKey; /* handle to registry key containing codepage info */
- char szValue[16], szData[16]; /* value and data info from registry */
- DWORD dwType, cchValue, cbData;
- UINT uiCP; /* the code page number that we extract from the registry */
- char szTemp[128];
- BOOL bSuccess;
- OSVERSIONINFO osVer; /* for GetVersionEx() */
-
- /* check if Win95, if so, display notice and return - the console codepage */
- /* APIs are not supported under Win95. */
- osVer.dwOSVersionInfoSize = sizeof(osVer);
- bSuccess = GetVersionEx(&osVer);
- PERR(bSuccess, "GetVersionEx");
- if (osVer.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
- {
- MessageBox(NULL,
- "The console codepage APIs are not supported on Windows 95",
- "Console API Test Application", MB_OK );
- return;
- }
- setConTitle(__FILE__);
- /* set the color for future text output */
- bSuccess = SetConsoleTextAttribute(hConOut, FOREGROUND_YELLOW |
- FOREGROUND_INTENSITY | BACKGROUND_BLUE);
- PERR(bSuccess, "SetConsoleTextAttribute");
- cls(hConOut); /* clear screen to new attributes */
- myPuts(hConOut, "Warning: code page info will not display properly unless you are\n"
- "using a TrueType font in the console. From the system menu, select\n"
- "Fonts, then select a TrueType font from the list available.");
- /* open the key containing all the code page info */
- lSuccess = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage", 0, KEY_QUERY_VALUE,
- &hKey);
- PERR(lSuccess == ERROR_SUCCESS, "RegOpenKeyEx");
- while(TRUE)
- {
- cchValue = sizeof(szValue);
- cbData = sizeof(szData);
- /* get the next code page entry */
- lSuccess = RegEnumValue(hKey, iValue++, szValue, &cchValue, NULL,
- &dwType, szData, &cbData);
- if (lSuccess == ERROR_NO_MORE_ITEMS)
- break;
- if (!szData[0]) /* if value data is NULL, it's an invalid code page; skip */
- continue;
- if (!(uiCP = atoi(szValue))) /* if value name is not a number, skip */
- continue;
- sprintf(szTemp, "\n\nCodepage: %s", szValue);
- myPuts(hConOut, szTemp);
- /* set code page and display all 256 chars on the console */
- showCP(hConOut, uiCP);
- }
- myPuts(hConOut, "\n\nHit enter to continue...");
- myGetchar();
- return;
- }
-
-
- /*********************************************************************
- * FUNCTION: demoInputCodePage(HANDLE hConOut) *
- * *
- * PURPOSE: demonstrate SetConsoleInputCP and GetConsoleInputCP. *
- * Read and display keyboard input, including special chars. *
- * *
- * INPUT: the console output handle to manipulate the codepage for *
- *********************************************************************/
-
- void demoInputCodePage(HANDLE hConOut)
- {
- myPuts(hConOut, "SetConsoleCP and GetConsoleCP demos");
- myPuts(hConOut, "not implemented yet.");
- myPuts(hConOut, "\n\nHit enter to continue...");
- myGetchar();
- return;
- }
-
-