bool sprite_convert(struct content *c) { os_error *error; int w, h; union content_msg_data msg_data; const char *source_data; unsigned long source_size; const void *sprite_data; char title[100]; source_data = content__get_source_data(c, &source_size); sprite_data = source_data - 4; osspriteop_area *area = (osspriteop_area*) sprite_data; c->data.sprite.data = area; /* check for bad data */ if ((int)source_size + 4 != area->used) { msg_data.error = messages_get("BadSprite"); content_broadcast(c, CONTENT_MSG_ERROR, msg_data); return false; } error = xosspriteop_read_sprite_info(osspriteop_PTR, (osspriteop_area *)0x100, (osspriteop_id) ((char *) area + area->first), &w, &h, NULL, NULL); if (error) { LOG(("xosspriteop_read_sprite_info: 0x%x: %s", error->errnum, error->errmess)); msg_data.error = error->errmess; content_broadcast(c, CONTENT_MSG_ERROR, msg_data); return false; } c->width = w; c->height = h; snprintf(title, sizeof(title), messages_get("SpriteTitle"), c->width, c->height, source_size); content__set_title(c, title); c->status = CONTENT_STATUS_DONE; /* Done: update status bar */ content_set_status(c, ""); return true; }
unsigned int ro_gui_dialog_test_sprite(const char *name) { unsigned int result = 0; int var_val; os_coord dimensions; os_mode mode; os_error *error; error = xosspriteop_read_sprite_info(osspriteop_USER_AREA, theme_sprites, (osspriteop_id)name, &dimensions.x, &dimensions.y, 0, &mode); if (error) return 1; if (((unsigned int)mode) & osspriteop_ALPHA_MASK) result |= 4; error = xos_read_mode_variable(mode, os_MODEVAR_LOG2_BPP, &var_val, 0); if (error) { LOG(("xos_read_mode_variable: 0x%x: %s", error->errnum, error->errmess)); } else { if (var_val > 3) result |= 2; } return result; }