wimp.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "oslib/wimp.h"

#define task_name "WIMP"

wimp_w window_handle; /* Our window handle */
wimp_t task_handle;   /* Our task handle */

void register_task(void)
{
  int messages[] = {message_QUIT, 0}; /* Avoid complexity of message block initialisation. */

  task_handle = wimp_initialise(wimp_VERSION_RO2, task_name, (wimp_message_list *) &messages, NULL);
}

void event_poll(void)
{
  wimp_poll_flags mask;
  wimp_block      block;
  wimp_event_no   reason;
  int             done;

  done = 0;

  do
  {
    mask = 0;
    reason = wimp_poll(mask, &block, NULL);

    switch (reason)
    {
      case wimp_OPEN_WINDOW_REQUEST:
        wimp_open_window(&block.open);
        break;

      case wimp_CLOSE_WINDOW_REQUEST:
        wimp_close_window(block.close.w);
        done = 1;
        break;

      default:
        break;
    }
  }
  while (!done);
}

void open_window(void)
{
  wimp_window       new_window;
  wimp_window_state state;

  new_window.visible.x0 = 200;
  new_window.visible.y1 = 200;
  new_window.visible.x1 = 200 + 300;
  new_window.visible.y1 = 200 + 500;
  new_window.xscroll = 0;
  new_window.yscroll = 0;
  new_window.next = wimp_TOP;
  new_window.flags = wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_MOVEABLE | wimp_WINDOW_AUTO_REDRAW |
             wimp_WINDOW_BACK_ICON | wimp_WINDOW_CLOSE_ICON | wimp_WINDOW_TITLE_ICON |
             wimp_WINDOW_TOGGLE_ICON | wimp_WINDOW_VSCROLL | wimp_WINDOW_HSCROLL | wimp_WINDOW_SIZE_ICON;
  new_window.title_fg = wimp_COLOUR_BLACK;
  new_window.title_bg = wimp_COLOUR_LIGHT_GREY;
  new_window.work_fg = wimp_COLOUR_BLACK;
  new_window.work_bg = wimp_COLOUR_VERY_LIGHT_GREY;
  new_window.scroll_outer = wimp_COLOUR_MID_LIGHT_GREY;
  new_window.scroll_inner = wimp_COLOUR_VERY_LIGHT_GREY;
  new_window.highlight_bg = wimp_COLOUR_CREAM;
  new_window.extra_flags = 0;
  new_window.extent.x0 = 0;
  new_window.extent.y0 = -500 - 200;
  new_window.extent.x1 = 300 + 200;
  new_window.extent.y1 = 0;
  new_window.title_flags = wimp_ICON_TEXT | wimp_ICON_HCENTRED | wimp_ICON_VCENTRED;
  new_window.work_flags = wimp_BUTTON_CLICK << wimp_ICON_BUTTON_TYPE_SHIFT;
  new_window.sprite_area = 0;
  new_window.xmin = 0;
  new_window.ymin = 0;
  strcpy(new_window.title_data.text, "H");
  new_window.icon_count = 0;

  window_handle = wimp_create_window(&new_window);

  state.w = window_handle;
  wimp_get_window_state(&state);
  wimp_open_window((wimp_open *) &state);
}

int main()
{
  register_task();
  open_window();
  event_poll();

  wimp_close_window(window_handle);
  wimp_delete_window(window_handle); /* Unnecessary! */

  wimp_close_down(task_handle);

  return(0);
}

Generated by GNU Enscript 1.6.5.