executor/src/version.c

114 lines
2.8 KiB
C

/* Copyright 1996 by Abacus Research and
* Development, Inc. All rights reserved.
*/
#if !defined (OMIT_RCSID_STRINGS)
char ROMlib_rcsid_version[] =
"$Id: version.c 63 2004-12-24 18:19:43Z ctm $";
#endif
#include "rsys/common.h"
#include "rsys/version.h"
#include "rsys/gestalt.h"
#include "rsys/prefs.h"
#include "ResourceMgr.h"
#include "MemoryMgr.h"
/* A simple version number like "1.99q" */
const char ROMlib_executor_version[] = EXECUTOR_VERSION;
/* A descriptive string like "Executor 1.99q DEMO" */
char *ROMlib_executor_full_name = "Executor " EXECUTOR_VERSION
#if defined (RELEASE_DEMO)
" DEMO"
#elif defined (RELEASE_INTERNAL)
" DEBUG"
#endif
#if defined (EXPERIMENTAL)
" EXPERIMENTAL"
#endif
;
#if defined (CYGWIN32) || defined (MSDOS)
/*
* No snprintf, so we just ignore the length.
* This is very ugly, but the strings we're crafting won't overflow the
* 1024 byte buffer we're using. ICK.
*/
#define snprintf(str, len, fmt, args...) sprintf (str, fmt , args)
#endif
#define UPDATE_RES(typ, id, fmt, args...) \
({ \
int len; \
char str[1024]; \
INTEGER save_map; \
Handle h; \
OSType _typ; \
\
_typ = (typ); \
len = snprintf (str, sizeof str, fmt , args); \
save_map = CurMap; \
CurMap = SysMap; \
h = C_Get1Resource (_typ, (id)); \
CurMap = save_map; \
LoadResource (h); \
HUnlock (h); /* safe to do -- app not running */ \
SetHandleSize (h, len); \
memcpy (STARH (h), str, len); \
if (_typ == TICK ("STR ")) \
*(char *) STARH (h) = len-1; \
else if (_typ == TICK ("vers")) \
((char *) STARH (h))[12] = len-13; \
})
#define UPDATE_VERS(major, minor, rev, vers, fmt, args...) \
({ \
int _major; \
int _minor; \
int _rev; \
\
_major = (major); \
_minor = (minor); \
_rev = (rev); \
\
UPDATE_RES (TICK("vers"), vers, "%c%c\x80%c%c%c\x5%d.%d.%d" \
fmt , _major, ((_minor << 4)| _rev), 0, 0, 0 , \
_major, _minor, _rev , args); \
})
PUBLIC void
ROMlib_set_system_version (uint32 version)
{
static uint32 old_version = -1;
if (version != old_version)
{
int major, minor, rev;
enum { MINOR_MASK = 0xF, REV_MASK = 0xF };
system_version = version;
SysVersion = CW (version);
major = version >> 8;
minor = (version >> 4) & MINOR_MASK;
rev = (version ) & REV_MASK;
gestalt_set_system_version (version);
UPDATE_RES (TICK("STR "), 0, "XMacintosh System Software, "
"version %d.%d\r\r\r\xa9 ARDI 1986-2000\r"
"All rights reserved.", major, minor);
UPDATE_VERS (major, minor, rev, 1, "X%d.%d.%d \xa9 ARDI 1986-00",
major, minor, rev);
UPDATE_VERS (major, minor, rev, 2, "XSystem %d.%d Version %d.%d.%d",
major, minor, major, minor, rev);
old_version = version;
}
}