text:
#ifndef WDL_H
#define WDL_H

#include <windows.h>
#include <objidl.h>     /* IStream */

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
    #define WD_INLINE   inline
#elif defined(__STDC_VERSION__)  &&  (__STDC_VERSION__ >= 199901L)
    #define WD_INLINE   static inline
#elif defined(__GNUC__)
    #define WD_INLINE   static __inline__
#elif defined(_MSC_VER)
    #define WD_INLINE   static __inline
#else
    #define WD_INLINE   static
#endif

/***************
 ***  Color  ***
 ***************/

/* 32-bit integer type representing a color.
 *
 * The color is made of four 8-bit components: red, green, blue and also
 * (optionally) alpha.
 *
 * The red, green and blue components range from most intensive (255) to
 * least intensive (0), and the alpha component from fully opaque (255) to
 * fully transparent (0).
 */
typedef DWORD WD_COLOR;

#define WD_ARGB(a,r,g,b)                                                    \
        ((((WD_COLOR)(a) & 0xff) << 24) | (((WD_COLOR)(r) & 0xff) << 16) |  \
         (((WD_COLOR)(g) & 0xff) << 8)  | (((WD_COLOR)(b) & 0xff) << 0))
#define WD_RGB(r,g,b)               WD_ARGB(255,(r),(g),(b))

#define WD_AVALUE(color)            (((WD_COLOR)(color) & 0xff000000U) >> 24)
#define WD_RVALUE(color)            (((WD_COLOR)(color) & 0x00ff0000U) >> 16)
#define WD_GVALUE(color)            (((WD_COLOR)(color) & 0x0000ff00U) >> 8)
#define WD_BVALUE(color)            (((WD_COLOR)(color) & 0x000000ffU) >> 0)

/* Create WD_COLOR from GDI's COLORREF. */
#define WD_COLOR_FROM_GDI_EX(a, cref)                                       \
        WD_ARGB((a), GetRValue(cref), GetGValue(cref), GetBValue(cref))
#define WD_COLOR_FROM_GDI(cref)     WD_COLOR_FROM_GDI_EX(255,(cref))

/* Get GDI's COLORREF from WD_COLOR. */
#define WD_COLOR_TO_GDI(color)                                              \
        RGB(WD_RVALUE(color), WD_GVALUE(color), WD_BVALUE(color))

/*****************************
 ***  2D Geometry Objects  ***
 *****************************/

typedef struct WD_POINT_tag WD_POINT;
struct WD_POINT_tag {
    float x;
    float y;
};

typedef struct WD_RECT_tag WD_RECT;
struct WD_RECT_tag {
    float x0;
    float y0;
    float x1;
    float y1;
};

typedef struct WD_MATRIX_tag WD_MATRIX;
struct WD_MATRIX_tag {
    float m11;
    float m12;
    float m21;
    float m22;
    float dx;
    float dy;
};

/************************
 ***  Initialization  ***
 ************************/

/* If the library is to be used in a context of multiple threads concurrently,
 * application has to provide pointers to synchronization functions.
 *
 * Note that even then, object instances (like e.g. canvas, brushes, images)
 * cannot be used concurrently, each thread must work with its own objects.
 *
 * This function may be called only once, prior to any other use of the library,
 * even prior any call to wdInitialize().
 *
 * Additionally wdPreInitialize() allows application to disable certain
 * features:
 *
 * WD_DISABLE_D2D: Disable D2D back-end.
 *
 * WD_DISABLE_GDIPLUS: Disable GDI+ back-end.
 *
 * Note: If all back-ends are disabled, wdInitialize() will subsequently fail.
 *
 * Note 2: wdPreinitialize() can (unlike wdInitialize()) be called from
 * DllMain() context.
 */

#define WD_DISABLE_D2D              0x0001
#define WD_DISABLE_GDIPLUS          0x0002

void wdPreInitialize(void (*fnLock)(void), void (*fnUnlock)(void), DWORD dwFlags);

/* Initialization functions may be called multiple times, even concurrently
 * (assuming a synchronization function have been provided via wdPreInitialize()).
 *
 * The library maintains a counter for each module and it gets really
 * uninitialized when the respective counter drops back to zero.
 *
 * The corresponding pairs of wdInitialize() and wdTerminate() should be
 * always called with the same flags, otherwise you may cause a resource leak.
 *
 * Note: These functions cannot be called from DllMain().
 */
#define WD_INIT_COREAPI             0x0000
#define WD_INIT_IMAGEAPI            0x0001
#define WD_INIT_STRINGAPI           0x0002

BOOL wdInitialize(DWORD dwFlags);
void wdTerminate(DWORD dwFlags);

/* Returns the current backend.
 * Returns -1 if there is none.
 */
#define WD_BACKEND_D2D          1
#define WD_BACKEND_GDIPLUS      2

int wdBackend(void);

/*******************************
 ***  Opaque Object Handles  ***
 *******************************/

typedef struct WD_BRUSH_tag *WD_HBRUSH;
typedef struct WD_HSTROKESTYLE_tag *WD_HSTROKESTYLE;
typedef struct WD_CANVAS_tag *WD_HCANVAS;
typedef struct WD_FONT_tag *WD_HFONT;
typedef struct WD_IMAGE_tag *WD_HIMAGE;
typedef struct WD_CACHEDIMAGE_tag* WD_HCACHEDIMAGE;
typedef struct WD_PATH_tag *WD_HPATH;

/***************************
 ***  Canvas Management  ***
 ***************************/

/* Canvas is an abstract object which can be painted with this library. */

/* The following flags modify default behavior of the canvas:
 *
 * WD_CANVAS_DOUBLEBUFFER: Enforces double-buffering. Note that Direct2D is
 * implicitly double-buffering so this option actually changes only behavior
 * of the GDI+ back-end.
 *
 * WD_CANVAS_NOGDICOMPAT: Disables GDI compatibility of the canvas. The canvas
 * can save some work at the cost the application cannot safely call
 * wdStartGdi().
 *
 * WD_CANVAS_LAYOUTRTL: By default, the canvas coordinate system has the
 * origin in the left top corner of the device context or window it is created
 * for. However with this flag the canvas shall have origin located in right
 * top corner and the x-coordinate shall grow to the left from it.
 */
