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

    File:    MsgTrans.LoadFile.c
    Author:  Copyright  1994 Tony Houghton
    Version: 1.00 (27 Sep 1994)
    Purpose: Load a Messages file
*/

#include <stdlib.h>

#include "Desk.LinkList.h"
#include "Desk.MsgTrans.h"
#include "Desk.DeskMem.h"

#include "MTDefs.h"

Desk_linklist_header Desk_msgtrans__list = {NULL, NULL};


Desk_os_error *Desk_MsgTrans_LoadFile(Desk_msgtrans_filedesc **filedesc, char *filename)
{
  int flags;
  int size;
  Desk_os_error *swierr;
  Desk_msgtrans_file *block;

  block = Desk_DeskMem_XMalloc(sizeof(Desk_msgtrans_file));
  if (!block)
  {
    Desk_os_error error;
    
    Desk_MsgTrans_Lookup(0, "NoStore", error.errmess, 252);
    return &error;
  }

  swierr = Desk_MessageTrans_FileInfo(filename, &flags, &size);
  if (swierr)
    return (swierr);
  block->data = Desk_DeskMem_XMalloc(size);
  if (!block->data)
  {
    Desk_os_error error;
    
    Desk_MsgTrans_Lookup(0, "NoStore", error.errmess, 252);
    Desk_DeskMem_Free(block);
    return &error;
  }

  swierr = Desk_MessageTrans_OpenFile(&block->filedesc, filename, block->data);
  if (swierr)
  {
    Desk_os_error error;
    
    Desk_MsgTrans_Lookup(0, "NoStore", error.errmess, 252);
    Desk_DeskMem_Free(block->data);
    Desk_DeskMem_Free(block);
  }

  Desk_LinkList_AddToTail(&Desk_msgtrans__list, &block->list);

  *filedesc = &block->filedesc;

  return (swierr);
}
