MCPcopy Create free account
hub / github.com/DentonW/DevIL / ilLoadHaloPal

Function ilLoadHaloPal

DevIL/src-IL/src/il_pal.cpp:295–361  ·  view source on GitHub ↗

Loads a Halo formatted palette (.pal) file.

Source from the content-addressed store, hash-verified

293
294//! Loads a Halo formatted palette (.pal) file.
295ILboolean ilLoadHaloPal(ILconst_string FileName)
296{
297 ILHANDLE HaloFile;
298 HALOHEAD HaloHead;
299 ILushort *TempPal;
300 ILuint i, Size;
301
302 if (!iCheckExtension(FileName, IL_TEXT("pal"))) {
303 ilSetError(IL_INVALID_EXTENSION);
304 return IL_FALSE;
305 }
306
307 if (iCurImage == NULL) {
308 ilSetError(IL_ILLEGAL_OPERATION);
309 return IL_FALSE;
310 }
311
312 HaloFile = iopenr(FileName);
313 if (HaloFile == NULL) {
314 ilSetError(IL_COULD_NOT_OPEN_FILE);
315 return IL_FALSE;
316 }
317
318 if (iread(&HaloHead, sizeof(HALOHEAD), 1) != 1)
319 return IL_FALSE;
320
321 if (HaloHead.Id != 'A' + ('H' << 8) || HaloHead.Version != 0xe3) {
322 icloser(HaloFile);
323 ilSetError(IL_ILLEGAL_FILE_VALUE);
324 return IL_FALSE;
325 }
326
327 Size = (HaloHead.MaxIndex + 1) * 3;
328 TempPal = (ILushort*)ialloc(Size * sizeof(ILushort));
329 if (TempPal == NULL) {
330 icloser(HaloFile);
331 return IL_FALSE;
332 }
333
334 if (iread(TempPal, sizeof(ILushort), Size) != Size) {
335 icloser(HaloFile);
336 ifree(TempPal);
337 return IL_FALSE;
338 }
339
340 if (iCurImage->Pal.Palette && iCurImage->Pal.PalSize > 0 && iCurImage->Pal.PalType != IL_PAL_NONE) {
341 ifree(iCurImage->Pal.Palette);
342 iCurImage->Pal.Palette = NULL;
343 }
344 iCurImage->Pal.PalType = IL_PAL_RGB24;
345 iCurImage->Pal.PalSize = Size;
346 iCurImage->Pal.Palette = (ILubyte*)ialloc(iCurImage->Pal.PalSize);
347 if (iCurImage->Pal.Palette == NULL) {
348 icloser(HaloFile);
349 return IL_FALSE;
350 }
351
352 for (i = 0; i < iCurImage->Pal.PalSize; i++, TempPal++) {

Callers 1

ILAPIENTRY ilLoadPalFunction · 0.85

Calls 2

iCheckExtensionFunction · 0.85
ilSetErrorFunction · 0.85

Tested by

no test coverage detected