#define WD_CANVAS_DOUBLEBUFFER      0x0001
#define WD_CANVAS_NOGDICOMPAT       0x0002
#define WD_CANVAS_LAYOUTRTL         0x0004

WD_HCANVAS wdCreateCanvasWithPaintStruct(HWND hWnd, PAINTSTRUCT* pPS, DWORD dwFlags);
WD_HCANVAS wdCreateCanvasWithHDC(HDC hDC, const RECT* pRect, DWORD dwFlags);
void wdDestroyCanvas(WD_HCANVAS hCanvas);

/* All drawing, filling and bit-blitting operations to it should be only
 * performed between wdBeginPaint() and wdEndPaint() calls.
 *
 * Note the canvas (and all resource created from it) may be cached for the
 * reuse only in the following circumstances (all conditions have to be met):
 *
 * - The canvas has been created with wdCreateCanvasWithPaintStruct() and
 *   is used strictly for handling WM_PAINT.
 * - wdEndPaint() returns TRUE.
 *
 * The cached canvas retains all the contents; so on the next WM_PAINT,
 * the application can repaint only those arts of the canvas which need
 * to present something new/different.
 */
void wdBeginPaint(WD_HCANVAS hCanvas);
BOOL wdEndPaint(WD_HCANVAS hCanvas);

/* This is supposed to be called to resize cached canvas (see above), if it
 * needs to be resized, typically as a response to WM_SIZE message.
 *
 * (Note however, that the painted contents of the canvas is lost.)
 */
BOOL wdResizeCanvas(WD_HCANVAS hCanvas, UINT uWidth, UINT uHeight);

/* Unless you create the canvas with the WD_CANVAS_NOGDICOMPAT flag, you may
 * also use GDI to paint on it. To do so, call wdStartGdi() to acquire HDC.
 * When done, release the HDC with wdEndGdi(). (Note that between those two
 * calls, only GDI can be used for painting on the canvas.)
 */
HDC wdStartGdi(WD_HCANVAS hCanvas, BOOL bKeepContents);
void wdEndGdi(WD_HCANVAS hCanvas, HDC hDC);

/* Clear the whole canvas with the given color. */
void wdClear(WD_HCANVAS hCanvas, WD_COLOR color);

/* If both, pRect and hPath are set, the clipping is set to the intersection
 * of both. If none of them is set, the clipping is reset and painting is not
 * clipped at all. */
void wdSetClip(WD_HCANVAS hCanvas, const WD_RECT* pRect, const WD_HPATH hPath);

/* The painting is by default measured in pixel units: 1.0f corresponds to
 * the pixel width or height, depending on the current axis.
 *
 * Origin (the point [0.0f, 0.0f]) corresponds always the top left pixel of
 * the canvas.
 *
 * Though this can be changed if a transformation is applied on the canvas.
 * Transformation is determined by a matrix which can specify translation,
 * rotation and scaling (in both axes), or any combination of these operations.
 */
void wdRotateWorld(WD_HCANVAS hCanvas, float cx, float cy, float fAngle);
void wdTranslateWorld(WD_HCANVAS hCanvas, float dx, float dy);
void wdTransformWorld(WD_HCANVAS hCanvas, const WD_MATRIX* pMatrix);
void wdResetWorld(WD_HCANVAS hCanvas);

/**************************
 ***  Image Management  ***
 **************************/

/* All these functions are usable only if the library has been initialized with
 * the flag WD_INIT_IMAGEAPI.
 *
 * Note that unlike most other resources (including WD_HCACHEDIMAGE), WD_HIMAGE
 * is not canvas-specific and can be used for painting on any canvas.
 */

/* For wdCreateImageFromBuffer */
#define WD_PIXELFORMAT_PALETTE      1  /* 1 byte per pixel. cPalette is used */
#define WD_PIXELFORMAT_R8G8B8       2  /* 3 bytes per pixel. RGB24 */
#define WD_PIXELFORMAT_R8G8B8A8     3  /* 4 bytes per pixel. RGBA32 */
#define WD_PIXELFORMAT_B8G8R8A8     4  /* 4 bytes per pixel. BGRA32 (and bottom-up; as GDI usually expects) */
#define WD_PIXELFORMAT_B8G8R8A8_PREMULTIPLIED  5  /* Same but with pre-multiplied alpha */

#define WD_ALPHA_IGNORE             0
#define WD_ALPHA_USE                1  /* Note: Only bitmaps with RGBA32 pixel format are supported. */
#define WD_ALPHA_USE_PREMULTIPLIED  2  /* Note: Only bitmaps with RGBA32 pixel format are supported. */

WD_HIMAGE wdCreateImageFromHBITMAP(HBITMAP hBmp);
WD_HIMAGE wdCreateImageFromHBITMAPWithAlpha(HBITMAP hBmp, int alphaMode);
WD_HIMAGE wdLoadImageFromFile(const WCHAR* pszPath);
WD_HIMAGE wdLoadImageFromIStream(IStream* pStream);
WD_HIMAGE wdLoadImageFromResource(HINSTANCE hInstance,
                const WCHAR* pszResType, const WCHAR* pszResName);
WD_HIMAGE wdCreateImageFromBuffer(UINT uWidth, UINT uHeight, UINT uStride, const BYTE* pBuffer,
                int pixelFormat, const COLORREF* cPalette, UINT uPaletteSize);
void wdDestroyImage(WD_HIMAGE hImage);

void wdGetImageSize(WD_HIMAGE hImage, UINT* puWidth, UINT* puHeight);

/*********************************
 ***  Cached Image Management  ***
 *********************************/

/* All these functions are usable only if the library has been initialized with
 * the flag WD_INIT_IMAGEAPI.
 *
 * Cached image is an image which is converted to the right pixel format for
 * faster rendering on the given canvas. It can only be used for the canvas
 * it has been created for.
 *
 * In other words, you may see WD_HCACHEDIMAGE as a counterpart to device
 * dependent bitmap, and WD_HIMAGE as a counterpart to device-independent
 * bitmap.
 *
 * In short WD_HIMAGE is more flexible and easier to use, while WD_HCACHEDIMAGE
 * requires more care from the developer but provides better performance,
 * especially when used repeatedly.
 *
 * All these functions are usable only if the library has been initialized with
 * the flag WD_INIT_IMAGEAPI.
 */

