#include "../tdkpin_message_pump.h" #include static MSG16 g_queue[8]; static unsigned g_queue_count; static unsigned g_queue_index; static UINT16 g_peek_maximum; static unsigned g_translate_calls; static unsigned g_dispatch_calls; static Win16FarPtr g_closed_window; BOOL16 PeekMessage16( MSG16 *message, HWND16 window, UINT16 minimum_message, UINT16 maximum_message, UINT16 remove_message) { assert(window == 0 && minimum_message == 0 && remove_message == 1); g_peek_maximum = maximum_message; if (g_queue_index == g_queue_count) { return 0; } *message = g_queue[g_queue_index++]; return 1; } BOOL16 TranslateMessage16(const MSG16 *message) { assert(message->message == 0x0020); g_translate_calls++; return 1; } LRESULT16 DispatchMessage16(const MSG16 *message) { assert(message->message == 0x0020); g_dispatch_calls++; return 0; } void object_windows_close_if_allowed(Win16FarPtr window) { g_closed_window = window; } static void reset_queue(void) { g_queue_count = 4; g_queue_index = 0; g_queue[0].message = 0x0580; g_queue[1].message = 0x0100; g_queue[2].message = 0x0101; g_queue[3].message = 0x0020; g_translate_calls = 0; g_dispatch_calls = 0; g_closed_window = 0; } int main(void) { win16_set_indeterminate_u16(0xbeef); Win16FarPtr window = win16_make_far_pointer(0x7000, 2); reset_queue(); tdkpin_drain_messages_except_input(); assert(g_queue_index == 4 && g_peek_maximum == 0x32); assert(g_translate_calls == 1 && g_dispatch_calls == 1); reset_queue(); tdkpin_close_variant_a(window); assert(g_closed_window == window); reset_queue(); tdkpin_close_variant_b(window); assert(g_closed_window == window); ObjectWindowsMessage message = {0}; reset_queue(); message.lparam = (LPARAM16)0x001c0000u; assert(tdkpin_conditional_close_variant_a(window, &message) == 0xbeef); assert(g_closed_window == 0 && g_queue_index == 0); message.lparam = (LPARAM16)0x001d0000u; assert(tdkpin_conditional_close_variant_a(window, &message) == 0xbeef); assert(g_closed_window == window); reset_queue(); message.lparam = (LPARAM16)0x003b0000u; assert(tdkpin_conditional_close_variant_b(window, &message) == 0xbeef); assert(g_closed_window == 0 && g_queue_index == 0); message.lparam = (LPARAM16)0x003a0000u; assert(tdkpin_conditional_close_variant_b(window, &message) == 0xbeef); assert(g_closed_window == window); return 0; }