You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

342 lines
12 KiB

/* /////////////////////////////////////////////////////////////////////////
* File: test/scratch/test.scratch.fe/test.scratch.fe.cpp
*
* Purpose: Implementation file for the test.scratch.fe project.
*
* Created: 21st June 2005
* Updated: 6th August 2012
*
* Status: Wizard-generated
*
* License: (Licensed under the Synesis Software Open License)
*
* www: http://www.synesis.com.au/software
*
* This source code is placed into the public domain 2005
* by Synesis Software Pty Ltd. There are no restrictions
* whatsoever to your use of the software.
*
* This source code is provided by Synesis Software Pty Ltd "as is"
* and any warranties, whether expressed or implied, including, but
* not limited to, the implied warranties of merchantability and
* fitness for a particular purpose are disclaimed. In no event
* shall the Synesis Software Pty Ltd be liable for any direct,
* indirect, incidental, special, exemplary, or consequential
* damages (including, but not limited to, procurement of
* substitute goods or services; loss of use, data, or profits; or
* business interruption) however caused and on any theory of
* liability, whether in contract, strict liability, or tort
* (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of
* such damage.
*
* Neither the name of Synesis Software Pty Ltd nor the names of
* any subdivisions, employees or agents of Synesis Software Pty
* Ltd, nor the names of any other contributors to this software
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* ////////////////////////////////////////////////////////////////////// */
#define PANTHEIOS_NO_INCLUDE_OS_AND_3PTYLIB_STRING_ACCESS
/* This inclusion required for suppressing warnings during NoX (No eXception-support) configurations. */
#include <pantheios/util/test/compiler_warnings_suppression.first_include.h>
/* Pantheios Header Files */
#include <pantheios/pantheios.hpp>
#include <pantheios/inserters/integer.hpp>
#include <pantheios/inserters/pointer.hpp>
#include <pantheios/inserters/real.hpp>
#include <pantheios/backend.h>
#include <pantheios/frontend.h>
#include <pantheios/quality/contract.h>
/* STLSoft Header Files */
#include <stlsoft/stlsoft.h>
/* Standard C++ Header Files */
#include <exception>
#include <iostream>
#include <string>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
/* Standard C Header Files */
#include <stdio.h>
#include <pantheios/util/test/compiler_warnings_suppression.last_include.h>
/* /////////////////////////////////////////////////////////////////////////
* Forward declarations
*/
#if ( defined(_WIN32) || \
defined(_WIN64)) && \
!defined(_INC_WINDOWS)
extern "C" void __stdcall Sleep(unsigned long);
#endif /* WIN32 */
/* /////////////////////////////////////////////////////////////////////////
* Globals
*/
static int severities[8] = { 1, 1, 1, 1, 1, 1, 1, 1 };
/* ////////////////////////////////////////////////////////////////////// */
#ifdef PANTHEIOS_USE_WIDE_STRINGS
int main()
{
return 0;
}
#else /* ? PANTHEIOS_USE_WIDE_STRINGS */
/* ////////////////////////////////////////////////////////////////////// */
//static void call_all_severities();
static void call_all_severities()
{
pantheios::log_DEBUG("I'm so gorgeous, there's a six month waiting list for birds to suddenly appear, every time I am near!");
pantheios::log_INFORMATIONAL("Your nickname was never Ace. Maybe Ace Hole.");
pantheios::log_NOTICE("Please rush me my portable walrus polishing kit. Four super brushes that will clean even the trickiest of seabound mammals.");
pantheios::log_WARNING("Now kindly cluck off, before I extract your gibblets, and shove a large seasoned onion between the lips you never kiss with.");
pantheios::log_ERROR("So this is really me? A no-style gimbo with teeth druids could use as a place of worship?");
pantheios::log_CRITICAL("Well, the thing about a black hole - it's main distinguishing feature - is it's black. And the thing about space, your basic space colour is black. So how are you supposed to see them?");
pantheios::log_ALERT("You actually expect something to go right for me? Arnold schmucko Rimmer? Tosspot by royal appointment?");
pantheios::log_EMERGENCY("Emergency, there's an emergency going on, it's still going on, it's still an emergency");
}
static int main_(int /* argc */, char ** /*argv*/)
{
#if defined(_DEBUG)
{
using namespace pantheios;
short s = 123;
int i = 456;
long l = 789;
float f = static_cast<float>(0.123);
double d = 0.456;
long double ld = 0.789;
void *p = &l;
#if 0
char const *lstr = "{a pointer to a C-style string}";
std::string str = "{an instance of std::string}";
stlsoft::simple_string sstr = "{an instance of stlsoft::simple_string}";
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
SYSTEMTIME tm = GetCurrentTime_SYSTEMTIME();
#else /* ? PLATFORMSTL_OS_IS_???? */
struct tm const *tm = GetCurrentTime_tm();
#endif /* PLATFORMSTL_OS_IS_???? */
#endif /* 0 */
#if 0
log_INFORMATIONAL("This is a (hopefully) typical error string, containing: "
, "some integers (", integer(s), ", ", integer(i), ", ", integer(l), "); "
, "some real numbers (", real(f), ", ", real(d), ", ", real(ld), "); "
, "a pointer (", pointer(p, fmt::hex), "); "
, "some strings (", lstr, ", ", str, ", ", sstr, "); "
, "and a converted time value (", tm, ")"
);
#else /* ? 0 */
log_INFORMATIONAL(
"Integers (", integer(s, 4 | fmt::zeroPad), ", ", integer(i), ", ", integer(l), "); "
, "floating points (", real(f), ", ", real(d), ", ", real(ld), "); "
, "and a pointer (", pointer(p, fmt::hex | fmt::zeroXPrefix), ")");
#endif /* 0 */
}
# if defined(PLATFORMSTL_OS_IS_WINDOWS)
{
VARIANT var;
::VariantInit(&var);
var.vt = VT_I4;
var.lVal = 12345678;
HWND hwnd = ::GetDesktopWindow();
pantheios::log_INFORMATIONAL("v=", var, "; h=", hwnd);
}
# endif /* PLATFORMSTL_OS_IS_WIN?? */
#endif
cout << endl << "Output with all severity levels on:" << endl;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_CRITICAL:" << endl;
severities[PANTHEIOS_SEV_CRITICAL] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_DEBUG:" << endl;
severities[PANTHEIOS_SEV_DEBUG] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_WARNING:" << endl;
severities[PANTHEIOS_SEV_WARNING] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_INFORMATIONAL:" << endl;
severities[PANTHEIOS_SEV_INFORMATIONAL] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_ERROR:" << endl;
severities[PANTHEIOS_SEV_ERROR] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_EMERGENCY:" << endl;
severities[PANTHEIOS_SEV_EMERGENCY] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_ALERT:" << endl;
severities[PANTHEIOS_SEV_ALERT] = 0;
call_all_severities();
cout << endl << "Output after switching off PANTHEIOS_SEV_NOTICE:" << endl;
severities[PANTHEIOS_SEV_NOTICE] = 0;
call_all_severities();
cout << endl << "Output complete" << endl;
return 0;
}
int main(int argc, char *argv[])
{
#if 0
for(;;) {}
#endif /* 0 */
#ifdef STLSOFT_CF_EXCEPTION_SUPPORT
try
{
#endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
return main_(argc, argv);
#ifdef STLSOFT_CF_EXCEPTION_SUPPORT
}
catch(std::exception &x)
{
fprintf(stderr, "Unhandled error: %s\n", x.what());
}
catch(...)
{
pantheios::logputs(pantheios::emergency, "Unhandled unknown error");
}
return EXIT_FAILURE;
#endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
}
/* ////////////////////////////////////////////////////////////////////// */
#endif /* PANTHEIOS_USE_WIDE_STRINGS */
/* ////////////////////////////////////////////////////////////////////// */
void* const BACKEND_TOKEN_VALUE = NULL;
PANTHEIOS_CALL(int) pantheios_be_init(
PAN_CHAR_T const* processIdentity
, void* reserved
, void** ptoken
)
{
STLSOFT_SUPPRESS_UNUSED(reserved);
PANTHEIOS_CONTRACT_ENFORCE_PRECONDITION_PARAMS_API(NULL != ptoken, "token pointer may not be null");
*ptoken = BACKEND_TOKEN_VALUE;
// Normally one would likely not seek to do anything at this point, since
// it's *very* early in the process initialisation, and the raison d'etre
// of Pantheios is to be the output library! ;-)
//
// However, for pedagogical purposes in this case, we seek to print out the
// initialisation criteria.
//
// But this illustrates an important point: we can't use use IOStreams,
// because some libraries are not initialised by this point and the process
// actually crashes.
//
// So, _if_ you seek to do some output you should bear in mind the very
// early nature of this call and, at most, use the C streams. (Even better
// would be to use underlying OS calls, e.g. ::write() or
// ::OutputDebugString().
::fprintf(stdout, "Pantheios initialised (%s, %p)\n", processIdentity, reserved);
// cout << "Pantheios initialised (" << processIdentity << ", " << reserved << ")" << endl;
return 0;
}
PANTHEIOS_CALL(void) pantheios_be_uninit(void *token)
{
PANTHEIOS_CONTRACT_ENFORCE_PRECONDITION_PARAMS_API(BACKEND_TOKEN_VALUE == token, "back-end token is not expected value");
::fprintf(stdout, "Pantheios uninitialised (%p)\n", token);
// cout << "Pantheios uninitialised (" << token << ")" << endl;
}
PANTHEIOS_CALL(int) pantheios_be_logEntry(
void* feToken
, void* beToken
, int severity
, PAN_CHAR_T const* entry
, size_t /* cchEntry */
)
{
PANTHEIOS_CONTRACT_ENFORCE_PRECONDITION_PARAMS_API(BACKEND_TOKEN_VALUE == beToken, "back-end token is not expected value");
STLSOFT_SUPPRESS_UNUSED(feToken);
STLSOFT_SUPPRESS_UNUSED(beToken);
cout << "Pantheios log entry [" << severity << ": " << pantheios::pantheios_getSeverityString(static_cast<pantheios::pan_sev_t>(severity)) << "]: " << entry << endl;
return 0;
}
/* ////////////////////////////////////////////////////////////////////// */
PANTHEIOS_CALL(int) pantheios_fe_init(
void* reserved
, void** ptoken
)
{
STLSOFT_SUPPRESS_UNUSED(reserved);
STLSOFT_SUPPRESS_UNUSED(ptoken);
return 0;
}
PANTHEIOS_CALL(void) pantheios_fe_uninit(void *token)
{
STLSOFT_SUPPRESS_UNUSED(token);
}
PANTHEIOS_CALL(PAN_CHAR_T const*) pantheios_fe_getProcessIdentity(void *token)
{
STLSOFT_SUPPRESS_UNUSED(token);
return PANTHEIOS_LITERAL_STRING("panetheios::test.scratch.fe");
}
PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(void *token, int severity, int backEndId)
{
STLSOFT_SUPPRESS_UNUSED(token);
STLSOFT_SUPPRESS_UNUSED(backEndId);
return severities[severity];
}
/* ///////////////////////////// end of file //////////////////////////// */