WD_HCACHEDIMAGE wdCreateCachedImage(WD_HCANVAS hCanvas, WD_HIMAGE hImage);
void wdDestroyCachedImage(WD_HCACHEDIMAGE hCachedImage);

/**************************
 ***  Brush Management  ***
 **************************/

/* Brush is an object used for drawing operations. Note the brush can only
 * be used for the canvas it has been created for. */

WD_HBRUSH wdCreateSolidBrush(WD_HCANVAS hCanvas, WD_COLOR color);
WD_HBRUSH wdCreateLinearGradientBrushEx(WD_HCANVAS hCanvas, float x0, float y0,
            float x1, float y1, const WD_COLOR* colors, const float* offsets, UINT numStops);
WD_HBRUSH wdCreateLinearGradientBrush(WD_HCANVAS hCanvas, float x0, float y0,
            WD_COLOR color0, float x1, float y1, WD_COLOR color1);
WD_HBRUSH wdCreateRadialGradientBrushEx(WD_HCANVAS hCanvas, float cx, float cy, float r,
            float fx, float fy, const WD_COLOR* colors, const float* offsets, UINT numStops);
WD_HBRUSH wdCreateRadialGradientBrush(WD_HCANVAS hCanvas, float cx, float cy, float r,
            WD_COLOR color0, WD_COLOR color1);
void wdDestroyBrush(WD_HBRUSH hBrush);

/* Can be only called for brushes created with wdCreateSolidBrush(). */
void wdSetSolidBrushColor(WD_HBRUSH hBrush, WD_COLOR color);

/*********************************
 ***  Stroke Style Management  ***
 ********************************/

/* Stroke Style is an object used for drawing operations.
   All drawing functions accept NULL as the stroke style parameter.
*/

#define WD_DASHSTYLE_SOLID 0   /* default */
#define WD_DASHSTYLE_DASH 1
#define WD_DASHSTYLE_DOT 2
#define WD_DASHSTYLE_DASHDOT 3
#define WD_DASHSTYLE_DASHDOTDOT 4

#define WD_LINECAP_FLAT 0    /* default */
#define WD_LINECAP_SQUARE 1
#define WD_LINECAP_ROUND 2
#define WD_LINECAP_TRIANGLE 3

#define WD_LINEJOIN_MITER 0   /* default */
#define WD_LINEJOIN_BEVEL 1
#define WD_LINEJOIN_ROUND 2

WD_HSTROKESTYLE wdCreateStrokeStyle(UINT dashStyle, UINT lineCap, UINT lineJoin);
WD_HSTROKESTYLE wdCreateStrokeStyleCustom(const float* dashes, UINT dashesCount, UINT lineCap, UINT lineJoin);
void wdDestroyStrokeStyle(WD_HSTROKESTYLE hStrokeStyle);

/*************************
 ***  Path Management  ***
 *************************/

/* Path is an object representing more complex and reusable shapes which can
 * be painted at once. Note the path can only be used for the canvas it has
 * been created for. */

WD_HPATH wdCreatePath(WD_HCANVAS hCanvas);
WD_HPATH wdCreatePolygonPath(WD_HCANVAS hCanvas, const WD_POINT* pPoints, UINT uCount);
WD_HPATH wdCreateRoundedRectPath(WD_HCANVAS hCanvas, const WD_RECT* prc, float r);
void wdDestroyPath(WD_HPATH hPath);

typedef struct WD_PATHSINK_tag WD_PATHSINK;
struct WD_PATHSINK_tag {
    void* pData;
    WD_POINT ptEnd;
};

BOOL wdOpenPathSink(WD_PATHSINK* pSink, WD_HPATH hPath);
void wdClosePathSink(WD_PATHSINK* pSink);

void wdBeginFigure(WD_PATHSINK* pSink, float x, float y);
void wdEndFigure(WD_PATHSINK* pSink, BOOL bCloseFigure);

void wdAddLine(WD_PATHSINK* pSink, float x, float y);
void wdAddArc(WD_PATHSINK* pSink, float cx, float cy, float fSweepAngle);
void wdAddBezier(WD_PATHSINK* pSink, float x0, float y0, float x1, float y1, float x2, float y2);

/*************************
 ***  Font Management  ***
 *************************/

/* All these functions are usable only if the library has been initialized with
 * the flag WD_INIT_DRAWSTRINGAPI.
 *
 * Also note that usage of non-TrueType fonts is not supported by GDI+
 * so attempt to create such WD_HFONT will fall back to a default GUI font.
 */

WD_HFONT wdCreateFont(const LOGFONTW* pLogFont);
WD_HFONT wdCreateFontWithGdiHandle(HFONT hGdiFont);
void wdDestroyFont(WD_HFONT hFont);

/* Structure describing metrics of the font. */
typedef struct WD_FONTMETRICS_tag WD_FONTMETRICS;
struct WD_FONTMETRICS_tag {
    float fEmHeight;        /* Typically height of letter 'M' or 'H' */
    float fAscent;          /* Height of char cell above the base line. */
    float fDescent;         /* Height of char cell below the base line. */
    float fLeading;         /* Distance of two base lines in multi-line text. */

    /* Usually: fEmHeight < fAscent + fDescent <= fLeading */
};

void wdFontMetrics(WD_HFONT hFont, WD_FONTMETRICS* pMetrics);

/*************************
 ***  Draw Operations  ***
 *************************/

void wdDrawEllipseArcStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle);
void wdDrawEllipsePieStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle);
void wdDrawEllipseStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle);
void wdDrawLineStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float x0, float y0, float x1, float y1, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle);
void wdDrawPathStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                const WD_HPATH hPath, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle);
void wdDrawRectStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float x0, float y0, float x1, float y1, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle);

WD_INLINE void wdDrawArcStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle)
{
    wdDrawEllipseArcStyled(hCanvas, hBrush, cx, cy, r, r,
                fBaseAngle, fSweepAngle, fStrokeWidth, hStrokeStyle);
}

