SDL-1.2: minor build updates to os/2 FSLib

From e41daccea88be785a5f7491c0e7544541dd23882 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 18 Feb 2021 17:56:50 +0300
Subject: [PATCH]  minor build updates to os/2 FSLib.

---
 os2/FSLib/FSLib.c     |  64 ++++-----
 os2/FSLib/FSLib.h     |  18 ++-
 os2/FSLib/build.patch | 310 +++++++++++++++++++++++++++++++++++++++---
 3 files changed, 335 insertions(+), 57 deletions(-)

diff --git a/os2/FSLib/FSLib.c b/os2/FSLib/FSLib.c
index af9056c3..3c5aa28e 100644
--- a/os2/FSLib/FSLib.c
+++ b/os2/FSLib/FSLib.c
@@ -84,7 +84,7 @@ static void             *pSNAPCommandParameter;    // Command parameter (if need
 typedef struct _FSLib_HWNDList
 {
   HWND hwndClient;
-  void *pNext;
+  struct _FSLib_HWNDList *pNext;
 } FSLib_HWNDList, *FSLib_HWNDList_p;
 
 static FSLib_HWNDList_p  pHWNDListHead = NULL;
@@ -95,13 +95,13 @@ static int               bFSLib_Initialized = 0;
 static unsigned long ulTimerFreq = 1;
 static unsigned long long llStartTime = 0;
 
-static void InitTimer()
+static void InitTimer(void)
 {
   DosTmrQueryFreq(&ulTimerFreq);
   DosTmrQueryTime((PQWORD) &llStartTime);
 }
 
-static unsigned long long GetTimeElapsed()
+static unsigned long long GetTimeElapsed(void)
 {
   unsigned long long llTime;
 
@@ -111,19 +111,18 @@ static unsigned long long GetTimeElapsed()
 #endif
 
 // Some prototypes
-static int  SNAP_Initialize();
-static void SNAP_Uninitialize();
-static int  SNAP_StartVideoModeUsage();
-static void SNAP_StopVideoModeUsage();
+static int  SNAP_Initialize(void);
+static void SNAP_Uninitialize(void);
+static int  SNAP_StartVideoModeUsage(void);
+static void SNAP_StopVideoModeUsage(void);
 static void SNAP_SetVideoMode_core(GA_modeInfo *pVideoMode);
 static void SNAP_SetVideoMode(GA_modeInfo *pVideoMode);
 static void SNAP_ThreadFunc(void *pParm);
 
-static int  FSLib_RegisterWindowClass();
-static void FSLib_FindBestFSMode(FSLib_VideoMode_p pSrcBufferDesc,
-				 GA_modeInfo *pFSModeInfo);
+static int  FSLib_RegisterWindowClass(void);
+static void FSLib_FindBestFSMode(FSLib_VideoMode_p pSrcBufferDesc, GA_modeInfo *pFSModeInfo);
 
-static void SNAP_StopVideoModeUsage()
+static void SNAP_StopVideoModeUsage(void)
 {
   if (bUnloadRef2D)
   {
@@ -135,7 +134,7 @@ static void SNAP_StopVideoModeUsage()
   }
 }
 
-static int SNAP_StartVideoModeUsage()
+static int SNAP_StartVideoModeUsage(void)
 {
   int iResult = 1;
 
@@ -217,8 +216,7 @@ static int SNAP_StartVideoModeUsage()
   return iResult;
 }
 
-
-static void SNAP_Uninitialize()
+static void SNAP_Uninitialize(void)
 {
   //  If current video mode != desktop video mode, then set desktop video mode!
   if (!iInPM)
@@ -282,7 +280,7 @@ static void SNAP_Uninitialize()
   }
 }
 
-static int SNAP_Initialize()
+static int SNAP_Initialize(void)
 {
 #ifdef DEBUG_BUILD
   printf("[SNAP_Initialize] : Initializing...\n");
@@ -315,7 +313,6 @@ static int SNAP_Initialize()
   return 1;
 }
 
