Load override.cfg from config dir to add or override menu controls

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3159 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2009-06-30 00:07:20 +00:00
parent d4f68f3909
commit 8e10817997
6 changed files with 31 additions and 7 deletions
+1
View File
@@ -1,4 +1,5 @@
Changes towards version 0.7:
- Load override.cfg from user's dir to add or override menu controls - Alex
- Allow addons to override any content by placing zips into their
'shadow-content' dir - Alex
- Content reorg: font chars now use hexadecimal numbering - Alex
+2 -2
View File
@@ -11,8 +11,8 @@ to be called the next iteration of the main game loop (which will occur
when the current activity (IP, HyperSpace, Communication, Battle) changes.
By setting this, a function can be called from the main loop, thereby
eliminating threading issues that may otherwise arrise.
The debug key can be specified in keys.cfg by adding a line with a text
similar to "Debug: key F11".
The debug key can be specified in user's override.cfg by adding a line
with a text similar to "debug.1 = STRING:key F12".
An interactive way to access various debugging code, similar to
the uio debug mode (see below) is in the works.
+1
View File
@@ -150,6 +150,7 @@ initKeyConfig (void)
/* First, load in the menu keys */
LoadResourceIndex (contentDir, "menu.key", "menu.");
LoadResourceIndex (configDir, "override.cfg", "menu.");
for (i = 0; i < NUM_MENU_KEYS; i++)
{
if (!menu_res_names[i])
+19 -4
View File
@@ -121,10 +121,10 @@ res_GetResource (RESOURCE res)
return NULL;
}
if (desc->resdata.ptr != NULL)
return desc->resdata.ptr;
if (desc->resdata.ptr == NULL)
loadResourceDesc (desc);
if (desc->resdata.ptr != NULL)
++desc->refcount;
return desc->resdata.ptr;
// May still be NULL, if the load failed.
@@ -176,6 +176,13 @@ res_FreeResource (RESOURCE res)
return;
}
if (desc->refcount > 0)
--desc->refcount;
else
log_add (log_Debug, "Warning: freeing an unreferenced resource.");
if (desc->refcount > 0)
return; // Still references left
freeFun = desc->vtable->freeFun;
if (freeFun == NULL)
{
@@ -216,7 +223,7 @@ res_DetachResource (RESOURCE res)
freeFun = desc->vtable->freeFun;
if (freeFun == NULL)
{
log_add (log_Debug, "Warning: trying to detatch from a non-heap resource.");
log_add (log_Debug, "Warning: trying to detach from a non-heap resource.");
return NULL;
}
@@ -227,8 +234,16 @@ res_DetachResource (RESOURCE res)
return NULL;
}
if (desc->refcount > 1)
{
log_add (log_Debug, "Warning: trying to detach a resource referenced "
"%u times", desc->refcount);
return NULL;
}
result = desc->resdata.ptr;
desc->resdata.ptr = NULL;
desc->refcount = 0;
return result;
}
+2
View File
@@ -37,6 +37,8 @@ typedef struct resource_desc
char *fname;
ResourceHandlers *vtable;
RESOURCE_DATA resdata;
// refcount is rudimentary as nothing really frees the descriptors
unsigned refcount;
} ResourceDesc;
struct resource_index_desc
+5
View File
@@ -106,6 +106,7 @@ newResourceDesc (const char *res_id, const char *resval)
strncpy (result->fname, path, pathlen);
result->fname[pathlen] = '\0';
result->vtable = vtable;
result->refcount = 0;
if (vtable->freeFun == NULL)
{
@@ -324,6 +325,9 @@ res_GetString (const char *key)
ResourceDesc *desc = lookupResourceDesc (idx, key);
if (!desc || !desc->resdata.ptr || strcmp(desc->vtable->resType, "STRING"))
return NULL;
/* TODO: Work out exact STRING semantics, specifically, the lifetime of
* the returned value. If caller is allowed to reference the returned
* value forever, STRING has to be ref-counted. */
return (const char *)desc->resdata.ptr;
}
@@ -424,6 +428,7 @@ res_Remove (const char *key)
{
if (oldDesc->resdata.ptr != NULL)
{
if (oldDesc->refcount > 0)
log_add (log_Warning, "WARNING: Replacing '%s' while it is live", key);
if (oldDesc->vtable && oldDesc->vtable->freeFun)
{