[CONUTILS]: Add some string resources functions that can support a specified hModule...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 1 Oct 2017 16:03:44 +0000 (16:03 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 1 Oct 2017 16:03:44 +0000 (16:03 +0000)
svn path=/trunk/; revision=76022

reactos/sdk/lib/conutils/pager.c
reactos/sdk/lib/conutils/pager.h
reactos/sdk/lib/conutils/screen.h
reactos/sdk/lib/conutils/stream.c
reactos/sdk/lib/conutils/stream.h

index 9a5bae4..cc2c2c4 100644 (file)
@@ -131,18 +131,30 @@ ConPutsPaging(
 }
 
 BOOL
-ConResPaging(
+ConResPagingEx(
     IN PCON_PAGER Pager,
     IN PAGE_PROMPT PagePrompt,
     IN BOOL StartPaging,
+    IN HINSTANCE hInstance OPTIONAL,
     IN UINT uID)
 {
     INT Len;
     PWCHAR szStr = NULL;
 
-    Len = K32LoadStringW(GetModuleHandleW(NULL), uID, (PWSTR)&szStr, 0);
+    Len = K32LoadStringW(hInstance, uID, (PWSTR)&szStr, 0);
     if (szStr && Len)
         return ConWritePaging(Pager, PagePrompt, StartPaging, szStr, Len);
     else
         return TRUE;
 }
+
+BOOL
+ConResPaging(
+    IN PCON_PAGER Pager,
+    IN PAGE_PROMPT PagePrompt,
+    IN BOOL StartPaging,
+    IN UINT uID)
+{
+    return ConResPagingEx(Pager, PagePrompt, StartPaging,
+                          NULL /*GetModuleHandleW(NULL)*/, uID);
+}
index 9dce8be..8a23875 100644 (file)
@@ -30,6 +30,14 @@ typedef struct _CON_PAGER
     DWORD LineCount;
 } CON_PAGER, *PCON_PAGER;
 
+#define INIT_CON_PAGER(pScreen)     {(pScreen), 0}
+
+#define InitializeConPager(pPager, pScreen) \
+do { \
+    (pPager)->Screen = (pScreen);   \
+    (pPager)->LineCount = 0;        \
+} while (0)
+
                                       // Pager,         Done,     Total
 typedef BOOL (__stdcall *PAGE_PROMPT)(IN PCON_PAGER, IN DWORD, IN DWORD);
 
@@ -48,6 +56,14 @@ ConPutsPaging(
     IN BOOL StartPaging,
     IN LPTSTR szStr);
 
+BOOL
+ConResPagingEx(
+    IN PCON_PAGER Pager,
+    IN PAGE_PROMPT PagePrompt,
+    IN BOOL StartPaging,
+    IN HINSTANCE hInstance OPTIONAL,
+    IN UINT uID);
+
 BOOL
 ConResPaging(
     IN PCON_PAGER Pager,
index 3365bec..01a95c5 100644 (file)
@@ -35,6 +35,15 @@ typedef struct _CON_SCREEN
     CONSOLE_CURSOR_INFO cci;
 } CON_SCREEN, *PCON_SCREEN;
 
+#define INIT_CON_SCREEN(pStream)    {(pStream)} /* {(pStream), {{}}, {{}}} */
+
+#define InitializeConScreen(pScreen, pStream)   \
+do { \
+    (pScreen)->Stream = (pStream);  \
+    RtlZeroMemory(&(pScreen)->csbi, sizeof((pScreen)->csbi));   \
+    RtlZeroMemory(&(pScreen)->cci , sizeof((pScreen)->cci ));   \
+} while (0)
+
 BOOL
 ConGetScreenInfo(
     IN PCON_SCREEN Screen,
index 433da40..f31d397 100644 (file)
@@ -483,7 +483,9 @@ ConWrite(
             SetLastError(ERROR_NOT_ENOUGH_MEMORY);
             return 0;
         }
-        len = WideCharToMultiByte(Stream->CodePage, 0, szStr, len, buffer, len * MB_LEN_MAX, NULL, NULL);
+        len = WideCharToMultiByte(Stream->CodePage, 0,
+                                  szStr, len, buffer, len * MB_LEN_MAX,
+                                  NULL, NULL);
         szStr = (PVOID)buffer;
 #else
         /*
@@ -705,14 +707,15 @@ ConPrintf(
 }
 
 INT
-ConResPuts(
+ConResPutsEx(
     IN PCON_STREAM Stream,
+    IN HINSTANCE hInstance OPTIONAL,
     IN UINT uID)
 {
     INT Len;
     PWCHAR szStr = NULL;
 
-    Len = K32LoadStringW(GetModuleHandleW(NULL), uID, (PWSTR)&szStr, 0);
+    Len = K32LoadStringW(hInstance, uID, (PWSTR)&szStr, 0);
     if (szStr && Len)
         // Len = ConPuts(Stream, szStr);
         CON_STREAM_WRITE2(Stream, szStr, Len, Len);
@@ -725,8 +728,17 @@ ConResPuts(
 }
 
 INT
-ConResPrintfV(
+ConResPuts(
+    IN PCON_STREAM Stream,
+    IN UINT uID)
+{
+    return ConResPutsEx(Stream, NULL /*GetModuleHandleW(NULL)*/, uID);
+}
+
+INT
+ConResPrintfExV(
     IN PCON_STREAM Stream,
+    IN HINSTANCE hInstance OPTIONAL,
     IN UINT    uID,
     IN va_list args) // arg_ptr
 {
@@ -734,13 +746,40 @@ ConResPrintfV(
     WCHAR bufSrc[CON_RC_STRING_MAX_SIZE];
 
     // NOTE: We may use the special behaviour where nBufMaxSize == 0
-    Len = K32LoadStringW(GetModuleHandleW(NULL), uID, bufSrc, ARRAYSIZE(bufSrc));
+    Len = K32LoadStringW(hInstance, uID, bufSrc, ARRAYSIZE(bufSrc));
     if (Len)
         Len = ConPrintfV(Stream, bufSrc, args);
 
     return Len;
 }
 
+INT
+ConResPrintfV(
+    IN PCON_STREAM Stream,
+    IN UINT    uID,
+    IN va_list args) // arg_ptr
+{
+    return ConResPrintfExV(Stream, NULL /*GetModuleHandleW(NULL)*/, uID, args);
+}
+
+INT
+__cdecl
+ConResPrintfEx(
+    IN PCON_STREAM Stream,
+    IN HINSTANCE hInstance OPTIONAL,
+    IN UINT uID,
+    ...)
+{
+    INT Len;
+    va_list args;
+
+    va_start(args, uID);
+    Len = ConResPrintfExV(Stream, hInstance, uID, args);
+    va_end(args);
+
+    return Len;
+}
+
 INT
 __cdecl
 ConResPrintf(
index bc03d51..7787d4b 100644 (file)
@@ -183,17 +183,38 @@ ConPrintf(
     IN LPWSTR szStr,
     ...);
 
+INT
+ConResPutsEx(
+    IN PCON_STREAM Stream,
+    IN HINSTANCE hInstance OPTIONAL,
+    IN UINT uID);
+
 INT
 ConResPuts(
     IN PCON_STREAM Stream,
     IN UINT uID);
 
+INT
+ConResPrintfExV(
+    IN PCON_STREAM Stream,
+    IN HINSTANCE hInstance OPTIONAL,
+    IN UINT    uID,
+    IN va_list args); // arg_ptr
+
 INT
 ConResPrintfV(
     IN PCON_STREAM Stream,
     IN UINT    uID,
     IN va_list args); // arg_ptr
 
+INT
+__cdecl
+ConResPrintfEx(
+    IN PCON_STREAM Stream,
+    IN HINSTANCE hInstance OPTIONAL,
+    IN UINT uID,
+    ...);
+
 INT
 __cdecl
 ConResPrintf(