Home

Resume

Blog

Teikitu


/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
/*  »Project«   Teikitu Gaming System (TgS) (∂)
    »File«      TgS Common - Console.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_H)
#define TGS_COMMON_CONSOLE_H
#pragma once


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

/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  Public Constants                                                                                                                                                      */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

#if TgCOMPILE_CONSOLE

/* There are twenty-eight (28) console channels.  The first twelve (12) are system reserved (the below enumeration).  The remaining */
/* sixteen (16) are available to the user and can be assigned arbitrarily.  The first four bits are used to indicate the severity */
/* of the output (may only be valid for certain channels). */

enum { KTgCN_SEVERITY_BITS                  = 4 }; /*« Number of bits used to describe message severity (0-15) */
enum { KTgCN_CHANEL_BITS                    = 32 - KTgCN_SEVERITY_BITS }; /*« The remaining bits are used for the channel */

enum { KTgCN_SEVERITY_0                     = 0x0 }; /*« Highest severity (last to be filtered) */
enum { KTgCN_SEVERITY_1                     = 0x1 };
enum { KTgCN_SEVERITY_2                     = 0x2 };
enum { KTgCN_SEVERITY_3                     = 0x3 };
enum { KTgCN_SEVERITY_4                     = 0x4 };
enum { KTgCN_SEVERITY_5                     = 0x5 };
enum { KTgCN_SEVERITY_6                     = 0x6 };
enum { KTgCN_SEVERITY_7                     = 0x7 };
enum { KTgCN_SEVERITY_8                     = 0x8 };
enum { KTgCN_SEVERITY_9                     = 0x9 };
enum { KTgCN_SEVERITY_A                     = 0xA };
enum { KTgCN_SEVERITY_B                     = 0xB };
enum { KTgCN_SEVERITY_C                     = 0xC };
enum { KTgCN_SEVERITY_D                     = 0xD };
enum { KTgCN_SEVERITY_E                     = 0xE };
enum { KTgCN_SEVERITY_F                     = 0xF };
enum { KTgCN_MAX_SEVERITY                   = 0xF }; /*« (1 << KTgCN_SEVERITY_BITS) - 3 */
enum { KTgCN_SEVERITY_MASK                  = 0xF }; /*« (1 << KTgCN_SEVERITY_BITS) - 1 */

enum { KTgCN_CHANEL_CONSOLE                 = 1 <<  4 };
enum { KTgCN_CHANEL_LOG_SCREEN              = 1 <<  5 };
enum { KTgCN_CHANEL_LOG                     = 1 <<  6 };
enum { KTgCN_CHANEL_LOG_FCN                 = 1 <<  7 };
enum { KTgCN_CHANEL_LOG_MEM                 = 1 <<  8 };
enum { KTgCN_CHANEL_MESSAGE                 = 1 <<  9 };
enum { KTgCN_CHANEL_WARNING                 = 1 << 10 };
enum { KTgCN_CHANEL_ERROR                   = 1 << 11 };
enum { KTgCN_CHANEL_CRITICAL                = 1 << 12 };
enum { KTgCN_CHANEL_INITIALIZE              = 1 << 13 };
enum { KTgCN_CHANEL_INITIALIZE_MEMORY       = 1 << 14 };
enum { KTgCN_CHANEL_LOADING                 = 1 << 15 };
enum { KTgCN_CHANEL_USER                    = 1 << 16 };

/*# TgCOMPILE_CONSOLE */
#endif


/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  Public Types                                                                                                                                                          */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

#if TgCOMPILE_CONSOLE

typedef TgVOID( *TgFCN_CONSOLE )(C_TgUINT32 nuiArg, CP_TgCHAR pArgV[KTgMAX_CMD_LINE_COUNT]);
TgTYPE_PREFIX( TgFCN_CONSOLE );

/*# TgCOMPILE_CONSOLE */
#endif


/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  Public Data                                                                                                                                                           */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

TgEXTN STg2_Output                          g_sOutCon;


/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  Preprocessor Definitions */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
#if TgCOMPILE_CONSOLE

#define TgLOG_MEM( A, ... ) tgCN_PrintF( KTgCN_CHANEL_LOG_MEM, TgT("%-16.16s(%-32.32s): "), A, __FUNCTION__ );  tgCN_PrintF( KTgCN_CHANEL_LOG_MEM, __VA_ARGS__ )

/*# TgCOMPILE_CONSOLE */
#else

#define TgLOG_MEM( A, ... )
#define tgCN_PrintF(...)
#define tgCN_Print(...)
#define tgCN_UID_PrintF(...)
#define tgCN_UID_Print(...)

