EMILE/second/load.c

50 lines
855 B
C
Raw Normal View History

2004-05-26 21:59:06 +00:00
/*
*
* (c) 2004 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
*/
#include <stdio.h>
#include <malloc.h>
2004-07-12 21:32:44 +00:00
#include "bank.h"
#include "misc.h"
2004-05-26 21:59:06 +00:00
#include "glue.h"
#include "load.h"
char* load_image(int unit, unsigned long offset, unsigned long size)
2004-05-26 21:59:06 +00:00
{
int err;
char* image;
ParamBlockRec_t param_block;
if (size == 0)
return NULL;
2004-07-12 21:32:44 +00:00
image = malloc_contiguous(size + 4);
2004-05-26 21:59:06 +00:00
if (image == 0)
{
free(image);
return NULL;
}
2004-06-07 18:51:51 +00:00
image = (char*)(((unsigned long)image + 3) & 0xFFFFFFFC);
2004-05-26 21:59:06 +00:00
memset(&param_block, 0, sizeof(param_block));
param_block.ioBuffer = (unsigned long)image;
param_block.ioVRefNum = unit;
2004-05-26 21:59:06 +00:00
param_block.ioRefNum = -5;
param_block.ioReqCount = size;
param_block.ioPosMode = fsFromStart;
param_block.ioPosOffset = offset;
err = PBReadSync(&param_block);
if (err != noErr)
{
free(image);
return NULL;
}
return image;
}