aus dem 7. Teil in die RISC OS C-Programmierung: Symbole: Auswahlschalter.
Alle Listings können heruntergeladen werden.
#include "oslib/wimp.h"
#include "oslib/wimpspriteop.h"
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// melde Aufgabe beim Betriebssystem an
wimp_version_no version_out;
wimp_t task_handle;
task_handle=wimp_initialise(310, "Hallo Welt!", NULL, &version_out);
wimp_window *window;
window = malloc(sizeof(wimp_window) + 1*sizeof(wimp_icon));
window->visible.x0 = 0;
window->visible.y0 = 200;
window->visible.x1 = 400;
window->visible.y1 = 500;
window->xscroll = 0;
window->yscroll = 0;
window->next = wimp_TOP;
window->flags = 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_SIZE_ICON |
wimp_WINDOW_HSCROLL | wimp_WINDOW_NEW_FORMAT;
window->title_fg = wimp_COLOUR_BLACK;
window->title_bg = wimp_COLOUR_LIGHT_GREY;
window->work_fg = wimp_COLOUR_BLACK;
window->work_bg = wimp_COLOUR_VERY_LIGHT_GREY;
window->scroll_outer = wimp_COLOUR_MID_LIGHT_GREY;
window->scroll_inner = wimp_COLOUR_VERY_LIGHT_GREY;
window->highlight_bg = wimp_COLOUR_CREAM;
window->extent.x0 = 0;
window->extent.y0 = -600;
window->extent.x1 = 1000;
window->extent.y1 = 0;
window->extra_flags = 0;
window->title_flags = wimp_ICON_TEXT | wimp_ICON_HCENTRED |
wimp_ICON_VCENTRED;
window->work_flags = wimp_BUTTON_CLICK << wimp_ICON_BUTTON_TYPE_SHIFT;
window->sprite_area = wimpspriteop_AREA;
strncpy (window->title_data.text, "Hallo Welt!", 12);
window->icon_count = 1;
window->xmin = 0;
window->ymin = 0;
window->icons[0].extent.x0 = 100;
window->icons[0].extent.y0 = -208;
window->icons[0].extent.x1 = 300;
window->icons[0].extent.y1 = -80;
window->icons[0].flags = wimp_ICON_TEXT | wimp_ICON_SPRITE |
wimp_ICON_INDIRECTED | wimp_ICON_VCENTRED |
wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT |
wimp_COLOUR_VERY_LIGHT_GREY <<
wimp_ICON_BG_COLOUR_SHIFT |
wimp_BUTTON_RADIO << wimp_ICON_BUTTON_TYPE_SHIFT;
char schrift[12] = "mit Schnee";
char valid[15] = "Soptoff,opton";
window->icons[0].data.indirected_text_and_sprite.text = schrift;
window->icons[0].data.indirected_text_and_sprite.validation = valid;
window->icons[0].data.indirected_text_and_sprite.size = 12;
wimp_block block;
block.open.w = wimp_create_window (window);
block.open.visible.x0 = window->visible.x0;
block.open.visible.y0 = window->visible.y0;
block.open.visible.x1 = window->visible.x1;
block.open.visible.y1 = window->visible.y1;
block.open.xscroll = window->xscroll;
block.open.yscroll = window->yscroll;
block.open.next = window->next;
// mache Fenster sichtbar
wimp_open_window (&(block.open));
// Variablen für's Pollen
wimp_event_no event;
wimp_poll_flags mask=1;
osbool quit_pending = FALSE;
// Hauptschleife; Ereignisverarbeitung
while (!quit_pending)
{
event = wimp_poll(mask, &block, NULL);
switch (event)
{
case wimp_OPEN_WINDOW_REQUEST:
wimp_open_window(&(block.open));
break;
case wimp_CLOSE_WINDOW_REQUEST:
wimp_close_window(block.close.w);
quit_pending = true;
break;
case wimp_USER_MESSAGE:
case wimp_USER_MESSAGE_RECORDED:
if (block.message.action == message_QUIT)
{
quit_pending = true;
break;
}
}
}
wimp_close_down(task_handle);
return 0;
}