WD_INLINE void wdDrawCircleStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle)
{
    wdDrawEllipseStyled(hCanvas, hBrush, cx, cy, r, r, fStrokeWidth, hStrokeStyle);
}

WD_INLINE void wdDrawPieStyled(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth,
                WD_HSTROKESTYLE hStrokeStyle)
{
    wdDrawEllipsePieStyled(hCanvas, hBrush, cx, cy, r, r,
                fBaseAngle, fSweepAngle, fStrokeWidth, hStrokeStyle);
}

WD_INLINE void wdDrawArc(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth)
{
    wdDrawArcStyled(hCanvas, hBrush, cx, cy, r, fBaseAngle, fSweepAngle,
                fStrokeWidth, NULL);
}

WD_INLINE void wdDrawCircle(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r, float fStrokeWidth)
{
    wdDrawCircleStyled(hCanvas, hBrush, cx, cy, r, fStrokeWidth, NULL);
}

WD_INLINE void wdDrawEllipse(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry, float fStrokeWidth)
{
    wdDrawEllipseStyled(hCanvas, hBrush, cx, cy, rx, ry, fStrokeWidth, NULL);
}

WD_INLINE void wdDrawEllipseArc(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth)
{
    wdDrawEllipseArcStyled(hCanvas, hBrush, cx, cy, rx, ry,
                fBaseAngle, fSweepAngle, fStrokeWidth, NULL);
}

WD_INLINE void wdDrawEllipsePie(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth)
{
    wdDrawEllipsePieStyled(hCanvas, hBrush, cx, cy, rx, ry,
                fBaseAngle, fSweepAngle, fStrokeWidth, NULL);
}

WD_INLINE void wdDrawLine(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float x0, float y0, float x1, float y1, float fStrokeWidth)
{
    wdDrawLineStyled(hCanvas, hBrush, x0, y0, x1, y1, fStrokeWidth, NULL);
}

WD_INLINE void wdDrawPath(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                const WD_HPATH hPath, float fStrokeWidth)
{
    wdDrawPathStyled(hCanvas, hBrush, hPath, fStrokeWidth, NULL);
}

WD_INLINE void wdDrawPie(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r,
                float fBaseAngle, float fSweepAngle, float fStrokeWidth)
{
    wdDrawPieStyled(hCanvas, hBrush, cx, cy, r, fBaseAngle, fSweepAngle,
                fStrokeWidth, NULL);
}

WD_INLINE void wdDrawRect(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float x0, float y0, float x1, float y1, float fStrokeWidth)
{
    wdDrawRectStyled(hCanvas, hBrush, x0, y0, x1, y1, fStrokeWidth, NULL);
}

/*************************
 ***  Fill Operations  ***
 *************************/

void wdFillEllipse(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry);
void wdFillEllipsePie(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float rx, float ry,
                float fBaseAngle, float fSweepAngle);
void wdFillPath(WD_HCANVAS hCanvas, WD_HBRUSH hBrush, const WD_HPATH hPath);
void wdFillRect(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float x0, float y0, float x1, float y1);

WD_INLINE void wdFillCircle(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r)
{
    wdFillEllipse(hCanvas, hBrush, cx, cy, r, r);
}

WD_INLINE void wdFillPie(WD_HCANVAS hCanvas, WD_HBRUSH hBrush,
                float cx, float cy, float r,
                float fBaseAngle, float fSweepAngle)
{
    wdFillEllipsePie(hCanvas, hBrush, cx, cy, r, r, fBaseAngle, fSweepAngle);
}

/*****************************
 ***  Bit-Blit Operations  ***
 *****************************/

/* All these functions are usable only if the library has been initialized
 * with the flag WD_INIT_IMAGEAPI.
 *
 * These functions are capable of bit-blit operation from some source image
 * to a destination canvas. If source and target rectangles gave different
 * dimensions, the functions scale the image during the operation.
 *
 * Note the destination rectangle has to be always specified. Source rectangle
 * is optional: If NULL, whole source image is taken.
 *
 */
void wdBitBltImage(WD_HCANVAS hCanvas, const WD_HIMAGE hImage,
                const WD_RECT* pDestRect, const WD_RECT* pSourceRect);
void wdBitBltCachedImage(WD_HCANVAS hCanvas, const WD_HCACHEDIMAGE hCachedImage,
                float x, float y);
void wdBitBltHICON(WD_HCANVAS hCanvas, HICON hIcon,
                const WD_RECT* pDestRect, const WD_RECT* pSourceRect);

/****************************
 ***  Simple Text Output  ***
 ****************************/

/* Functions for basic string output. Note the functions operate strictly with
 * Unicode strings.
 *
 * All these functions are usable only if the library has been initialized with
 * the flag WD_INIT_DRAWSTRINGAPI.
 */

/* Flags specifying alignment and various rendering options.
 *
 * Note GDI+ back-end does not support ellipses in case of multi-line string,
 * so the ellipsis flags should be only used together with WD_STR_NOWRAP.
 */
#define WD_STR_LEFTALIGN        0x0000
#define WD_STR_CENTERALIGN      0x0001
#define WD_STR_RIGHTALIGN       0x0002
#define WD_STR_TOPALIGN         0x0000
#define WD_STR_MIDDLEALIGN      0x0004
#define WD_STR_BOTTOMALIGN      0x0008
#define WD_STR_NOCLIP           0x0010
#define WD_STR_NOWRAP           0x0020
#define WD_STR_ENDELLIPSIS      0x0040
#define WD_STR_WORDELLIPSIS     0x0080
#define WD_STR_PATHELLIPSIS     0x0100

#define WD_STR_ALIGNMASK        (WD_STR_LEFTALIGN | WD_STR_CENTERALIGN | WD_STR_RIGHTALIGN)
#define WD_STR_VALIGNMASK       (WD_STR_TOPALIGN | WD_STR_MIDDLEALIGN | WD_STR_BOTTOMALIGN)
#define WD_STR_ELLIPSISMASK     (WD_STR_ENDELLIPSIS | WD_STR_WORDELLIPSIS | WD_STR_PATHELLIPSIS)

