+static int loadpalette(struct lbx_image *img, struct lbx_imginfo *info,
+ FILE *palf, FILE *override,
+ struct lbx_colour palette[static 256])
+{
+ int i;
+
+ /* In no-palette mode, use palette indices for colour. */
+ if (!usepalette) {
+ for (i = 0; i < 256; i++) {
+ palette[i] = (struct lbx_colour){i,i,i};
+ }
+
+ return 0;
+ }
+
+ /* For sanity. */
+ if (!palf && !info->palettesz && !override) {
+ tool_err(-1, "no palette available.");
+ return -1;
+ }
+
+ /* Default the palette to a wonderful pink. */
+ for (i = 0; i < 256; i++) {
+ palette[i] = (struct lbx_colour){0xff, 0x00, 0xff};
+ }
+
+ /* Read the external palette, if any. */
+ if (palf && lbx_img_loadpalette(palf, &lbx_default_fops, palette) != 0) {
+ tool_err(-1, "error reading external palette: %s", lbx_errmsg());
+ return -1;
+ }
+
+ /* Read the embedded palette, if any. */
+ if (info->palettesz && lbx_img_getpalette(img, palette) == -1) {
+ tool_err(-1, "error reading embedded palette: %s", lbx_errmsg());
+ return -1;
+ }
+
+ /* Read the override palette, if any. */
+ if (override && loadoverride(override, palette) == -1) {
+ return -1;
+ }