219 lines
4.7 KiB
C
219 lines
4.7 KiB
C
/*
|
|
* Copyright (c) 1993-1995 Argonaut Technologies Limited. All rights reserved.
|
|
*
|
|
* $Id: fwsetup.c 2.17 1996/10/29 16:15:51 STEVEW Exp $
|
|
* $Locker: $
|
|
*
|
|
*/
|
|
#include "fw.h"
|
|
#include "brassert.h"
|
|
#include "datafile.h"
|
|
#include "syscn_p.h"
|
|
|
|
|
|
BR_RCS_ID("$Id: fwsetup.c 2.17 1996/10/29 16:15:51 STEVEW Exp $")
|
|
|
|
/*
|
|
* Global renderer state
|
|
*/
|
|
br_framework_state BR_ASM_DATA fw;
|
|
|
|
/*
|
|
* Various bits of default data
|
|
*/
|
|
extern br_diaghandler * BR_ASM_DATA _BrDefaultDiagHandler;
|
|
extern br_filesystem * BR_ASM_DATA _BrDefaultFilesystem;
|
|
extern br_allocator * BR_ASM_DATA _BrDefaultAllocator;
|
|
extern br_file_primitives _BrFilePrimsNull;
|
|
|
|
/*
|
|
* System resource classes
|
|
*/
|
|
static br_resource_class resourceClasses[] = {
|
|
/*
|
|
* These two classes have to be initialised by hand
|
|
*/
|
|
{0, "REGISTRY", BR_MEMORY_REGISTRY, NULL },
|
|
{0, "ANCHOR", BR_MEMORY_ANCHOR, NULL },
|
|
|
|
{0, "RESOURCE_CLASS", BR_MEMORY_RESOURCE_CLASS, NULL },
|
|
{0, "SCRATCH,", BR_MEMORY_SCRATCH, NULL, 16 },
|
|
{0, "STRING", BR_MEMORY_STRING, NULL, 1 },
|
|
{0, "FILE", BR_MEMORY_FILE, _BrFileFree },
|
|
{0, "POOL", BR_MEMORY_POOL, NULL, 16 },
|
|
{0, "EXCEPTION_HANDLER",BR_MEMORY_EXCEPTION_HANDLER,NULL },
|
|
{0, "TOKEN", BR_MEMORY_TOKEN, NULL },
|
|
{0, "TOKEN_MAP", BR_MEMORY_TOKEN_MAP, NULL, 8 },
|
|
{0, "DATAFILE", BR_MEMORY_DATAFILE, NULL },
|
|
{0, "LEXER", BR_MEMORY_LEXER, NULL },
|
|
{0, "OBJECT_LIST", BR_MEMORY_OBJECT_LIST, NULL },
|
|
{0, "OBJECT_LIST_ENTRY",BR_MEMORY_OBJECT_LIST_ENTRY,NULL },
|
|
{0, "APPLICATION", BR_MEMORY_APPLICATION, NULL },
|
|
|
|
{0, "IMAGE", BR_MEMORY_IMAGE, _BrImageFree },
|
|
{0, "IMAGE_ARENA", BR_MEMORY_IMAGE_ARENA, NULL },
|
|
{0, "IMAGE_SECTIONS", BR_MEMORY_IMAGE_SECTIONS, NULL },
|
|
{0, "IMAGE_NAMES", BR_MEMORY_IMAGE_NAMES, NULL },
|
|
{0, "OBJECT", BR_MEMORY_OBJECT, _BrObjectFree, 16 },
|
|
{0, "OBJECT_DATA", BR_MEMORY_OBJECT_DATA, NULL, 16 },
|
|
{0, "DRIVER", BR_MEMORY_DRIVER, NULL },
|
|
{0, "FMT_RESULTS", BR_MEMORY_FMT_RESULTS, NULL },
|
|
{0, "TOKEN_VALUE", BR_MEMORY_TOKEN_VALUE, NULL },
|
|
{0, "TOKEN_TEMPLATE", BR_MEMORY_TOKEN_TEMPLATE, NULL },
|
|
};
|
|
|
|
/*
|
|
* Resident image that is used to expose resident framework
|
|
* functions to loaded devices.
|
|
*/
|
|
#include "fwimg.h"
|
|
|
|
br_error BR_PUBLIC_ENTRY BrFwBegin(void)
|
|
{
|
|
int i;
|
|
|
|
if(fw.active)
|
|
return BRE_ALLREADY_ACTIVE;
|
|
|
|
/*
|
|
* Set handlers to use defaults
|
|
*/
|
|
if(fw.diag == NULL)
|
|
fw.diag = _BrDefaultDiagHandler;
|
|
|
|
if(fw.fsys == NULL)
|
|
fw.fsys = _BrDefaultFilesystem;
|
|
|
|
if(fw.mem == NULL)
|
|
fw.mem = _BrDefaultAllocator;
|
|
|
|
/*
|
|
* Set up initial state of file writing
|
|
*/
|
|
fw.open_mode = BR_FS_MODE_BINARY;
|
|
|
|
/*
|
|
* Initialise all registries
|
|
*/
|
|
BrRegistryNew(&fw.reg_resource_classes);
|
|
|
|
/*
|
|
* Fake the resource classes that are required to
|
|
* support the registry
|
|
*/
|
|
fw.resource_class_index[BR_MEMORY_REGISTRY] =
|
|
resourceClasses+0;
|
|
|
|
fw.resource_class_index[BR_MEMORY_ANCHOR] =
|
|
resourceClasses+1;
|
|
|
|
/*
|
|
* Allocate the zero sized base resource instance for
|
|
* the framework
|
|
*/
|
|
fw.res = BrResAllocate(NULL, 0, BR_MEMORY_ANCHOR);
|
|
|
|
/*
|
|
* Register all the system resource classes
|
|
*/
|
|
for(i=0; i < BR_ASIZE(resourceClasses); i++)
|
|
BrResClassAdd(resourceClasses+i);
|
|
|
|
/*
|
|
* Setup list of loaded images
|
|
*/
|
|
BrNewList(&fw.images);
|
|
|
|
/*
|
|
* Initialise table of devices
|
|
*/
|
|
fw.dev_slots = BrResAllocate(fw.res, NDEV_SLOTS * sizeof(*fw.dev_slots), BR_MEMORY_DRIVER );
|
|
fw.ndev_slots = NDEV_SLOTS;
|
|
|
|
/*
|
|
* Mark as active
|
|
*/
|
|
fw.active = BR_TRUE;
|
|
|
|
/*
|
|
* Set up tokens
|
|
*/
|
|
BrTokenBegin();
|
|
|
|
/*
|
|
* Set up default system configuration
|
|
*/
|
|
|
|
BrSystemConfigBegin();
|
|
|
|
// Mark default drivers as still to be loaded.
|
|
|
|
fw.bAlreadyLoadedDrivers = BR_FALSE ;
|
|
|
|
/*
|
|
* Set up resident framework image
|
|
*/
|
|
BrImageAdd(&Image_BRCORE1);
|
|
|
|
return BRE_OK;
|
|
}
|
|
|
|
br_error BR_PUBLIC_ENTRY BrFwEnd(void)
|
|
{
|
|
if(!fw.active)
|
|
return BRE_NOT_ACTIVE;
|
|
|
|
BrImageRemove(&Image_BRCORE1);
|
|
|
|
/*
|
|
* Free all resources ...
|
|
*/
|
|
BrResFree(fw.res);
|
|
|
|
/*
|
|
* Clear out fw structure
|
|
*/
|
|
BrMemSet(&fw, 0, sizeof(fw));
|
|
|
|
return BRE_OK;
|
|
}
|
|
|
|
/*
|
|
* User functions for setting new errorhandler, filesystem, or allocator
|
|
*/
|
|
br_diaghandler * BR_PUBLIC_ENTRY BrDiagHandlerSet(br_diaghandler *newdh)
|
|
{
|
|
br_diaghandler *old = fw.diag;
|
|
|
|
if(newdh == NULL)
|
|
fw.diag = _BrDefaultDiagHandler;
|
|
else
|
|
fw.diag = newdh;
|
|
|
|
return old;
|
|
}
|
|
|
|
br_filesystem * BR_PUBLIC_ENTRY BrFilesystemSet(br_filesystem *newfs)
|
|
{
|
|
br_filesystem *old = fw.fsys;
|
|
|
|
if(newfs == NULL)
|
|
fw.fsys = _BrDefaultFilesystem;
|
|
else
|
|
fw.fsys = newfs;
|
|
|
|
return old;
|
|
}
|
|
|
|
br_allocator * BR_PUBLIC_ENTRY BrAllocatorSet(br_allocator *newal)
|
|
{
|
|
br_allocator *old = fw.mem;
|
|
|
|
if(newal == NULL)
|
|
fw.mem = _BrDefaultAllocator;
|
|
else
|
|
fw.mem = newal;
|
|
|
|
return old;
|
|
}
|
|
|