-
 static int SNAP_SameVideoMode(GA_modeInfo *pVideoMode1, GA_modeInfo *pVideoMode2)
 {
   int iResult = 0;
@@ -340,7 +337,7 @@ static int SNAP_SameVideoMode(GA_modeInfo *pVideoMode1, GA_modeInfo *pVideoMode2
   return iResult;
 }
 
-static void SNAP_StopPresentationManager()
+static void SNAP_StopPresentationManager(void)
 {
   HAB hab;
   HWND hwnd;
@@ -357,7 +354,7 @@ static void SNAP_StopPresentationManager()
 
   hwnd = WinQueryDesktopWindow(hab, 0);
 #ifdef DEBUG_BUILD
-  if (hwnd==NULL)
+  if (hwnd==NULLHANDLE)
     printf("[SNAP_StopPresentationManager] : Error at WinQueryDesktopWindow()!\n");
 #endif
   hdc = WinQueryWindowDC(hwnd);                    // Get HDC of desktop
@@ -382,7 +379,7 @@ static void SNAP_StopPresentationManager()
   }
 }
 
-static void SNAP_RestartPresentationManager()
+static void SNAP_RestartPresentationManager(void)
 {
   HWND hwnd;
   HDC  hdc;
@@ -982,7 +979,7 @@ static void FSLib_GAmodeInfo2FSLibVideoMode(GA_modeInfo *pModeInfo,
   memcpy(&(pVideoMode->PixelFormat), &(pModeInfo->PixelFormat), sizeof(FSLib_PixelFormat));
 }
 
-DECLSPEC int               FSLIBCALL FSLib_Initialize()
+DECLSPEC int               FSLIBCALL FSLib_Initialize(void)
 {
   int rc;
 
@@ -1029,7 +1026,7 @@ DECLSPEC int               FSLIBCALL FSLib_Initialize()
   return 1;
 }
 
-DECLSPEC void              FSLIBCALL FSLib_Uninitialize()
+DECLSPEC void              FSLIBCALL FSLib_Uninitialize(void)
 {
   if (bFSLib_Initialized)
   {
@@ -1068,7 +1065,7 @@ DECLSPEC void              FSLIBCALL FSLib_Uninitialize()
   }
 }
 
-static void FSLib_EmergencyUninitialize()
+static void FSLib_EmergencyUninitialize(void)
 {
   if (bFSLib_Initialized)
   {
@@ -1466,12 +1463,12 @@ static MRESULT EXPENTRY FSLib_WndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM m
 	  if (!prectlVisibleArea)
 	  {
             iMaxNumOfVisibleAreaRectangles = 50;
-	    prectlVisibleArea = malloc(iMaxNumOfVisibleAreaRectangles*sizeof(RECTL));
+	    prectlVisibleArea = (PRECTL) malloc(iMaxNumOfVisibleAreaRectangles * sizeof(RECTL));
           }
 
 	  // Get the all ORed rectangles
           if (prectlVisibleArea)
-	  do {
+	   do {
 	    rgnctl.ircStart = 1;
 	    rgnctl.crc = iMaxNumOfVisibleAreaRectangles;
 	    rgnctl.crcReturned = 0;
@@ -1728,8 +1725,7 @@ static MRESULT EXPENTRY FSLib_WndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM m
 }
 
 
-
-static int FSLib_RegisterWindowClass()
+static int FSLib_RegisterWindowClass(void)
 {
   HAB hab;
 
@@ -1868,8 +1864,14 @@ static void FSLib_FindBestFSMode(FSLib_VideoMode_p pSrcBufferDesc,
 #endif
 }
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 // -- Definition of DosGetInfoSeg() API to be called from 32bits code: --
 USHORT APIENTRY16 DOS16GETINFOSEG(PUSHORT pselGlobal, PUSHORT pselLocal);
+#ifdef __cplusplus
+}
+#endif
 #define DosGetInfoSeg DOS16GETINFOSEG
 
 /* Global Information Segment */
@@ -1910,7 +1912,7 @@ typedef struct _GINFOSEG {	/* gis */
 } GINFOSEG;
 typedef GINFOSEG FAR *PGINFOSEG;
 
-static int FSLib_IsPMTheForegroundFSSession()
+static int FSLib_IsPMTheForegroundFSSession(void)
 {
   APIRET         rc;
   USHORT         globalSeg, localSeg;
@@ -1938,7 +1940,7 @@ static int FSLib_IsPMTheForegroundFSSession()
 
 
 // Get all available fullscreen video modes
-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList()
+DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList(void)
 {
   FSLib_VideoMode_p pResult, pLast, pNewEntry;
   GA_modeInfo modeInfo;
@@ -1999,7 +2001,7 @@ DECLSPEC int               FSLIBCALL FSLib_FreeVideoModeList(FSLib_VideoMode_p p
   return 1;
 }
 // Get pointer to desktop video mode (Don't free it, it's static!)
-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode()
+DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode(void)
 {
   return &desktopVideoModeInfo;
 }
@@ -2625,8 +2627,8 @@ DECLSPEC int               FSLIBCALL FSLib_BitBlt(HWND hwndClient,
                   printf("[FSLib_BitBlt] : End of Blitting\n");
                   fflush(stdout);
 #endif
-
                 }
+
 #ifdef SWCURSOR_HACK
                 // Resore mouse cursor if have to
                 if ((cursorFuncs.BeginAccess) && (cursorFuncs.EndAccess) && (bMouseHidden))
@@ -2644,7 +2646,6 @@ DECLSPEC int               FSLIBCALL FSLib_BitBlt(HWND hwndClient,
 
                 DosReleaseMutexSem(hmtxUseSNAP);
               }
-              
             }
 #ifdef DEBUG_BUILD
             else
@@ -2660,7 +2661,6 @@ DECLSPEC int               FSLIBCALL FSLib_BitBlt(HWND hwndClient,
             printf("[FSLib_BitBlt] : Not enough memory for modified visible area!\n");
           }
 #endif
-
         }
       }
     }
diff --git a/os2/FSLib/FSLib.h b/os2/FSLib/FSLib.h
index 3fe31c88..bafa3619 100644
--- a/os2/FSLib/FSLib.h
+++ b/os2/FSLib/FSLib.h
@@ -4,6 +4,10 @@
 #define INCL_WIN
 #include <os2.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define FSLIBCALL _System
 #define DECLSPEC  __declspec(dllexport)
 
@@ -35,23 +39,23 @@ typedef struct _FSLib_VideoMode
   unsigned int       uiBPP;
   FSLib_PixelFormat  PixelFormat;
 
-  void *pNext;
+  struct _FSLib_VideoMode * pNext;
 
 } FSLib_VideoMode, *FSLib_VideoMode_p;
 
 // Initialization of FSLib for the calling process.
 // Returns 1 if successful!
-DECLSPEC int               FSLIBCALL FSLib_Initialize();
+DECLSPEC int               FSLIBCALL FSLib_Initialize(void);
 
 // Uninitialization of FSLib.
-DECLSPEC void              FSLIBCALL FSLib_Uninitialize();
+DECLSPEC void              FSLIBCALL FSLib_Uninitialize(void);
 
 // Get all available fullscreen video modes
-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList();
+DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList(void);
 // Free list of available fullscreen video modes
 DECLSPEC int               FSLIBCALL FSLib_FreeVideoModeList(FSLib_VideoMode_p pVideoModeListHead);
 // Get pointer to desktop video mode (Don't free it, it's static!)
-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode();
+DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode(void);
 
 
 // Create a FSLib client window with given frame, telling the
@@ -117,4 +121,8 @@ DECLSPEC int               FSLIBCALL FSLib_IsFSLibWindow(HWND hwndClient);
 //   to/from fullscreen mode (flag is in mp2)
 #define FSLN_TOGGLEFSMODE        0
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/os2/FSLib/build.patch b/os2/FSLib/build.patch
index cfe0ed9d..b07628c4 100644
--- a/os2/FSLib/build.patch
+++ b/os2/FSLib/build.patch
@@ -1,5 +1,5 @@
 --- FSLib.c~	2007-01-16 11:55:20.000000000 +0200
-+++ FSLib.c	2020-10-20 04:02:10.000000000 +0300
++++ FSLib.c	2021-02-02 11:01:40.000000000 +0300
 @@ -66,7 +66,7 @@ static HMQ               hmq;
  
  static int               tidSNAPThread;
@@ -9,16 +9,107 @@
  static HEV               hevSNAPCommandAvailable;  // Posted when there is a command for the SNAP-Thread!
  static HEV               hevSNAPResultReady;       // Posted when the result is ready for the command.
  static int               iSNAPCommand;             // Command code
-@@ -120,6 +120,8 @@ static void SNAP_SetVideoMode(GA_modeInf
+@@ -84,7 +84,7 @@ static void             *pSNAPCommandPar
+ typedef struct _FSLib_HWNDList
+ {
+   HWND hwndClient;
+-  void *pNext;
++  struct _FSLib_HWNDList *pNext;
+ } FSLib_HWNDList, *FSLib_HWNDList_p;
+ 
+ static FSLib_HWNDList_p  pHWNDListHead = NULL;
+@@ -95,13 +95,13 @@ static int               bFSLib_Initiali
+ static unsigned long ulTimerFreq = 1;
+ static unsigned long long llStartTime = 0;
+ 
+-static void InitTimer()
++static void InitTimer(void)
+ {
+   DosTmrQueryFreq(&ulTimerFreq);
+   DosTmrQueryTime((PQWORD) &llStartTime);
+ }
+ 
+-static unsigned long long GetTimeElapsed()
++static unsigned long long GetTimeElapsed(void)
+ {
+   unsigned long long llTime;
+ 
+@@ -111,17 +111,18 @@ static unsigned long long GetTimeElapsed
+ #endif
+ 
+ // Some prototypes
+-static int  SNAP_Initialize();
+-static void SNAP_Uninitialize();
+-static int  SNAP_StartVideoModeUsage();
+-static void SNAP_StopVideoModeUsage();
++static int  SNAP_Initialize(void);
++static void SNAP_Uninitialize(void);
++static int  SNAP_StartVideoModeUsage(void);
++static void SNAP_StopVideoModeUsage(void);
+ static void SNAP_SetVideoMode_core(GA_modeInfo *pVideoMode);
+ static void SNAP_SetVideoMode(GA_modeInfo *pVideoMode);
  static void SNAP_ThreadFunc(void *pParm);
  
- static int  FSLib_RegisterWindowClass();
-+static void FSLib_FindBestFSMode(FSLib_VideoMode_p pSrcBufferDesc,
-+				 GA_modeInfo *pFSModeInfo);
+-static int  FSLib_RegisterWindowClass();
++static int  FSLib_RegisterWindowClass(void);
++static void FSLib_FindBestFSMode(FSLib_VideoMode_p pSrcBufferDesc, GA_modeInfo *pFSModeInfo);
+ 
+-static void SNAP_StopVideoModeUsage()
++static void SNAP_StopVideoModeUsage(void)
+ {
+   if (bUnloadRef2D)
+   {
+@@ -133,7 +134,7 @@ static void SNAP_StopVideoModeUsage()
+   }
+ }
+ 
+-static int SNAP_StartVideoModeUsage()
++static int SNAP_StartVideoModeUsage(void)
+ {
+   int iResult = 1;
+ 
+@@ -215,8 +216,7 @@ static int SNAP_StartVideoModeUsage()
+   return iResult;
+ }
+ 
+-
+-static void SNAP_Uninitialize()
++static void SNAP_Uninitialize(void)
+ {
+   //  If current video mode != desktop video mode, then set desktop video mode!
+   if (!iInPM)
+@@ -280,7 +280,7 @@ static void SNAP_Uninitialize()
+   }
+ }
  
- static void SNAP_StopVideoModeUsage()
+-static int SNAP_Initialize()
++static int SNAP_Initialize(void)
  {
-@@ -359,14 +361,14 @@ static void SNAP_StopPresentationManager
+ #ifdef DEBUG_BUILD
+   printf("[SNAP_Initialize] : Initializing...\n");
+@@ -313,7 +313,6 @@ static int SNAP_Initialize()
+   return 1;
+ }
+ 
+-
+ static int SNAP_SameVideoMode(GA_modeInfo *pVideoMode1, GA_modeInfo *pVideoMode2)
+ {
+   int iResult = 0;
+@@ -338,7 +337,7 @@ static int SNAP_SameVideoMode(GA_modeInf
+   return iResult;
+ }
+ 
+-static void SNAP_StopPresentationManager()
++static void SNAP_StopPresentationManager(void)
+ {
+   HAB hab;
+   HWND hwnd;
+@@ -355,18 +354,18 @@ static void SNAP_StopPresentationManager
+ 
+   hwnd = WinQueryDesktopWindow(hab, 0);
+ #ifdef DEBUG_BUILD
+-  if (hwnd==NULL)
++  if (hwnd==NULLHANDLE)
      printf("[SNAP_StopPresentationManager] : Error at WinQueryDesktopWindow()!\n");
  #endif
    hdc = WinQueryWindowDC(hwnd);                    // Get HDC of desktop
@@ -35,7 +126,15 @@
        printf("[SNAP_StopPresentationManager] : Error at WinOpenWindowDC()!\n");
  #endif
    }
-@@ -387,18 +389,18 @@ static void SNAP_RestartPresentationMana
+@@ -380,25 +379,25 @@ static void SNAP_StopPresentationManager
+   }
+ }
+ 
+-static void SNAP_RestartPresentationManager()
++static void SNAP_RestartPresentationManager(void)
+ {
+   HWND hwnd;
+   HDC  hdc;
  
    hwnd = WinQueryDesktopWindow(hab, 0);
  #ifdef DEBUG_BUILD
@@ -57,7 +156,7 @@
        printf("[SNAP_RestartPresentationManager] : Error at WinOpenWindowDC()!\n");
  #endif
    }
-@@ -577,7 +579,7 @@ static void SNAP_ThreadUninitialize(int 
+@@ -577,7 +576,7 @@ static void SNAP_ThreadUninitialize(int 
  #ifdef DEBUG_BUILD
        printf("[SNAP_ThreadFunc] :   GA_unloadDriver()...\n");
  #endif
@@ -66,7 +165,7 @@
      }
      if ((hmq) && (!iEmergency))
      {
-@@ -795,7 +797,7 @@ static void SNAP_ThreadFunc(void *pParm)
+@@ -795,7 +794,7 @@ static void SNAP_ThreadFunc(void *pParm)
  #ifdef DEBUG_BUILD
      printf("[SNAP_ThreadFunc] : Could not query init funcs\n");
  #endif
@@ -75,7 +174,7 @@
      WinDestroyMsgQueue(hmq);
      WinTerminate(hab);
      iSNAPThreadStatus = SNAPTHREADSTATUS_STOPPED_ERROR;
-@@ -810,7 +812,7 @@ static void SNAP_ThreadFunc(void *pParm)
+@@ -810,7 +809,7 @@ static void SNAP_ThreadFunc(void *pParm)
  #ifdef DEBUG_BUILD
      printf("[SNAP_ThreadFunc] : Could not query driver funcs\n");
  #endif
@@ -84,7 +183,7 @@
      WinDestroyMsgQueue(hmq);
      WinTerminate(hab);
      iSNAPThreadStatus = SNAPTHREADSTATUS_STOPPED_ERROR;
-@@ -860,7 +862,7 @@ static void SNAP_ThreadFunc(void *pParm)
+@@ -860,7 +859,7 @@ static void SNAP_ThreadFunc(void *pParm)
    // Create semaphores
    if ((rc = DosCreateMutexSem(NULL, &hmtxUseSNAP, 0, FALSE))!=NO_ERROR)
    {
@@ -93,7 +192,7 @@
  #ifdef DEBUG_BUILD
      printf("[SNAP_ThreadFunc] : Could not create mutex semaphore! rc = %d\n", rc);
  #endif
-@@ -873,7 +875,7 @@ static void SNAP_ThreadFunc(void *pParm)
+@@ -873,7 +872,7 @@ static void SNAP_ThreadFunc(void *pParm)
    if ((rc = DosCreateEventSem(NULL, &hevSNAPCommandAvailable, 0, FALSE))!=NO_ERROR)
    {
      DosCloseMutexSem(hmtxUseSNAP); hmtxUseSNAP = NULLHANDLE;
@@ -102,7 +201,7 @@
  #ifdef DEBUG_BUILD
      printf("[SNAP_ThreadFunc] : Could not create event semaphore! rc = %d\n", rc);
  #endif
-@@ -887,7 +889,7 @@ static void SNAP_ThreadFunc(void *pParm)
+@@ -887,7 +886,7 @@ static void SNAP_ThreadFunc(void *pParm)
    {
      DosCloseEventSem(hevSNAPCommandAvailable); hevSNAPCommandAvailable = NULLHANDLE;
      DosCloseMutexSem(hmtxUseSNAP); hmtxUseSNAP = NULLHANDLE;
@@ -111,7 +210,7 @@
  #ifdef DEBUG_BUILD
      printf("[SNAP_ThreadFunc] : Could not create event semaphore! rc = %d\n", rc);
  #endif
-@@ -907,7 +909,7 @@ static void SNAP_ThreadFunc(void *pParm)
+@@ -907,7 +906,7 @@ static void SNAP_ThreadFunc(void *pParm)
      DosCloseEventSem(hevSNAPResultReady); hevSNAPResultReady = NULLHANDLE;
      DosCloseEventSem(hevSNAPCommandAvailable); hevSNAPCommandAvailable = NULLHANDLE;
      DosCloseMutexSem(hmtxUseSNAP); hmtxUseSNAP = NULLHANDLE;
@@ -120,7 +219,16 @@
      WinDestroyMsgQueue(hmq);
      WinTerminate(hab);
      iSNAPThreadStatus = SNAPTHREADSTATUS_STOPPED_ERROR;
-@@ -1012,7 +1014,7 @@ DECLSPEC int               FSLIBCALL FSL
+@@ -980,7 +979,7 @@ static void FSLib_GAmodeInfo2FSLibVideoM
+   memcpy(&(pVideoMode->PixelFormat), &(pModeInfo->PixelFormat), sizeof(FSLib_PixelFormat));
+ }
+ 
+-DECLSPEC int               FSLIBCALL FSLib_Initialize()
++DECLSPEC int               FSLIBCALL FSLib_Initialize(void)
+ {
+   int rc;
+ 
+@@ -1012,7 +1011,7 @@ DECLSPEC int               FSLIBCALL FSL
    // Register new class
    if (!FSLib_RegisterWindowClass())
    {
@@ -129,7 +237,16 @@
      SNAP_Uninitialize();
  #ifdef DEBUG_BUILD
      printf("[FSLib_Initialize] : Could not register new window class!\n");
-@@ -1053,7 +1055,7 @@ DECLSPEC void              FSLIBCALL FSL
+@@ -1027,7 +1026,7 @@ DECLSPEC int               FSLIBCALL FSL
+   return 1;
+ }
+ 
+-DECLSPEC void              FSLIBCALL FSLib_Uninitialize()
++DECLSPEC void              FSLIBCALL FSLib_Uninitialize(void)
+ {
+   if (bFSLib_Initialized)
+   {
+@@ -1053,7 +1052,7 @@ DECLSPEC void              FSLIBCALL FSL
  #ifdef DEBUG_BUILD
      printf("[FSLib_Uninitialize] : Destroying semaphore\n");
  #endif
@@ -138,7 +255,16 @@
      // Uninitialize SNAP
  #ifdef DEBUG_BUILD
      printf("[FSLib_Uninitialize] : Uninitializing SNAP\n");
-@@ -1092,7 +1094,7 @@ static void FSLib_EmergencyUninitialize(
+@@ -1066,7 +1065,7 @@ DECLSPEC void              FSLIBCALL FSL
+   }
+ }
+ 
+-static void FSLib_EmergencyUninitialize()
++static void FSLib_EmergencyUninitialize(void)
+ {
+   if (bFSLib_Initialized)
+   {
+@@ -1092,7 +1091,7 @@ static void FSLib_EmergencyUninitialize(
  #ifdef DEBUG_BUILD
      printf("[FSLib_EmergencyUninitialize] : Destroying mutex semaphore\n");
  #endif
@@ -147,7 +273,7 @@
  
      // We don't have to uninitialize SNAP here, it will be done by
      // SNAPThread's Exception handler
-@@ -1288,23 +1290,23 @@ static MRESULT EXPENTRY FSLib_WndProc(HW
+@@ -1288,23 +1287,23 @@ static MRESULT EXPENTRY FSLib_WndProc(HW
  	fflush(stdout);
  #endif
  	// Set up window storage initial values
@@ -180,7 +306,22 @@
          pswpFrameSWP = (PSWP) malloc(sizeof(SWP));
          WinSetWindowULong(hwnd, FSLIB_WINDOWDATA_PSWP_FRAMESWP, (ULONG) pswpFrameSWP);
  
-@@ -1518,8 +1520,8 @@ static MRESULT EXPENTRY FSLib_WndProc(HW
+@@ -1464,12 +1463,12 @@ static MRESULT EXPENTRY FSLib_WndProc(HW
+ 	  if (!prectlVisibleArea)
+ 	  {
+             iMaxNumOfVisibleAreaRectangles = 50;
+-	    prectlVisibleArea = malloc(iMaxNumOfVisibleAreaRectangles*sizeof(RECTL));
++	    prectlVisibleArea = (PRECTL) malloc(iMaxNumOfVisibleAreaRectangles * sizeof(RECTL));
+           }
+ 
+ 	  // Get the all ORed rectangles
+           if (prectlVisibleArea)
+-	  do {
++	   do {
+ 	    rgnctl.ircStart = 1;
+ 	    rgnctl.crc = iMaxNumOfVisibleAreaRectangles;
+ 	    rgnctl.crcReturned = 0;
+@@ -1518,8 +1517,8 @@ static MRESULT EXPENTRY FSLib_WndProc(HW
              printf("[FSLib_WndProc] : WM_VRNENABLED : Redrawing dirty window.\n");
  	    fflush(stdout);
  #endif
@@ -191,3 +332,132 @@
            }
  
  #ifdef DEBUG_BUILD
+@@ -1726,8 +1725,7 @@ static MRESULT EXPENTRY FSLib_WndProc(HW
+ }
+ 
+ 
+-
+-static int FSLib_RegisterWindowClass()
++static int FSLib_RegisterWindowClass(void)
+ {
+   HAB hab;
+ 
+@@ -1866,8 +1864,14 @@ static void FSLib_FindBestFSMode(FSLib_V
+ #endif
+ }
+ 
++#ifdef __cplusplus
++extern "C" {
++#endif
+ // -- Definition of DosGetInfoSeg() API to be called from 32bits code: --
+ USHORT APIENTRY16 DOS16GETINFOSEG(PUSHORT pselGlobal, PUSHORT pselLocal);
++#ifdef __cplusplus
++}
++#endif
+ #define DosGetInfoSeg DOS16GETINFOSEG
+ 
+ /* Global Information Segment */
+@@ -1908,7 +1912,7 @@ typedef struct _GINFOSEG {	/* gis */
+ } GINFOSEG;
+ typedef GINFOSEG FAR *PGINFOSEG;
+ 
+-static int FSLib_IsPMTheForegroundFSSession()
++static int FSLib_IsPMTheForegroundFSSession(void)
+ {
+   APIRET         rc;
+   USHORT         globalSeg, localSeg;
+@@ -1936,7 +1940,7 @@ static int FSLib_IsPMTheForegroundFSSess
+ 
+ 
+ // Get all available fullscreen video modes
+-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList()
++DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList(void)
+ {
+   FSLib_VideoMode_p pResult, pLast, pNewEntry;
+   GA_modeInfo modeInfo;
+@@ -1997,7 +2001,7 @@ DECLSPEC int               FSLIBCALL FSL
+   return 1;
+ }
+ // Get pointer to desktop video mode (Don't free it, it's static!)
+-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode()
++DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode(void)
+ {
+   return &desktopVideoModeInfo;
+ }
+@@ -2623,8 +2627,8 @@ DECLSPEC int               FSLIBCALL FSL
+                   printf("[FSLib_BitBlt] : End of Blitting\n");
+                   fflush(stdout);
+ #endif
+-
+                 }
++
+ #ifdef SWCURSOR_HACK
+                 // Resore mouse cursor if have to
+                 if ((cursorFuncs.BeginAccess) && (cursorFuncs.EndAccess) && (bMouseHidden))
+@@ -2642,7 +2646,6 @@ DECLSPEC int               FSLIBCALL FSL
+ 
+                 DosReleaseMutexSem(hmtxUseSNAP);
+               }
+-              
+             }
+ #ifdef DEBUG_BUILD
+             else
+@@ -2658,7 +2661,6 @@ DECLSPEC int               FSLIBCALL FSL
+             printf("[FSLib_BitBlt] : Not enough memory for modified visible area!\n");
+           }
+ #endif
+-
+         }
+       }
+     }
+--- FSLib.h~	2005-02-15 16:37:58.000000000 +0200
++++ FSLib.h	2021-02-02 11:01:40.000000000 +0300
+@@ -4,6 +4,10 @@
+ #define INCL_WIN
+ #include <os2.h>
+ 
++#ifdef __cplusplus
++extern "C" {
++#endif
++
+ #define FSLIBCALL _System
+ #define DECLSPEC  __declspec(dllexport)
+ 
+@@ -35,23 +39,23 @@ typedef struct _FSLib_VideoMode
+   unsigned int       uiBPP;
+   FSLib_PixelFormat  PixelFormat;
+ 
+-  void *pNext;
++  struct _FSLib_VideoMode * pNext;
+ 
+ } FSLib_VideoMode, *FSLib_VideoMode_p;
+ 
+ // Initialization of FSLib for the calling process.
+ // Returns 1 if successful!
+-DECLSPEC int               FSLIBCALL FSLib_Initialize();
++DECLSPEC int               FSLIBCALL FSLib_Initialize(void);
+ 
+ // Uninitialization of FSLib.
+-DECLSPEC void              FSLIBCALL FSLib_Uninitialize();
++DECLSPEC void              FSLIBCALL FSLib_Uninitialize(void);
+ 
+ // Get all available fullscreen video modes
+-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList();
++DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetVideoModeList(void);
+ // Free list of available fullscreen video modes
+ DECLSPEC int               FSLIBCALL FSLib_FreeVideoModeList(FSLib_VideoMode_p pVideoModeListHead);
+ // Get pointer to desktop video mode (Don't free it, it's static!)
+-DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode();
++DECLSPEC FSLib_VideoMode_p FSLIBCALL FSLib_GetDesktopVideoMode(void);
+ 
+ 
+ // Create a FSLib client window with given frame, telling the
+@@ -117,4 +121,8 @@ DECLSPEC int               FSLIBCALL FSL
+ //   to/from fullscreen mode (flag is in mp2)
+ #define FSLN_TOGGLEFSMODE        0
+ 
++#ifdef __cplusplus
++}
++#endif
++
+ #endif