void wdDrawString(WD_HCANVAS hCanvas, WD_HFONT hFont, const WD_RECT* pRect,
                const WCHAR* pszText, int iTextLength, WD_HBRUSH hBrush,
                DWORD dwFlags);

/* Note hCanvas here is optional. If hCanvas == NULL, GDI+ uses screen
 * for the computation; D2D back-end ignores that parameter altogether.
 */
void wdMeasureString(WD_HCANVAS hCanvas, WD_HFONT hFont, const WD_RECT* pRect,
                const WCHAR* pszText, int iTextLength, WD_RECT* pResult,
                DWORD dwFlags);

/* Convenient wdMeasureString() wrapper. */
float wdStringWidth(WD_HCANVAS hCanvas, WD_HFONT hFont, const WCHAR* pszText);
float wdStringHeight(WD_HFONT hFont, const WCHAR* pszText);

#ifdef __cplusplus
}  /* extern "C" */
#endif

#endif  /* WDL_H */

redpajama_set_name: RedPajamaGithub


text:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="IamRainforestBundle\Entity\Square" table="square">
    <indexes>
      <index name="map_id" columns="map_id"/>
      <index name="user_id" columns="user_id"/>
    </indexes>
    <id name="id" type="integer" column="id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="userId" type="integer" column="user_id" nullable="false"/>
    <field name="coordX" type="integer" column="coord_x" nullable="false"/>
    <field name="coordY" type="integer" column="coord_y" nullable="false"/>
    <field name="boughtAt" type="datetime" column="bought_at" nullable="false"/>
    <field name="personalText" type="text" column="personal_text" nullable="false"/>
    <many-to-one field="map" target-entity="Map">
      <join-columns>
        <join-column name="map_id" referenced-column-name="id"/>
      </join-columns>
    </many-to-one>
  </entity>
</doctrine-mapping>


text:
Mars Rover Curiosity: A Complete Guide to Tagging Along Online
By Ian Paul
Curiosity's first color picture.
NASA's Curiosity rover is rolling on Mars and sending back color photos, videos and other information about the red planet, and it's easier than ever to keep up with all of the latest Mars rover news online. You can follow Curiosity's adventures on Twitter, Facebook, and Google+. If you prefer video, there's Ustream and YouTube. Traditionalists can get their news the old-fashioned way by checking in with a website, and there's even a mobile app to keep you posted while you're on vacation this summer.
Here's everything you need to know about tracking Curiosity's adventures online.
Curiosity has its own Twitter account (@MarsCuriosity) where NASA tweets photos taken by the rover as well as links to news updates and press conferences. You can also follow NASA and the Jet Propulsion Laboratory, the NASA laboratory heading up the Curiosity mission.
Check out the Curiosity Facebook page to see past updates about the Mars rover, photos and other information. You can Like the Curiosity page to get updates sent to your news feed or add it to an Interest List for less-frequent updates. You can also Like the pages for the Jet Propulsion Laboratory, all the Mars exploration Rovers, and NASA.
Curiosity doesn't have its own Google+ page, but you can add NASA's G+ page and the Jet Propulsion Laboratory's to your circles for regular updates. Google+ users should also bookmark a "Curiosity" search on the social network. That way you can check-in and get news updates from other users who find interesting links or photos. Once you save a search, you will find it under the "More" dropdown menu on your Google+ home page.
Mission Central
You should also bookmark NASA's Mars Science Laboratory Web page in your browser. This page is the central place to find the latest unedited photos from Curiosity, mission information, team blogs, and news.
Curiosity Cam
It's not as exciting as it sounds, but the Jet Propulsion Laboratory's Ustream channel is a good source for Curiosity-related videos including the Rover's landing and the latest press briefings.
NASA hasn't shared many Curiosity-related photos on its Flickr page, but keep an eye on this account for any forthcoming photo sets.
NASA regularly updates its JPLNews and NASA channels with Curiosity-related news clips. Subscribe to both to get YouTube updates delivered to your inbox.
NASA's Be A Martian app for Android, iOS, and Windows Phone lets you check out the latest Curiosity news, photos, and videos while you're on the go. Bad news for Windows Phone users, however, is that your version of the app doesn't appear to be getting the latest photos from Curiosity. You can, however, see the latest Curiosity news.
Finally, Twitter users might enjoy following the foul-mouthed faux tweeter @SarcasticRover, which follows the inner thoughts of Curiosity on Mars.
Sarcastic Rover's latest highlights include:
"I wish George Lucas was alive to see this… LOL sorry, I meant I wish his artistic integrity was alive to see this."
"HEY .@TheRealBuzz Aldrin! I hear you walked on THE MOON! LOL, THAT'S ADORABLE. JK - you're a hero. BTW, I'M ON MARS. WINNER!"
Connect with Ian Paul (@ianpaul) on Twitter andGoogle+, and with Today@PCWorld on Twitter for the latest tech news and analysis.

redpajama_set_name: RedPajamaCommonCrawl


