aus dem 7. Teil in die RISC OS C-Programmierung: Symbole: Auswählbare Symbole.
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) + 3*sizeof(wimp_icon)); window->visible.x0 = 0; window->visible.y0 = 200; window->visible.x1 = 450; window->visible.y1 = 400; 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 = 3; window->xmin = 0; window->ymin = 0; window->icons[0].extent.x0 = 100; window->icons[0].extent.y0 = -150; window->icons[0].extent.x1 = 168; window->icons[0].extent.y1 = -82; window->icons[0].flags = wimp_ICON_SPRITE | wimp_ICON_INDIRECTED | wimp_ICON_HCENTRED | wimp_ICON_VCENTRED | wimp_BUTTON_RELEASE << wimp_ICON_BUTTON_TYPE_SHIFT; char symbolname0[12] = "information"; window->icons[0].data.indirected_sprite.id = (osspriteop_id) symbolname0; window->icons[0].data.indirected_sprite.area = wimpspriteop_AREA; window->icons[0].data.indirected_sprite.size = 12; window->icons[1].extent.x0 = 150; window->icons[1].extent.y0 = -150; window->icons[1].extent.x1 = 318; window->icons[1].extent.y1 = -82; window->icons[1].flags = wimp_ICON_SPRITE | wimp_ICON_INDIRECTED | wimp_ICON_HCENTRED | wimp_ICON_VCENTRED | wimp_BUTTON_DOUBLE_CLICK << wimp_ICON_BUTTON_TYPE_SHIFT; char symbolname1[12] = "warning"; window->icons[1].data.indirected_sprite.id = (osspriteop_id) symbolname1; window->icons[1].data.indirected_sprite.area = wimpspriteop_AREA; window->icons[1].data.indirected_sprite.size = 12; window->icons[2].extent.x0 = 250; window->icons[2].extent.y0 = -150; window->icons[2].extent.x1 = 418; window->icons[2].extent.y1 = -82; window->icons[2].flags = wimp_ICON_SPRITE | wimp_ICON_INDIRECTED | wimp_ICON_HCENTRED | wimp_ICON_VCENTRED | wimp_BUTTON_DOUBLE_CLICK << wimp_ICON_BUTTON_TYPE_SHIFT; char symbolname2[12] = "program"; window->icons[2].data.indirected_sprite.id = (osspriteop_id) symbolname2; window->icons[2].data.indirected_sprite.area = wimpspriteop_AREA; window->icons[2].data.indirected_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; }