/*
    ####             #    #     # #
    #   #            #    #       #          The FreeWare C library for
    #   #  ##   ###  #  # #     # ###             RISC OS machines
    #   # #  # #     # #  #     # #  #   ___________________________________
    #   # ####  ###  ##   #     # #  #
    #   # #        # # #  #     # #  #    Please refer to the accompanying
    ####   ### ####  #  # ##### # ###    documentation for conditions of use
    ________________________________________________________________________

    File:    Resource.LoadSprite.c
    Author:  Copyright  1994 Lenny
    Version: 0.01 (18 Nov 1994)
    Purpose: Creates a user sprite area, and loads the application's
             resource sprite file ("Sprites") into this area.
    History: 0.01 (18 Nov 94) : Added 'Desk_Resource_LoadSprites()'

*/

/* --- LOAD HEADERS ------------------------------------------------------ */

/* --- DeskLib ----------------------------------------------------------- */
#include "Desk.Error.h"             /* Error despatcher                 */
#include "Desk.File.h"              /* Low level file handling          */
#include "Desk.Resource.h"          /* Handles finding resource files   */
#include "Desk.Sprite.h"            /* Sprite handling                  */
#include "Desk.DeskMem.h"
#include "Desk.JumpRaw.h"

/* --- CLib -------------------------------------------------------------- */
#include <stdlib.h>      /*  Standard library routines                     */
#include <string.h>      /*  String manipulation routines                  */

/* === FUNCTION DEFINITIONS ============================================== */

/*  Global variable for a pointer to the resource user sprite area.
 *  Defaults to the Wimp sprite pool.
 */


Desk_sprite_area Desk_resource_sprites = (Desk_sprite_area) 1;

#ifdef _DLL
Desk_sprite_area *Desk_Resource__Ref_sprites( void) { return &Desk_resource_sprites; }
#endif



extern void Desk_Resource_LoadSprites(void)
{
  char                  filename[256];
  int                   filesize;

  if (Desk_resource_sprites != (Desk_sprite_area) 1)
    return;   /* The resources have already been loaded?! */

  strcpy(filename, Desk_resource_pathname);  strcat(filename, "Sprites");
  
  Desk_resource_sprites = NULL;
  
  Desk_JumpAuto_Try	{
  	filesize = Desk_File_Size(filename);
  	Desk_resource_sprites = Desk_DeskMem_Malloc(filesize + 16);
  	Desk_resource_sprites->areasize = filesize + 16;
  	Desk_resource_sprites->firstoffset = 16;
  	Desk_Sprite_InitArea(Desk_resource_sprites);
  	Desk_Sprite_Load(Desk_resource_sprites, filename);
  	}
  Desk_JumpAuto_Catch	{
  	Desk_DeskMem_Free( Desk_resource_sprites);
  	Desk_Error2_ReThrow();
  	}
  Desk_JumpAuto_EndCatch

}

/***************************************************************************/
