scs-sdk/include/scssdk.h

203 lines
6.5 KiB
C
Raw Normal View History

2023-04-29 05:19:39 +08:00
/**
* @file scssdk.h
*
* @brief Common SDK types and structures.
*/
#ifndef SCSSDK_H
#define SCSSDK_H
#define SCSSDK_HEADER extern "C" {
#define SCSSDK_FOOTER }
SCSSDK_HEADER
// Types used trough the SDK.
#if defined(_MSC_VER)
typedef unsigned __int8 scs_u8_t;
typedef unsigned __int16 scs_u16_t;
typedef signed __int32 scs_s32_t;
typedef unsigned __int32 scs_u32_t;
typedef unsigned __int64 scs_u64_t;
typedef signed __int64 scs_s64_t;
typedef float scs_float_t;
typedef double scs_double_t;
typedef const char * scs_string_t;
#define SCSAPIFUNC __stdcall
#if defined(_WIN64)
#define SCS_ARCHITECTURE_x64
#else
#define SCS_ARCHITECTURE_x86
#endif
#define SCS_PF_U64 "I64u"
#define SCS_PF_S64 "I64d"
#elif defined(__GNUG__)
#include <stdint.h>
typedef uint8_t scs_u8_t;
typedef uint16_t scs_u16_t;
typedef int32_t scs_s32_t;
typedef uint32_t scs_u32_t;
typedef uint64_t scs_u64_t;
typedef int64_t scs_s64_t;
typedef float scs_float_t;
typedef double scs_double_t;
typedef const char * scs_string_t;
#define SCSAPIFUNC
#if defined(__x86_64__)
#define SCS_ARCHITECTURE_x64
#define SCS_PF_U64 "lu"
#define SCS_PF_S64 "ld"
#elif defined(__i386__)
#define SCS_ARCHITECTURE_x86
#define SCS_PF_U64 "llu"
#define SCS_PF_S64 "lld"
#else
#error "Unknown architecture."
#endif
#else
#error "Unknown compiler."
#endif
const scs_u32_t SCS_U32_NIL = static_cast<scs_u32_t>(-1);
/**
* @brief Type of value provided during callback registration and passed back
* to the callback.
*/
typedef void *scs_context_t;
/**
* @brief Timestamp value.
*
* Value is expressed in microseconds.
*/
typedef scs_u64_t scs_timestamp_t;
// Common return codes.
typedef scs_s32_t scs_result_t;
const scs_result_t SCS_RESULT_ok = 0; // Operation succeeded.
const scs_result_t SCS_RESULT_unsupported = -1; // Operation or specified parameters are not supported. (e.g. the plugin does not support the requested version of the API)
const scs_result_t SCS_RESULT_invalid_parameter = -2; // Specified parameter is not valid (e.g. null value of callback, invalid combination of flags).
const scs_result_t SCS_RESULT_already_registered = -3; // There is already a registered conflicting object (e.g. callback for the specified event/channel, input device with the same name).
const scs_result_t SCS_RESULT_not_found = -4; // Specified item (e.g. channel) was not found.
const scs_result_t SCS_RESULT_unsupported_type = -5; // Specified value type is not supported (e.g. channel does not provide that value type).
const scs_result_t SCS_RESULT_not_now = -6; // Action (event/callback registration) is not allowed in the current state. Indicates incorrect use of the api.
const scs_result_t SCS_RESULT_generic_error = -7; // Error not covered by other existing code.
// Function definition macros.
#define SCSAPI_RESULT scs_result_t SCSAPIFUNC
#define SCSAPI_VOID void SCSAPIFUNC
#define SCSAPI_RESULT_FPTR(function_name) scs_result_t (SCSAPIFUNC *function_name)
#define SCSAPI_VOID_FPTR(function_name) void (SCSAPIFUNC *function_name)
// Compile time checks.
#define SCS_CONCAT2(prefix, suffix) prefix##suffix
#define SCS_CONCAT(prefix, suffix) SCS_CONCAT2(prefix, suffix)
#define scs_static_check(expr) typedef int SCS_CONCAT(some_requirement_failed_at_, __LINE__)[(expr) ? 1 : -1]
#if defined(SCS_ARCHITECTURE_x86)
#define scs_check_size(structure, expected_32, expected_64) scs_static_check(sizeof(structure) == expected_32)
#elif defined(SCS_ARCHITECTURE_x64)
#define scs_check_size(structure, expected_32, expected_64) scs_static_check(sizeof(structure) == expected_64)
#endif
// Types of messages printed to log.
typedef scs_s32_t scs_log_type_t;
const scs_log_type_t SCS_LOG_TYPE_message = 0;
const scs_log_type_t SCS_LOG_TYPE_warning = 1;
const scs_log_type_t SCS_LOG_TYPE_error = 2;
// Version support.
#define SCS_MAKE_VERSION(major, minor) (((major) << 16) | (minor))
#define SCS_GET_MAJOR_VERSION(version) (((version) >> 16) & 0xffff)
#define SCS_GET_MINOR_VERSION(version) ((version) & 0xffff)
/**
* @brief Logs specified message to the game log.
*
* @param type Type of message. Controls generated prefixes and colors in console.
* @param message Message to log.
*/
typedef SCSAPI_VOID_FPTR(scs_log_t)(const scs_log_type_t type, const scs_string_t message);
// Common initialization structures.
/**
* @brief Initialization parameters common to most APIs provided
* by the SDK.
*/
struct scs_sdk_init_params_v100_t
{
/**
* @brief Name of the game for display purposes.
*
* This is UTF8 encoded string containing name of the game
* for display to the user. The exact format is not defined,
* might be changed between versions and should be not parsed.
*
* This pointer will be never NULL.
*/
scs_string_t game_name;
/**
* @brief Identification of the game.
*
* If the library wants to identify the game to do any
* per-game configuration, this is the field which should
* be used.
*
* This string contains only following characters:
* @li lower-cased letters
* @li digits
* @li underscore
*
* This pointer will be never NULL.
*/
scs_string_t game_id;
/**
* @brief Version of the game for purpose of the specific api
* which is being initialized.
*
* Does NOT match the patch level of the game.
*/
scs_u32_t game_version;
#ifdef SCS_ARCHITECTURE_x64
/**
* @brief Explicit alignment for the 64 bit pointer.
*/
scs_u32_t _padding;
#endif
/**
* @brief Function used to write messages to the game log.
*
* Each message is printed on a separate line.
*
* This pointer will be never NULL.
*/
scs_log_t log;
};
scs_check_size(scs_sdk_init_params_v100_t, 16, 32);
SCSSDK_FOOTER
#endif // SCSSDK_H
/* eof */