text:
Last edited by Zuzuru
6 edition of Homeward to America found in the catalog.
Homeward to America
Ciardi, John
by Ciardi, John
Published 1940 by Henry Holt and Company in New York .
Statement John Ciardi.
LC Classifications PS3505.I27 H6 1940
Pagination x, 62 p.
The book is a scholarly and highly readable treatment of a special yet fascinating chapter in the building of America, set against the background of northern Europe. American History Review A thoroughly authoritative study, it is a contribution of high caliber indeed to the social history of America and to the understanding of Mormonism. Homeward Bound by James Fenimore Cooper. Paperback $ Paperback. $ NOOK Book. $ American character at different periods of his life, for which he is chiefly remembered. Cooper's reputation as one of America's leading authors was quickly established, and spread to Europe by a long stay there from , making him one of.
Title Homeward through America. Contributor Names Hyde, John, Created / Published. Homeward is the calmer, more convenient way to buy your next home. Our process starts with securing your new home before going through the hassle of listing your existing one. Here's how it works. 1. Get approved. Get started in less than 3 minutes so you can take .
Homeward Bound is a book you should read if the ruckus you hear behind those soaring melodies is of interest, as it should be." — Warren Zanes, New York Times bestselling author of Petty "While fans wait for Simon's own story of his life, this insightful, well-researched work from Carlin (who penned an acclaimed Springsteen bio before. A sociological examination of the home life of the 's as a reflection of Cold War imperatives; by May (American Studies/Univ. of Minnesota), author of Great Expectations: Marriage and Divorce in Post-Victorian America (). It is a great irony that in an era of international tension that found its greatest symbol in young schoolchildren crouched, hands behind heads, in school basements.
Fiber optic (flight quality) sensors for advanced aircraft propulsion
NATOs nuclear posture
Continental red beds
Canadian flag.
Where Souls Meet
Control of demolition
The Mystery Of Phantom Hollow
The advantages which man derives from woman
Policy design and the politics of implementation
The humourist
Gift-Wrapped
The aesthetic venture
Narcotic drugs, money laundering
call to seriousness
Dioxin treatment technologies.
Homeward to America by Ciardi, John Download PDF EPUB FB2
Homeward to America on *FREE* shipping on qualifying offers. Homeward to AmericaManufacturer: Unknown. Homeward to America. Hardcover – January 1, by John Ciardi (Author) See all formats and editions.
Hide other formats and editions. Price. New from. Used from. : John Ciardi. In Look Homeward, America, Bill Kauffman introduces us to the reactionary radicals, front-porch anarchists, and traditionalist rebels who give American culture and politics its pith, vim, and life.
Blending history, memoir, digressive literariness, and polemic, Kauffman provides fresh portaiture of such American originals as Catholic Worker founder Dorothy Day, regionalist painter Grant Wood, 4/5(13). Homeward to America. New York: Henry Holt and Company, © (OCoLC) Document Type: Book: Homeward to America book Authors / Contributors: John Ciardi.
Homeward to America. New York: Henry Holt, (). Price: $ Hardcover. First edition. Non-authorial gift inscription, else near fine lacking the dustwrapper. Author's first book. Item # Add to Cart Ask a Question.
item image. John Ciardi birth name: John Anthony Ciardi born: 6/24/ died: 3/30/ View Reference Info. In Look Homeward, America, Bill Kauffman introduces us to the reactionary radicals, front-porch anarchists, and traditionalist rebels who give American culture and politics its pith, vim, and life/5.
Homeward Homeward I've read a lot of books by Melody Carlson and have enjoyed everyone of them. I was disappointed with the ending of this book and that's why I gave it only 4 stars.
The wrap up was rather abrupt and not believable. I liked everything about this book except the ending.4/5(23). Elaine Tyler May opened her book, Homeward Bound: American Families in the Cold War Era, with a description of a publicity stunt. A young couple, recently married, chooses to spend their honeymoon in a bomb s: This book opens discussion for parents and children ages 6 to 10 on responsibility toward the poor of the world.
Fly Away Home by Eve Bunting A homeless boy who lives in an airport with his father, moving from terminal to terminal and trying not to be noticed, is given hope when he sees a trapped bird find its freedom.
Whoever You Are by Mem Fox. Homeward is asking for your help in strengthening the PIT count. On Thursday, April 2 nd, 6 p.m p.m., at the Richmond Main Branch Library ( East Franklin St.) Homeward will host a PIT information and input session.
The purpose of the event is to provide the public with an opportunity to gain a deeper understanding of and offer input on PIT count planning and activities.
"Look Homeward, America" is a fine book. At once discursive, discerning, gentle, bitter, nostalgic, and hopeful, it aptly describes the moral and spiritual emptiness of a far-flung empire of the deracinated, and the joys to be found instead in family and community life firmly rooted in place and history.
When Homeward Boundfirst appeared init forever changed how we understand Cold War America. Elaine Tyler May demonstrated that the Atomic Age and the Cold War shaped American life not just in national politics, but at every level of society, from the boardroom to the bedroom/5(60).
In Look Homeward, America, Bill Kauffman introduces us to the reactionary radicals, front-porch anarchists, and traditionalist rebels who give American culture and politics its pith, vim, and life. Blending history, memoir, digressive literariness, and polemic, Kauffman provides fresh portaiture of such American originals as Catholic Worker founder Dorothy Day, regionalist painter Grant Wood 3/5(2).
Book Review Look Homeward, America In Search of Reactionary Radicals and Front-Porch Anarchists by Bill Kauffman, ISI Books, May reviewed by Bill Treichler. Bill Kauffman in his new book, Look Homeward, America: In Search of Reactionary Radicals and Front-Porch Anarchists, seeks those independent-minded Americans who have opposed privilege, arbitrary authority, and conformity to.
Bill Kauffman is the author of Look Homeward America ( avg rating, 75 ratings, 18 reviews, published ), Ain't My America ( avg rating, 68 rat 4/5(74). Lesson Summary: Waves of Jewish immigrants from Europe travelled to America throughout the 's and early 20th century. Many of our ancestors were part of this mass immigration, and this period marked the first time Western and Eastern European Jews interacted with each other.
A Summary of "Homeward Bound: American Families in the Cold War Era" Book by Elaine Tyler May Elaine Tyler May book is an attempt to draw the link between the international politics and the family dynamics in the post war and cold war eras. An apropos example, and one that sets the tone of his book, is his final sentence in the introduction to, Look Homeward, America, "Until Americans take the Chute route of rejecting the remote and pestilential institutions that mean us harm, and of choosing the free, the local, the life-giving anarchic, the Columbuses will rot into Columbines.
Homeward Bound tells the story of domestic containment - how it emerged, how it affected the lives of those who tried to conform to it, and how. ♣ Look Homeward, America ♣ Radicals for Capitalism ♣ Kayaker's Little Book of Wisdom ♣ God Is Not Great ♣ The Echoing Green ♣ The Secret Life of the Lonely Doll ♣ K Foundation Burn a Million Quid ♣ The Facts of Life and Other Dirty Jokes and The Tao of Willie ♣ Just Six Numbers and Our Cosmic Habitat ♣ Wild Goose Chronicles.
A revised edition of the classic, myth-shattering exploration of American family life during the Cold Homeward Bound first appeared init forever .Elaine Tyler May is the Regents Professor in the Departments of American Studies and History at the University of Minnesota.
She is the author books including America and the Pill, Homeward Bound, and Barren in the Promised Land, which received Honorable Mention for the William J.
Goode Book former president of the American Studies Association and the Organization of American. Perhaps the best summation of this year's crowd-fearing, escape-hungry travel season comes from an observation Roosevelt himself makes in his book Outdoor Pastimes of .
rangelyautomuseum.com - Homeward to America book © 2020


