#define INCL_PM

#include <OS2.h>
#include <StdLib.h>

#define Main main

//
// ... здесь описания типов данных ... 
//

Main ()
{
  // Начинаем работу в оконной оболочке.
  HAB Shell_handle = WinInitialize (0);

  if (Shell_handle)
  {
    // Создаём очередь сообщений.
    HMQ Msg_queue = WinCreateMsgQueue (Shell_handle, 0);

    if (Msg_queue)
    {
      //
      // ... здесь должно быть создание окон ... 
      //

      // Читаем очередь и передаём сообщения окнам, вызывая функции для обработки сообщений.
      QMSG Message = {0};

      while (WinGetMsg (Shell_handle, &Message, NULLHANDLE, 0, 0))
      {
        WinDispatchMsg (Shell_handle, &Message);
      }

      //
      // Или так:
      // WinMessageBox (HWND_DESKTOP, NULLHANDLE,
      //                "Hello World!", "", 0, 0);
      //

      //
      // ... здесь должно быть удаление созданных окон ... 
      //

      // Удаляем очередь.
      WinDestroyMsgQueue (Msg_queue);

      // Завершаем работу в оконной оболочке.
      WinTerminate (Shell_handle);
    }
    else
    {
      // Если очередь сообщений создать не удалось - выход.
      DosExit (EXIT_PROCESS, -1); 
    }
  }
  else
  {
    // Если оконной оболочки нет - выход.
    DosExit (EXIT_PROCESS, -1); 
  }

  return 0;
}