mirror of
https://github.com/ctm/executor.git
synced 2024-09-28 11:54:53 +00:00
114 lines
2.8 KiB
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;
|
|
}
|
|
}
|