GetHuman: GetHuman-348641 - can you tell our other Wells Fargo customers when your case took place?
GetHuman-348641: Sure. It was middle of the night, on November 25th.
GetHuman-348641: "Question" was why I was trying to call.
GetHuman-348641: Had an online banking problem - NO one, not even the folks AT the bank could help - have been on hold * times for more than ** minutes each time. AWFUL customer service Never have gotten through to the ONE line that will assist with on-line banking. Still have no online access.
GetHuman-348641: I'd give them a four out of five for ease of finding your way to help.
GetHuman-348641: I'd give them a five out of five on communication.
GetHuman-348641: For that I would say two out of five.
GetHuman-348641: Call them early in the day or late. Don't forget any personal or account information you might need for Wells Fargo to know who you are.
GetHuman: Well there you have it. Some useful feedback and words from GetHuman-348641 taken from his Wells Fargo customer service problem that occurred on November 25th, 2017.


text:
Q: Experimental Parameters and Unitary in a specific Boson Sampling Experiment I tried to reproduce the data of one of the four historically first BosonSampling experiments. While they present the information in a very accessible form, unfortunatly I fail to understand some necessary details.
In particular, i can break down my misunderstanding in very simple terms:
Their experiment consists of a 5-mode chip in this configuration (Fig 1b in main text), where $t_i$ is the beam splitter transmissivities, and $\alpha_i$ and $\alpha_j$ are phases:

They show all of their experimental parameters in Table 1 of the Supplementary Information:

They show the corresponding unitary matrices in the SI info, eq (1) [theoretical], eq(2) [experimentally reconstructed]:

In particular, the red highlighted value is $U_{5,5}$, describing the transition between input mode 5 and output mode 5. This transition depends only on one beam splitter (with transmissivities t10=0.95).
My apparent misunderstanding:
$$ |5_{out} \rangle=U_{5,5} |5_{in} \rangle$$
If one photon inputs mode 5, the probability that it exits at output mode 5 is:
$$P(5_{out})=|\langle 5_{out}|5_{out} \rangle|^2=|U_{5,5}|^2$$
$P(5_{out})=0.005666$ ($P(5_{out})=0.020498$) for the theoretical Unitary (reconstructed Unitary).
In the experiment however, the reflection probability at BS10 is $R=(1-t_{10}^2)$=0.0975.
That value is at least 4 times as large as the value constructed from the Unitary.

How can I understand the values of the unitary matrices from the experimental configurations of the BS network?

redpajama_set_name: RedPajamaStackExchange


Top features: - Large refillable water tank for non-stop ironing - Remove stubborn creases with ease with steam boost - Adjsutable settings let you find the optimum way to care for your garments Non-stop ironingPower through even the largest of laundry loads without having to turn off to refill the tank. As the Tefal Pro Express GV7850 Steam Generator Iron can be topped up at any point while you're using it. You'll be able to get through the ironing quicker, with no annoying pauses and breaks, so you can get the chores done in less time than ever.Remove stubborn creasesWith a powerful 450 g/min steam boost, the GV7850 will make removing even the most stubborn creases a breeze. With up to 6.9 bars of pressure, it also removes them in minimal time and with less effort. As the steam sanitises as you iron, you'll also be killing up to 99.9% of germs and bacteria, keeping your family's clothes cleaner than ever.Adjustable settingsBecause different fabrics require different care, the GV7850 has three settings to choose from to let you get the best results every time. Whether your load has bedding, delicates or a mixture of everything, you can switch modes quickly and easily to find the optimal way to iron your garments.Cut your chores down to sizeKeep your steam iron in perfect working order with a descaling solution, or why not brighten up your chores with an ironing board cover from our range?


The Hawaiʻi Agricultural Foundation (HAF) is a non-profit charitable organization created to promote agriculture and farming. HAF's mission is to sustain Hawaiʻi's agricultural industry by addressing critical needs and services of farmers and the agricultural industry in Hawaiʻi, and by better connecting the farmers with the community and vice-versa. Your contribution will support HAF's educational and outreach programs in the community, as well as direct marketing, technical, educational and in-the-field support for farmers.
Choose to donate to the Disaster Relief Fund or make a general donation that supports our educational and community outreach programs.


text:
local ffi = require("ffi")
local C = require("ljio.cdef")
local utils = require("ljio.core.utils")

local cryto = ffi.load("crypto")
local ssl = ffi.load("ssl")

local function create_ssl(self, sslctx)
    if not self.ssl then
        self.ssl = ssl.SSL_new(sslctx)
        ssl.SSL_set_fd(self.ssl, self.fd)
        if self.connected then
            ssl.SSL_set_connect_state(self.ssl)
        else
            ssl.SSL_set_accept_state(self.ssl)
        end
    end
end

local function ssl_read(self, rbuf, size)
    local len = ssl.SSL_read(self.ssl, rbuf.rp, size)
    local err
    if len > 0 then
        rbuf.rp = rbuf.rp + len
    else
        local sslerr = ssl.SSL_get_error(self.ssl, len)
        if sslerr == C.SSL_ERROR_ZERO_RETURN or sslerr == C.SSL_ERROR_SSL then
            ssl.SSL_set_quiet_shutdown(self.ssl, 1)
            self:close()
            err = "closed"
        elseif sslerr == C.SSL_ERROR_WANT_READ then
            self:yield_r()
        elseif sslerr == C.SSL_ERROR_WANT_WRITE then
            epoll.add_event(self.ev, C.EPOLLOUT)
            self:yield_w()
            epoll.del_event(self.ev, C.EPOLLOUT)
        elseif sslerr == C.SSL_ERROR_SYSCALL then
            local errno = ffi.errno()
            if errno == C.EAGAIN then
                self:yield_r()
            elseif errno ~= C.EINTR then
                ssl.SSL_set_quiet_shutdown(self.ssl, 1)
                self:close()
                err = utils.strerror(errno)
            end
        end
    end
    return len, err
