#charset "us-ascii"
/*
** T3Checks helps you keep track of what capabilities a given
** interpreter has or doesn't have. For example: is the interpreter
** capable of HTML mode? Can the interpreter handle graphics?
** All results are stored in the sysInfoObj object.
**
** Version: 1.0 (6 Jan 2003)
**
** Copyright (c) 2003, Stephen Granade. All rights reserved.
**
*/
#include <tadsio.h>
#include <tadsgen.h>
// To use: in your main() function, call sysInfoObject.getSysInfo().
// The object is transient because we don't want its state saved in
// a game file, nor do we want it restored. This way, if the player
// plays our game on one machine, then moves the saved game file to
// another, the information won't be wrong.
transient sysInfoObject: object
isHTMLRuntime = nil
canDoGraphics = nil
canDoSoundFX = nil
canDoMusic = nil
versionNumber = ''
// graphicsOn() returns true if user has the "graphics" option selected
// and the runtime is capable of displaying graphics
graphicsOn() {
return (canDoGraphics && systemInfo(SysInfoPrefImages));
}
// soundsOn() is like graphicsOn(), only for sound effects
soundsOn() {
return (canDoSoundFX && systemInfo(SysInfoPrefSounds));
}
// And a similar function for music
musicOn() {
return (canDoMusic && systemInfo(SysInfoPrefMusic));
}
getSysInfo() {
isHTMLRuntime = (systemInfo(SysInfoInterpClass) == SysInfoIClassHTML);
canDoGraphics = (systemInfo(SysInfoJpeg) == 1) ||
(systemInfo(SysInfoPng) == 1);// True if we can do PNG or JPEG
canDoSoundFX = (systemInfo(SysInfoMpeg) == 1) ||
(systemInfo(SysInfoWav) == 1);
canDoMusic = (systemInfo(SysInfoMidi) == 1);
// Check our version number
versionNumber = systemInfo(SysInfoVersion);
}
// Compare two version numbers (e.g. '2.2.6'), starting with the major
// number, then minor, then final. Returns -1 if the first number is
// less than the second, 0 if they are equal, or 1 if the first is
// greater
compareVersionNumbers(one, two) {
local firstStr, secondStr, i, j, firstLoc, secondLoc;
firstStr = one;
secondStr = two;
do {
firstLoc = find(firstStr, '.');
secondLoc = find(secondStr, '.');
if (firstLoc) {
i = toInteger(substr(firstStr, 1, firstLoc - 1));
firstStr = substr(firstStr, firstLoc + 1,
length(firstStr) - firstLoc);
}
else i = toInteger(firstStr);
if (secondLoc) {
j = toInteger(substr(secondStr, 1, secondLoc - 1));
secondStr = substr(secondStr, secondLoc + 1,
length(secondStr) - secondLoc);
}
else j = toInteger(secondStr);
if (i < j) return -1;
if (i > j) return 1;
} while (firstLoc && secondLoc);
if (firstLoc) return 1; // This handles e.g. '2.5.1' vs '2.5'
if (secondLoc) return -1; // while this handles '2.5' vs '2.5.1'
return 0;
}
;
// Make an ID for this module
ModuleID
name = 'T3Checks'
byline = 'by Stephen Granade'
htmlByline = 'by <a href="mailto:
[email protected]">Stephen Granade</a>'
version = '1.0'
;