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.
140 lines
4.9 KiB
140 lines
4.9 KiB
/* /////////////////////////////////////////////////////////////////////////
|
|
* File: examples/c/example.c.101/example.c.101.c
|
|
*
|
|
* Purpose: C example program for introducing the basic essential
|
|
* features of Pantheios when using only the C API.
|
|
* Demonstrates:
|
|
*
|
|
* - how the Pantheios libraries must be explicitly
|
|
* initialised in a C program; this is not the case in
|
|
* C++ programs
|
|
* - use of pantheios_logputs()
|
|
* - use of pantheios_logprintf()
|
|
* - the statement size limitation imposed by
|
|
* pantheios_logprintf()
|
|
*
|
|
* Created: 17th January 2008
|
|
* Updated: 7th December 2010
|
|
*
|
|
* www: http://www.pantheios.org/
|
|
*
|
|
* License: This source code is placed into the public domain 2006
|
|
* by Synesis Software Pty Ltd. There are no restrictions
|
|
* whatsoever to your use of the software.
|
|
*
|
|
* This software is provided "as is", and any warranties,
|
|
* express or implied, of any kind and for any purpose, are
|
|
* disclaimed.
|
|
*
|
|
* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
|
|
/* Pantheios Header Files */
|
|
#include <pantheios/pantheios.h> /* The root header for Panthieos when using the C-API. */
|
|
#include <pantheios/frontends/stock.h> /* Declares the process identity symbol PANTHEIOS_FE_PROCESS_IDENTITY */
|
|
|
|
/* Standard C Header Files */
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Globals
|
|
*/
|
|
|
|
const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = PANTHEIOS_LITERAL_STRING("example.c.101");
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* main
|
|
*/
|
|
|
|
int main()
|
|
{
|
|
int retCode = EXIT_SUCCESS;
|
|
int res;
|
|
|
|
/* Initialise the Pantheios libraries. This will cause the Core to
|
|
* initialise, which will itself initialise the front-end and back-end
|
|
* libraries.
|
|
*
|
|
* Note: This is not required when your program contains 1 or more
|
|
* C++ compilation units that #include <pantheios/pantheios.hpp>, since
|
|
* that file contains mechanisms within it that cause the initialisation
|
|
* to be done automatically. However, it is still best practice to do so
|
|
* because that other compilation unit might be removed or replaced with
|
|
* a C compilation unit at a future time.
|
|
*/
|
|
res = pantheios_init();
|
|
|
|
if(0 != res)
|
|
{
|
|
/* If initialisation failed, we report why using
|
|
* pantheios_getInitCodeString()
|
|
*/
|
|
|
|
fprintf(stderr, "Failed to initialise the Pantheios libraries: %s\n", pantheios_getInitCodeString(res));
|
|
|
|
retCode = EXIT_FAILURE;
|
|
}
|
|
else
|
|
{
|
|
/* The libraries are now initialised, so we can output diagnostic
|
|
* logging statements.
|
|
*/
|
|
|
|
PAN_CHAR_T bigBuff[5000];
|
|
size_t n;
|
|
|
|
int i = 10;
|
|
double d = 20.20;
|
|
PAN_CHAR_T c = 'c';
|
|
|
|
|
|
/* 1. use pantheios_logputs(), which takes a severity level and a
|
|
* single string
|
|
*/
|
|
|
|
pantheios_logputs(PANTHEIOS_SEV_NOTICE, PANTHEIOS_LITERAL_STRING("pantheios_logputs() can output a single C-style string"));
|
|
|
|
|
|
|
|
/* 2. use pantheios_logprintf() to output some fundamental type
|
|
* instances
|
|
*/
|
|
|
|
pantheios_logprintf(PANTHEIOS_SEV_WARNING, PANTHEIOS_LITERAL_STRING("pantheios_logprintf() uses a format string like this one, and can output all the types compatible with the printf() family, including ints (e.g. i = %d), doubles (e.g. d = %G), and chars (e.g. c = %c)"), i, d, c);
|
|
|
|
|
|
|
|
/* 3. use pantheios_logprintf() to illustrate the size limit imposed by
|
|
* this API function
|
|
*
|
|
* Note: the C++ API log() method overloads do not impose a
|
|
* statement size limit; nor does pantheios_logputs()
|
|
*/
|
|
|
|
for(n = 0; n != (sizeof(bigBuff) / sizeof(0[bigBuff])) - 1; ++n)
|
|
{
|
|
bigBuff[n] = '-';
|
|
}
|
|
bigBuff[n] = '\0';
|
|
|
|
|
|
pantheios_logprintf(PANTHEIOS_SEV_WARNING, PANTHEIOS_LITERAL_STRING("NOTE: pantheios_logprintf() output is limited to 4095 characters. The rest of this statement is a very long string of '-' characters, enclosed in quotations. As you can see, it will not be fully emitted: \"%s\""), bigBuff);
|
|
|
|
|
|
|
|
/* Uninitialise the Pantheios libraries.
|
|
*
|
|
* Note: This is not required when your program contains 1 or more
|
|
* C++ compilation units that #include <pantheios/pantheios.hpp>,
|
|
* since that file contains mechanisms within it that cause the
|
|
* initialisation/uninitialisation to occur automatically.
|
|
*/
|
|
pantheios_uninit();
|
|
}
|
|
|
|
return retCode;
|
|
}
|
|
|
|
/* ///////////////////////////// end of file //////////////////////////// */
|