Home

Resume

Blog

Teikitu


/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
/*  »Project«   Teikitu Gaming System (TgS) (∂)
    »File«      TgS Common - Console - Internal.h
    »Author«    Andrew Aye (EMail: mailto:andrew.aye@gmail.com, Web: http://www.andrewaye.com)
    »Version«   4.51 / »GUID« A9981407-3EC9-42AF-8B6F-8BE6DD919615                                                                                                        */
/*   -------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
/*  Copyright: © 2002-2017, Andrew Aye.  All Rights Reserved.
    This software is free for non-commercial use.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
      following conditions are met:
        Redistribution of source code must retain this copyright notice, this list of conditions and the following disclaimers.
        Redistribution in binary form must reproduce this copyright notice, this list of conditions and the following disclaimers in the documentation and other materials
          provided with the distribution.
    The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
    The intellectual property rights of the algorithms used reside with Andrew Aye.
    You may not use this software, in whole or in part, in support of any commercial product without the express written consent of the author.
    There is no warranty or other guarantee of fitness of this software for any purpose. It is provided solely "as is".                                                   */
/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
#if !defined(TGS_COMMON_CONSOLE_INTERNAL_H)
#define TGS_COMMON_CONSOLE_INTERNAL_H
#pragma once


/* == Common ============================================================================================================================================================ */

/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  File Local Constants                                                                                                                                                  */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

enum { KTgCN_MAX_COMMAND_FCN               = 512 }; /*« Maximum number of functions that can be registered with the console */
enum { KTgCN_MAX_COMMAND_VAR               = 2048 }; /*« Maximum number of variables that can be registered with the console */
enum { KTgCN_MAX_COMMAND_ALL               = KTgCN_MAX_COMMAND_FCN + KTgCN_MAX_COMMAND_VAR };
enum { KTgCN_MAX_COMMAND_HASH_SET          = KTgHASH_LG_SIZE };
enum { KTgCN_MAX_COMMAND_LEXICAL_LIST      = 29 * 29 * 29 };
enum { KTgCN_CMD_FLAG_USED                 = 1 };

TgTYPE_ENUM( ETgCN_COMMAND, TgSINT32,
    ETgCN_COMMAND__UNKNOWN,         ETgCN_COMMAND__FCN,             ETgCN_COMMAND__VAR_BOOL,        ETgCN_COMMAND__VAR_S08,         ETgCN_COMMAND__VAR_S16,
    ETgCN_COMMAND__VAR_S32,         ETgCN_COMMAND__VAR_S64,         ETgCN_COMMAND__VAR_U08,         ETgCN_COMMAND__VAR_U16,         ETgCN_COMMAND__VAR_U32,
    ETgCN_COMMAND__VAR_U64,         ETgCN_COMMAND__VAR_F32,         ETgCN_COMMAND__VAR_F32_04,      ETgCN_COMMAND__VAR_STRING,

    ETgCN_COMMAND__FCN_START = ETgCN_COMMAND__FCN,
    ETgCN_COMMAND__FCN_END = ETgCN_COMMAND__FCN + 1,
    ETgCN_COMMAND__FCN_COUNT = ETgCN_COMMAND__FCN_END - ETgCN_COMMAND__FCN_START,

    ETgCN_COMMAND__VAR_START = ETgCN_COMMAND__VAR_BOOL,
    ETgCN_COMMAND__VAR_END = ETgCN_COMMAND__VAR_STRING + 1,
    ETgCN_COMMAND__VAR_COUNT = ETgCN_COMMAND__VAR_END - ETgCN_COMMAND__VAR_START,

    ETgCN_COMMAND_COUNT = ETgCN_COMMAND__FCN_COUNT + ETgCN_COMMAND__VAR_COUNT
);


/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  File Local Types                                                                                                                                                      */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

TgTYPE_STRUCT(STg2_CN_Command_Common,)
{
    CP_TgCHAR                                   m_pzName;
    CP_TgCHAR                                   m_pzDesc;
    TgUINTXX                                    m_uiHash;
    P_STg2_CN_Command_Common                    m_psNext_Hash;
    P_STg2_CN_Command_Common                    m_psNext_Lexical;
    TgUINT32                                    m_uiType; /*« ETgCN_COMMAND */
    TgUINT32                                    m_uiFlags;
};


/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  File Local Functions and Private Data                                                                                                                                 */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

TgEXTN TgRESULT                             tgCN_Var_Init( TgVOID );
TgEXTN TgRESULT                             tgCN_Var_Boot( TgVOID );
TgEXTN TgRESULT                             tgCN_Var_Stop( TgVOID );
TgEXTN TgRESULT                             tgCN_Var_Free( TgVOID );
TgEXTN TgRESULT                             tgCN_Var_Update( C_TgFLOAT32 );

TgEXTN TgCN_VAR_ID                          tgCN_Var_Query_Id_Internal( CPC_STg2_CN_Command_Common );

                                            /* Must be under a write lock from the calling function */
TgEXTN TgRESULT                             tgCN_Insert_Command( PP_STg2_CN_Command_Common, P_STg2_CN_Command_Common );

TgEXTN TgVOID                               tgCN_Init_Unit_Test( PP_TgVOID, P_TgSIZE );
TgEXTN TgVOID                               tgCN_Start_Unit_Test( TgVOID );
TgEXTN TgVOID                               tgCN_Stop_Unit_Test( P_TgVOID );

TgINLINE P_STg2_CN_Command_Common           tgCN_Find_Command_In_Hash( CPC_TgCHAR, C_TgUINTXX );
TgINLINE TgSINT32                           tgCN_Calc_Command_Lexical_Index( CPC_TgCHAR );
TgINLINE TgBOOL                             tgCN_Is_Command_Function( CPCU_STg2_CN_Command_Common );
TgINLINE TgBOOL                             tgCN_Is_Command_Variable( CPCU_STg2_CN_Command_Common );

TgEXTN STg2_UTM_AM_RW                       g_sCN_Command_Name_Lock;
TgEXTN P_STg2_CN_Command_Common             g_apsCN_Command_Hash_Set[KTgCN_MAX_COMMAND_HASH_SET];
TgEXTN P_STg2_CN_Command_Common             g_apsCommand_Lexical_Set[KTgCN_MAX_COMMAND_LEXICAL_LIST];


/* ====================================================================================================================================================================== */
#endif