Category: W32

W32 is a synchronous interface onto the window server that user code can include, link to and invoke instead of sending low level client-server requests to the window server. Some errors can be detected before they are sent to the server and are raised as panics from W32. Code in the W32 synchronous interface runs in the client’s thread, so it raises panics in situations it can understand on the current thread via User::Panic(). These panics have a category of W32.

To minimise strain on the system, W32 can cache several requests in order in a buffer and send them as a group to the server. This means that a panic might not be caused by a bug in the last client-side code to run, but by an earlier line that does not get its request serviced until later. To debug such a panic it is often useful to turn on auto flushing.

Window server synchronous interface (W32) panics are raised by the synchronous interface onto the window server when it realises a client has attempted an action the interface can’t legally pass on to the window server thread. Because the interface is synchronous, the current thread is panicked, and the request is never sent to the window server.

These panics are defined in the enumeration TW32Panic in the w32cmd.h file.

Note that some panics are raised in debug builds only.


An attempt was made to reconnect to the window server using RWsSession::Connect(). It is only possible to reconnect if the current session has been closed.


Not used.


Not used.


Not used.


Raised by CWindowGc::MapColors() when its aNumPairs argument has a value greater than 16.


Data is too long to fit into the window server's client side buffer, see Client-side buffer.

Introduced in v6.0.


CWsScreenDevice::SetCustomPalette() was called with a NULL pointer.


CWsScreenDevice::SetPalette() failed, but no error code could be returned. Debug builds for the emulator only.


A direct screen access function was called out of turn.


An attempt was made to pass an invalid region to the window server. Debug builds only.


Raised when the client is trying to use a wrong IpcSlot. The first slot if raised by RAnim::CommandReply() or RAnimDll::Construct(). Either the first or the second if raised by RAnim::AsyncCommandReply().


A function has been called with a NULL array pointer when it should not be.


Not used.


The CWsGraphic::CManager's RPointerArray<CWsGraphic> still has pointers to CWsGraphic left inside when it should be empty.


Raised when one of the CWsGraphic::CManager()'s members has an inconsistent value ( NULL when it should not be and vice-versa).


Raised if RWsGraphicMsgBuf has been passed an out of bounds index or an incorrect type message.


Raised when trying to send an empty TWsClCmdGdSendMessage.


Not used.


Raised when an invalid parameter is passed to a function.


Raised when Construct() is called on an already constructed client-side object.


Debug: Raised when trying to use an interface that is not initialised.


Debug: Raised when returned data does not match expected sizes or granularity.