end

local function ssl_write(self, iovec, idx, iovcnt)
    local buf = ffi.new("char[4096*16]")
    local len = 0
    for i=0,iovcnt-1 do
        local iovec = iovec[idx + i]
        ffi.copy(buf + len, iovec.iov_base, iovec.iov_len)
        len = len + iovec.iov_len
    end
    local len = ssl.SSL_write(self.ssl, buf, len)
    if len <= 0 then
        local sslerr = ssl.SSL_get_error(self.ssl, len)
        if sslerr == C.SSL_ERROR_WANT_READ then
            self:yield_r()
        elseif sslerr == C.SSL_ERROR_WANT_WRITE then
            epoll.add_event(self.ev, C.EPOLLOUT)
            self:yield_w()
            epoll.del_event(self.ev, C.EPOLLOUT)
        elseif sslerr == C.SSL_ERROR_SYSCALL then
            local errno = ffi.errno()
            if errno == C.EAGAIN then
                self:yield_w()
            elseif errno ~= C.EINTR then
                ssl.SSL_set_quiet_shutdown(self.ssl, 1)
                self:close()
                err = utils.strerror(errno)
            end
        end
    end
    return len
end

local function ssl_shutdown(self)
    if coroutine.running() == nil then
        ssl.SSL_set_quiet_shutdown(self.ssl, 1)
    end
    while true do
        local ret = ssl.SSL_shutdown(self.ssl)
        local sslerr = 0
        if ret ~= 1 and ssl.ERR_peek_error() ~= 0 then
            sslerr = ssl.SSL_get_error(self.ssl, len)
        end
        if ret == 1 or sslerr == 0 or sslerr == C.SSL_ERROR_ZERO_RETURN then
            ssl.SSL_free(self.ssl)
            self.ssl = nil
            break
        end
        if sslerr == C.SSL_ERROR_WANT_READ then
            self:yield_r()
        elseif sslerr == C.SSL_ERROR_WANT_WRITE then
            epoll.add_event(self.ev, C.EPOLLOUT)
            self:yield_w()
            epoll.del_event(self.ev, C.EPOLLOUT)
        else
            ssl.SSL_free(self.ssl)
            self.ssl = nil
            break
        end
    end
end

local init_libssl = false
local sslctx_list = {}

local function init(cfg)
    for _, sslctx in ipairs(sslctx_list) do
        ssl.SSL_CTX_free(sslctx)
    end

    sslctx_list = {}

    for _, srv in ipairs(cfg) do
        if srv.ssl_certificate then
            if srv.ssl_certificate_key == nil then
                error("ssl_certificate_key not specified")
            end
            if init_libssl == false then
                init_libssl = true
                cryto.OPENSSL_config(nil)
                ssl.SSL_library_init()
                ssl.SSL_load_error_strings()
                cryto.OPENSSL_add_all_algorithms_noconf()
            end
            local sslctx = ssl.SSL_CTX_new(ssl.SSLv23_method())
            ssl.SSL_set_read_ahead(sslctx, 1)
            ssl.SSL_CTX_ctrl(sslctx, C.SSL_CTRL_OPTIONS, C.SSL_OP_NO_COMPRESSION, nil)
            ssl.SSL_CTX_ctrl(sslctx, C.SSL_CTRL_MODE, C.SSL_MODE_RELEASE_BUFFERS, nil)
            ssl.SSL_CTX_set_cipher_list(sslctx, srv.ssl_ciphers or "HIGH:!aNULL:!MD5")
            ssl.SSL_CTX_use_certificate_file(sslctx, srv.ssl_certificate, C.SSL_FILETYPE_PEM)
            ssl.SSL_CTX_use_PrivateKey_file(sslctx, srv.ssl_certificate_key, C.SSL_FILETYPE_PEM)
            srv.sslctx = sslctx
            table.insert(sslctx_list, sslctx)
        end
    end
end

return {
    init = init,
    create_ssl = create_ssl,
    read = ssl_read,
    write = ssl_write,
    shutdown = ssl_shutdown,
}


text:
Het Theater in der Josefstadt of Josefstädter Theater is een theater in het achtste district van Wenen.

Het theater werd opgericht in 1788 en is het oudste theater in Wenen dat nog steeds in gebruik is.
Het wordt beheerd door een particuliere entiteit met overheidssubsidies.

Externe link
 offizielle Webpräsenz

Theaterzaal in Wenen

redpajama_set_name: RedPajamaWikipedia


text:
Kalyaneshwar Mahadev Mandir (Maithili: कल्याणेश्वर महादेव मंदिर) was established by King Janaka in Mithila. The temple is also the part of Mithila Madhya Parikrama circuit. The temple is situated at Kalna village of Harlakhi block in Madhubani district. It is said that King Janaka established Shivlings in all the four directions from Janakpur. The Shivling of this temple is one of them. Since the temple is very ancient and historical, so it is very famous in the region.

Description
The temple is located near Indo-Nepal Border area in Harlakhi block of Madhubani district. The pilgrims of the historical and the cultural journey Mithila Madhya Parikrama take second night rest at this place. Since the temple is related to Ramayana therefore, the Government of Bihar declared the site as tourist centre. According to the text Ramcharitmanas of Tulsi Das, the King Janaka did penance here devoted to his ishta devta Lord Shiva. Lord Shiva was pleased with the penance of the King Janaka and appeared in the form of Kalyaneshwar. Then King Janaka established a Shivling  here in the devotion to Lord Shiva and  God Viswakarma buit the temple around the Shivling. The temple is also considered as one of the gates of the ancient capital of Mithila.

Kalna Paramhansa
The temple is also very famous for Kalna Baba Ashram. Kalna Baba is also known as Kalna Paramhansa. He was a spiritual leader and philosopher, who stayed at Kalyaneshwar Mahadev Mandir and taught the people coming there about spiritual knowledge. He is also considered as the avtar of Lord Shiva in the Kalyaneshwar Mahadev Mandir. He was very famous for his kindness and spiritual energy. It is said that he cured many people who come to him in the hope of solutions of their problems.

References

Shiva temples
Mithila
Shaivism
Ramayana