/*# TgCOMPILE_CONSOLE */
#endif


/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */
/*  Public Functions                                                                                                                                                      */
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. */

                                            /* Standard Module functions for lifetime and update control */
TgEXTN TgRESULT                             tgCN_Init( TgVOID );
TgEXTN TgRESULT                             tgCN_Boot( TgVOID );
TgEXTN TgVOID                               tgCN_Stop( TgVOID );
TgEXTN TgVOID                               tgCN_Free( TgVOID );
TgEXTN TgRESULT                             tgCN_Update( C_TgFLOAT32 );

TgEXTN TgBOOL                               tgCN_Query_Init( TgVOID );
TgEXTN TgBOOL                               tgCN_Query_Boot( TgVOID );

TgEXTN TgSIZE                               tgCN_Query_Fixed_Memory( TgVOID );

TgEXTN TgVOID                               tgCN_Print_Commands( P_STg2_Output );

TgEXTN TgBOOL                               tgCN_Execute_Command( CPC_TgCHAR );

#if TgCOMPILE_CONSOLE

                                            /* The hierarchical standard stream functions work like a stack.  That is the last one */
                                            /* added to the stack is the first one to receive the data stream. No stream processor */
                                            /* should steal the data stream from its children. Thus, order should not matter when */
                                            /* adding stream objects.  Multiple | Stacks of processors are allowed for the common case */
                                            /* where output to both a visual (screen) and a file simultaneously is desired. */

                                            /* The output functions are attached to the specified channel(s). */
                                            /* Return value is channel mask of succeeded attaches */
                                            /* 1: Channel Mask */
TgEXTN TgUINT32                             tgCN_Attach_Output( C_TgUINT32, PC_STg2_Output );
TgEXTN TgUINT32                             tgCN_Attach_Default_Break( C_TgUINT32 );
TgEXTN TgUINT32                             tgCN_Attach_Default_Abort( C_TgUINT32 );

                                            /* Return value is channel mask of succeeded removes */
                                            /* 1: Channel Mask */
TgEXTN TgUINT32                             tgCN_Remove_Output( C_TgUINT32, PC_STg2_Output );
TgEXTN TgUINT32                             tgCN_Remove_Default_Break( C_TgUINT32 );
TgEXTN TgUINT32                             tgCN_Remove_Default_Abort( C_TgUINT32 );

                                            /* The string must remain valid for as long as the channel is being used. */
                                            /* 1: Specific Channel Index */
TgEXTN TgVOID                               tgCN_Set_Prefix( C_TgUINT32, CPC_TgCHAR );

                                            /* Limit output to a specific literal (class | system) */
                                            /* 1: Channel Mask */
TgEXTN TgVOID                               tgCN_Set_UID_Filter( C_TgUINT32, C_TgUINT32 );

                                            /* Limit output to a specific literal (class | system) */
                                            /* 1: Channel Mask */
TgEXTN TgVOID                               tgCN_Set_Severity_Filter( C_TgUINT32, C_TgUINT32 );

                                            /* Output the given printf formatted variable argument string to the given channel */

                                            /* 1: Channel: A severity-channel(s) value */
                                            /* 2: String: All remainder parameters are part of the printf style string definition */
TgEXTN TgVOID                               tgCN_Print( C_TgUINT32, CP_TgCHAR );
TgEXTN TgVOID                               tgCN_PrintF( C_TgUINT32, CP_TgCHAR, ... );

                                            /* 1: UID associated with the output, rest same as above */
TgEXTN TgVOID                               tgCN_UID_Print( C_TgUINT32, C_TgUINT32, CP_TgCHAR );
TgEXTN TgVOID                               tgCN_UID_PrintF( C_TgUINT32, C_TgUINT32, CP_TgCHAR, ... );

                                            /* This will process input for the console display */
                                            /* 1: Character to be processed */
                                            /* 2: Ctrl State: true if ctrl is being held down */
TgEXTN TgVOID                               tgCN_Process_Input( TgCHAR, TgBOOL );

                                            /* Functions used to manage the console commands supported by the module */
                                            /* Function name must be persistent */
TgEXTN TgBOOL                               tgCN_Insert_Command_Function( CPC_TgCHAR, TgFCN_CONSOLE, CPC_TgCHAR );
TgEXTN TgBOOL                               tgCN_Remove_Command_Function( CPC_TgCHAR );
TgEXTN TgVOID                               tgCN_Print_Command_Functions( P_STg2_Output );

/*# TgCOMPILE_CONSOLE */
#endif


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