aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordol-sen <brian.dolbec@gmail.com>2011-10-11 23:36:10 -0700
committerdol-sen <brian.dolbec@gmail.com>2011-10-11 23:36:10 -0700
commit6e320b36f8aaba92a6a6605da737b7877dece01f (patch)
treefd936dbe04e869a43e97f3891bfb85ab8cfde2ae
parentcontinued re-structure, some renaming. (diff)
downloadlayman-6e320b36f8aaba92a6a6605da737b7877dece01f.tar.gz
layman-6e320b36f8aaba92a6a6605da737b7877dece01f.tar.bz2
layman-6e320b36f8aaba92a6a6605da737b7877dece01f.zip
continued restructure, begin fixing my last screwups.
-rw-r--r--c-layman/src/config.c23
-rw-r--r--c-layman/src/internal.h17
-rw-r--r--c-layman/src/interpreter.c325
-rw-r--r--c-layman/src/interpreter.h12
-rw-r--r--c-layman/src/layman.c81
-rw-r--r--c-layman/src/laymanapi.c37
-rw-r--r--c-layman/src/laymanapi.h1
-rw-r--r--c-layman/src/message.c345
-rw-r--r--c-layman/src/message.h17
-rw-r--r--c-layman/src/stringlist.c3
-rw-r--r--c-layman/src/stringlist.h1
11 files changed, 490 insertions, 372 deletions
diff --git a/c-layman/src/config.c b/c-layman/src/config.c
index f420235..7046dfb 100644
--- a/c-layman/src/config.c
+++ b/c-layman/src/config.c
@@ -1,4 +1,7 @@
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
#include <stdio.h>
#include "config.h"
@@ -29,7 +32,7 @@
struct BareConfigStruct
{
PyObject *object;
-}
+};
/**
* \internal
@@ -38,7 +41,7 @@ struct BareConfigStruct
PyObject *
_ConfigObject(BareConfigStruct *c)
{
- if (c && c->object)
+ if ((c != NULL) && (c->object != NULL))
return c->object;
else
Py_RETURN_NONE;
@@ -57,11 +60,16 @@ BareConfigStruct *
bareConfigCreate(MessageStruct *m, FILE *outFd, FILE *inFd, FILE *errFd)
{
if(!m)
- return NULL;
+ {
+ BareConfigStruct *n = NULL;
+ return n;
+ }
- if (!outFd || fileno(outFd) <= 0)
+ int fo = fileno(outFd);
+ int fi = fileno(inFd);
+ if (!outFd || fo <= 0)
outFd = stdout;
- if (!inFd || fileno(inFd) <= 0)
+ if (!inFd || fi <= 0)
inFd = stdin;
if (!errFd || fileno(errFd) <= 0)
errFd = stderr;
@@ -78,7 +86,8 @@ bareConfigCreate(MessageStruct *m, FILE *outFd, FILE *inFd, FILE *errFd)
if (!obj)
{
debug("The execution failed, Are you sure >=app-portage/layman-2.0* is properly installed ?\n");
- return NULL;
+ BareConfigStruct *n = NULL;
+ return n;
}
BareConfigStruct *ret = malloc(sizeof(BareConfigStruct));
@@ -191,7 +200,7 @@ ConfigSetOptionValue(BareConfigStruct *cfg, const char *opt, const char *val)
* \return a new instance of a OptionConfig object. It must be freed with ConfigFree()
*/
BareConfigStruct *
-optionConfigCreate( Dict *options, Dict *defaults)
+optionConfigCreate(Dict *options, Dict *defaults)
{
PyObject *opts = dictToPyDict(options);
diff --git a/c-layman/src/internal.h b/c-layman/src/internal.h
index cf9cf3e..4fc57d4 100644
--- a/c-layman/src/internal.h
+++ b/c-layman/src/internal.h
@@ -2,6 +2,9 @@
#define INTERNAL_H
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
#include "stringlist.h"
#include "dict.h"
@@ -13,7 +16,7 @@ PyObject *executeFunction(const char *module, const char *funcName, const char *
PyObject *_ConfigObject(BareConfigStruct*);
-PyObject *_messagePyObject(Message *m);
+PyObject *_messagePyObject(MessageStruct *m);
StringList *listToCList(PyObject *list);
PyObject *cListToPyList(StringList*);
@@ -28,14 +31,14 @@ typedef struct PyObjectListElem
{
PyObject *object;
struct PyObjectListElem *next;
-}
+} PyObjectListElem;
typedef struct PyObjectList
{
PyObjectListElem root;
int count;
-}
+} PyObjectList;
/**
@@ -45,7 +48,13 @@ typedef struct PyObjectList
typedef struct PythonInterpreter
{
PyObjectList modules;
-}
+ void (* execute) (PythonInterpreter *interpreter,
+ const char *module,
+ const char *funcName,
+ const char *format,
+ ...);
+
+} PythonInterpreter;
#endif
diff --git a/c-layman/src/interpreter.c b/c-layman/src/interpreter.c
index 129cfea..6daa8bf 100644
--- a/c-layman/src/interpreter.c
+++ b/c-layman/src/interpreter.c
@@ -1,196 +1,215 @@
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
#include <stdio.h>
#include <string.h>
#include "interpreter.h"
#include "internal.h"
-
-/** High level interactive python session structure */
-typedef struct PythonSessionStruct
-{
- private:
+static PyObjectList py_create_ObjectList();
+static void py_ObjectList_insert(PyObjectList list, PyObject *object);
+static int py_ObjectList_Count(PyObjectList list);
+static PyObject * py_moduleNamed(const char *name, PyObjectList list);
+static void py_ObjectList_free(PyObjectList list, int deref);
+static void py_Initialize(PythonInterpreter *interpreter);
+static void py_Finalize(PythonInterpreter *interpreter);
+static PyObject * py_executeFunction(PythonInterpreter *interpreter,
+ const char *module,
+ const char *funcName,
+ const char *format,
+ ...);
- PyObjectList
- createObjectList()
- {
- PyObjectList *ret = malloc(sizeof(PyObjectList));
- ret->count = 0;
- ret->root = 0;
- return ret;
- }
- void
- insert(PyObjectList list, PyObject *object)
- {
- if (!list || !object)
- return;
- PyObjectListElem node = malloc(sizeof(PyObjectListElem));
- node->object = object;
- node->next = list->root;
- list->root = node;
- list->count++;
- }
- PyObject *
- moduleNamed(const char *name, PyObjectList list)
- {
- PyObjectListElem *node = list->root;
- while (node)
- {
- if (strcmp(PyModule_GetName(node->object), name) == 0)
- return node->object;
- node = node->next;
- }
-
- return NULL;
- }
- int
- listCount(PyObjectList list)
+static PyObjectList
+py_create_ObjectList()
+{
+ PyObjectList *ret = malloc(sizeof(PyObjectList));
+ ret->count = 0;
+ ret->root = 0;
+ return ret;
+}
+
+
+static void
+py_ObjectList_insert(PyObjectList list, PyObject *object)
+{
+ if (!list || !object)
+ return;
+ PyObjectListElem node = malloc(sizeof(PyObjectListElem));
+ node->object = object;
+ node->next = list->root;
+ list->root = node;
+ list->count++;
+}
+
+static PyObject *
+py_moduleNamed(const char *name, PyObjectList list)
+{
+ PyObjectListElem *node = list->root;
+ while (node)
{
- return (list ? list->count : 0);
+ if (strcmp(PyModule_GetName(node->object), name) == 0)
+ return node->object;
+ node = node->next;
}
+
+ return NULL;
+}
- void
- freeList(PyObjectList list, int deref)
- {
- if (!list)
- return;
+static int
+py_ObjectList_Count(PyObjectList list)
+{
+ return (list ? list->count : 0);
+}
- PyObjectListElem *node = list->root;
- while (node)
+static void
+py_ObjectList_free(PyObjectList list, int deref)
+{
+ if (!list)
+ return;
+
+ PyObjectListElem *node = list->root;
+ while (node)
+ {
+ PyObjectListElem *tmp = node;
+ node = node->next;
+ if (deref)
{
- PyObjectListElem *tmp = node;
- node = node->next;
- if (deref)
- {
- Py_DECREF(tmp->object);
- }
- free(tmp);
+ Py_DECREF(tmp->object);
}
-
- free(list);
+ free(tmp);
}
- public:
+ free(list);
+}
-
- PythonInterpreter interpreter = 0;
+/** \defgroup base Layman base
+ *
+ * \brief Base functions
+ *
+ * These functions are used when you want to begin or end using the library.
+ */
- /** \defgroup base Layman base
- *
- * \brief Base functions
- *
- * These functions are used when you want to begin or end using the library.
- */
+/** \addtogroup base
+ * @{
+ */
- /** \addtogroup base
- * @{
- */
-
- /**
- * This is the first function that must be called before using the library.
- * It initializes the Python interpreter.
- */
- void
- Initialize()
- {
- if (interpreter)
- return;
+/**
+ * This is the first function that must be called before using the library.
+ * It initializes the Python interpreter.
+ */
+static void
+py_Initialize(PythonInterpreter *interpreter)
+{
+ if (interpreter)
+ return;
+
+ if (!Py_IsInitialized())
+ Py_Initialize();
+
+ interpreter = malloc(sizeof(struct session->Interpreter));
+ interpreter->modules = createObjectList();
+ interpreter->execute = py_executeFunction;
+}
+
+/**
+ * Call this function when you're done using the library.
+ * It will free memory.
+ */
+static void
+py_Finalize(PythonInterpreter *interpreter)
+{
+ if (!nterpreter)
+ return;
+ freeList(interpreter->modules, 1);
+ free(interpreter);
+ interpreter = NULL;
+
+ if (Py_IsInitialized())
+ Py_Finalize();
+}
+
+/** @} */
+
+/**
+ * \internal
+ * printf() like function that executes a python function
+ *
+ * \param module name of the python module in which the function is
+ * \param funcName the function name to call
+ * \param format printf() like list of arguments. See Python documentation
+ * \param ... arguments for the function
+ *
+ * \return the result of the execution. Can be NULL if the call failed.
+ */
+static PyObject *
+py_executeFunction(PythonInterpreter *interpreter, const char *module,
+ const char *funcName, const char *format, ...)
+{
- if (!Py_IsInitialized())
- Py_Initialize();
+ // Make argument list
+ PyObject *args;
+ if (format == NULL || strcmp(format, "") == 0)
+ args = PyTuple_New(0);
+ else
+ {
+ va_list listArgs;
+ va_start(listArgs, format);
- interpreter = malloc(sizeof(struct Interpreter));
- interpreter->modules = createObjectList();
+ args = Py_VaBuildValue(format, listArgs);
}
- /**
- * Call this function when you're done using the library.
- * It will free memory.
- */
- void
- Finalize()
+ // Look for the module.
+ PyObject *mod = 0;
+ if (session->interpreter->modules)
{
- if (!interpreter)
- return;
- freeList(interpreter->modules, 1);
- free(interpreter);
-
- if (Py_IsInitialized())
- Py_Finalize();
+ mod = moduleNamed(module, interpreter->modules);
}
-
- /** @} */
-
- /**
- * \internal
- * printf() like function that executes a python function
- *
- * \param module name of the python module in which the function is
- * \param funcName the function name to call
- * \param format printf() like list of arguments. See Python documentation
- * \param ... arguments for the function
- *
- * \return the result of the execution. Can be NULL if the call failed.
- */
- PyObject *
- executeFunction(const char *module, const char *funcName, const char *format, ...)
+ // If module is not loaded yet, do it.
+ if (!mod)
{
- assert(interpreter);
-
- // Make argument list
- PyObject *args;
- if (format == NULL || strcmp(format, "") == 0)
- args = PyTuple_New(0);
- else
- {
- va_list listArgs;
- va_start(listArgs, format);
-
- args = Py_VaBuildValue(format, listArgs);
- }
-
- // Look for the module.
- PyObject *mod = 0;
- if (interpreter->modules)
- {
- mod = moduleNamed(module, interpreter->modules);
- }
- // If module is not loaded yet, do it.
+ mod = PyImport_ImportModule(module);
if (!mod)
- {
- mod = PyImport_ImportModule(module);
- if (!mod)
- return NULL;
- insert(interpreter->modules, mod);
- }
-
- // Look for the function
- PyObject *func = PyObject_GetAttrString(mod, funcName);
- if (!PyCallable_Check(func))
return NULL;
+ insert(interpreter->modules, mod);
+ }
- // Execute it
- PyObject *val = PyObject_CallObject(func, args);
+ // Look for the function
+ PyObject *func = PyObject_GetAttrString(mod, funcName);
+ if (!PyCallable_Check(func))
+ return NULL;
- is Py_XDECREF(args);
+ // Execute it
+ PyObject *val = PyObject_CallObject(func, args);
- return val;
- }
-};
+ Py_XDECREF(args);
+
+ return val;
+}
/** Opens an interactive python session */
PythonSessionStruct
-PySession()
+PySession_create()
+{
+ PythonSessionStruct session;
+ py_Initialize(session);
+ session->Finalize = py_Finalize;
+ return session;
+}
+
+/** Closes an interactive python session */
+void
+PySession_free(PythonSessionStruct *session)
{
- PythonSessionStruct interpreter;
- interpreter.Initialize();
- return interpreter;
-} \ No newline at end of file
+ py_Finalize(session->interpreter);
+ free(session);
+}
diff --git a/c-layman/src/interpreter.h b/c-layman/src/interpreter.h
index c3cb819..c69fe78 100644
--- a/c-layman/src/interpreter.h
+++ b/c-layman/src/interpreter.h
@@ -2,7 +2,17 @@
#define INTERPRETER_H
-typedef struct PythonSessionStruct PythonSessionStruct;
+/** High level interactive python session structure */
+typedef struct PythonSessionStruct
+{
+ // variables
+ PythonInterpreter interpreter;
+
+ // Functions
+
+ static void Finalize(PythonSessionStruct *session)
+} PythonSessionStruct;
+
PythonSessionStruct PySession();
diff --git a/c-layman/src/layman.c b/c-layman/src/layman.c
index f2e3702..c14916c 100644
--- a/c-layman/src/layman.c
+++ b/c-layman/src/layman.c
@@ -1,4 +1,7 @@
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
#include "config.h"
#include "internal.h"
@@ -13,58 +16,60 @@
/** High level object structure to hold a complete layman instance */
typedef struct LaymanObject
{
- // Python (auto-magic)
- bool initialized = False;
+ // Python session placeholder
+ bool pyinitialized = False;
PythonSessionStruct *pysession;
- initialized = (pysession.interpreter != NULL);
- // Layman
+ // Layman, placeholders for our primary modules
BareConfigStruct *config = NULL;
MessageStruct *output = NULL;
LaymanAPI *api = NULL;
-
+ bool initialized = False;
// Functions
- // Creates the highest level Layman class instance
- int Layman(FILE *outfd, FILE *infd, FILE *errfd,
- BareConfigStruct *cfg, int *read_configfile, int *quiet, int *quietness,
- int *verbose, int *nocolor, int *width);
- {
-
- LaymanAPI *layman = laymanCreate(
- FILE *outfd, FILE *infd, FILE *errfd,
+ /** Creates the highest level Layman class instance,
+ * the config will default if not passed in.
+ * the message class is automatic.
+ */
+ static int (* Layman) (FILE *outfd, FILE *infd, FILE *errfd,
BareConfigStruct *cfg, int *read_configfile, int *quiet, int *quietness,
int *verbose, int *nocolor, int *width);
- // ...
-
- return True;
- }
- // Create a Bare Config class instance
- BareConfigStruct *
- BareConfig()
- {
-
- }
+ /** Create a Bare Config class instance
+ * edit the options as desired.
+ */
+ static BareConfigStruct (* BareConfig) (MessageStruct *m, FILE *outFd, FILE *inFd, FILE *errFd);
+ /** Create an Option Config class instance
+ * pass in the options and default overrides in
+ * as desired.
+ */
+ static BareConfigStruct (* OptionConfig) (Dict *options, Dict *defaults);
- // Create a Option Config class instance
- BareConfigStruct *
- OptionConfig()
- {
-
- }
-
+ /** Create an Output Message class instance
+ */
+ static MessageStruct (* Message) (FILE *out, FILE *err, int infolevel, int warnlevel, int col);
- // Create an Output Message class instance
- MessageStruct *
- Message()
- {
+ /** Creates a LaymanAPI class instance
+ */
+ static laymanAPI (* LaymanAPI) (FILE *outfd, FILE *infd, FILE *errfd,
+ BareConfigStruct *cfg, int *read_configfile, int *quiet, int *quietness,
+ int *verbose, int *nocolor, int *width);
- }
-
-
- // Creates a LaymanAPI class instance
};
+static LaymanObject
+Layman_session_create()
+{
+ LaymanObject *layman_session = malloc(sizeof(LaymanObject));
+
+ PythonSessionStruct *pysession = PySession_create();
+ layman_session->pysession = pysession;
+ layman_session->pyinitialized = (pysession.interpreter != NULL);
+
+ // now assign the function pointers
+ assign_api_functions(layman_session);
+
+ return layman_session;
+}
diff --git a/c-layman/src/laymanapi.c b/c-layman/src/laymanapi.c
index af96b1a..d15d847 100644
--- a/c-layman/src/laymanapi.c
+++ b/c-layman/src/laymanapi.c
@@ -1,4 +1,7 @@
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
#include "internal.h"
#include "laymanapi.h"
@@ -245,7 +248,7 @@ laymanAPIGetInfoStrList(LaymanAPI *l, StringList *overlays, OverlayInfo *results
// Check if the returned value is a dict as expected.
if (!obj || !PyDict_Check(obj))
{
- is Py_XDECREF(obj);
+ Py_XDECREF(obj);
return False;
}
@@ -742,5 +745,37 @@ LaymanAPI *laymanCreate(
/**
+ * Creates a fully capable layman api
+*/
+static int
+Layman(FILE *outfd, FILE *infd, FILE *errfd,
+ BareConfigStruct *cfg, int *read_configfile, int *quiet, int *quietness,
+ int *verbose, int *nocolor, int *width);
+{
+
+ LaymanAPI *layman = laymanCreate(
+ FILE *outfd, FILE *infd, FILE *errfd,
+ BareConfigStruct *cfg, int *read_configfile, int *quiet, int *quietness,
+ int *verbose, int *nocolor, int *width);
+ // ...
+
+ return True;
+}
+
+
+void
+assign_api_functions(LaymanObject *layman_session)
+{
+ layman_session->Layman = Layman;
+ layman_session->BareConfig = bareConfigCreate;
+ layman_session->OptionConfig = optionConfigCreate;
+ layman_session->Message = messageCreate;
+ layman_session->LaymanAPI = laymanCreate;
+}
+
+
+
+
+/**
* @}
*/
diff --git a/c-layman/src/laymanapi.h b/c-layman/src/laymanapi.h
index 63ea812..e9fcbd8 100644
--- a/c-layman/src/laymanapi.h
+++ b/c-layman/src/laymanapi.h
@@ -63,4 +63,5 @@ LaymanAPI *laymanCreate(
BareConfigStruct *cfg, int *read_configfile, int *quiet, int *quietness,
int *verbose, int *nocolor, int *width);
+void assign_api_functions(LaymanObject *layman_session);
#endif
diff --git a/c-layman/src/message.c b/c-layman/src/message.c
index 8175706..63e5af9 100644
--- a/c-layman/src/message.c
+++ b/c-layman/src/message.c
@@ -1,4 +1,9 @@
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
+#include <stdio.h>
+
#include "message.h"
#include "internal.h"
@@ -13,215 +18,233 @@
*/
+PyObject *messageCreate (PythonSessionStruct *_pysession,
+ FILE *out, FILE *err,
+ int infolevel, int warnlevel,
+ int col);
+int SetDebugLevel (int debug_level);
+int SetInfoLevel (int info_level);
+int SetWarnLevel (int warn_level);
+int SetColorsOn ();
+int SetColorsOff ();
+
+
+
+
/** \addtogroup message
* @{
*/
+ /** \internal */
/**
* Message structure that is used in all functions
*/
struct MessageStruct
{
-
- private:
/**
- * \internal
+ * placeholders
*/
- PyObject * message = NULL;
- PythonSessionStruct *pysession = NULL;
-
-
- public:
-
+ PyObject * message;
+ PythonSessionStruct *pysession;
+
/**
- * Creates a Message instance with default values.
- * To modify those values, use the corresponding functions.
- *
- * \param _pysession. pointer to our running PythonSessionStruct
- * \param out where to write info
- * \param err where to write errors
- * \param dbg where to write debug information
- *
- * \return a new instance of a Message object. It must be freed with messageFree()
- */
- PyObject *
- Create(PythonSessionStruct *_pysession,
- FILE *out, FILE *err,
- int infolevel, int warnlevel,
- int col)
- {
- // record the pysession pointer to the structure
- pysession = _pysession;
-
- PyObject *pyout, *pyerr;
+ * Functions
+ */
+ int (* SetDebugLevel) (int debug_level);
+ int (* SetInfoLevel) (int info_level);
+ int (* SetWarnLevel) (int warn_level);
+ int (* SetColorsOn) ();
+ int (* SetColorsOff) ();
+
+
+};
- if (!out || fileno(out) <= 0)
- out = stdout;
- if (!err || fileno(err) <= 0)
- err = stderr;
+/**
+ * Creates a Message instance with default values.
+ * To modify those values, use the corresponding functions.
+ *
+ * \param _pysession. pointer to our running PythonSessionStruct
+ * \param out where to write info
+ * \param err where to write errors
+ * \param dbg where to write debug information
+ *
+ * \return a new instance of a Message object. It must be freed with messageFree()
+ */
+PyObject *
+messageCreate(PythonSessionStruct *_pysession,
+ FILE *out, FILE *err,
+ int infolevel, int warnlevel,
+ int col)
+{
+ // record the pysession pointer to the structure
+ pysession = _pysession;
- pyout = PyFile_FromFile(out, "", "w", 0);
- pyerr = PyFile_FromFile(err, "", "w", 0);
+ PyObject *pyout, *pyerr;
- PyObject *object = pysession.executeFunction(
- "layman.output",
- "Message",
- "(sOOO)",
- pyout,
- pyerr,
- PyInt_FromLong(infolevel),
- PyInt_FromLong(warnlevel),
- PyBool_FromLong(col)
- );
+ if (!out || fileno(out) <= 0)
+ out = stdout;
+ if (!err || fileno(err) <= 0)
+ err = stderr;
- Py_DECREF(pyout);
- Py_DECREF(pyerr);
+ pyout = PyFile_FromFile(out, "", "w", 0);
+ pyerr = PyFile_FromFile(err, "", "w", 0);
- if (!object)
- return NULL;
+ PyObject *object = pysession.executeFunction(
+ "layman.output",
+ "Message",
+ "(sOOO)",
+ pyout,
+ pyerr,
+ PyInt_FromLong(infolevel),
+ PyInt_FromLong(warnlevel),
+ PyBool_FromLong(col)
+ );
- return object;
- }
+ Py_DECREF(pyout);
+ Py_DECREF(pyerr);
+ if (!object)
+ return NULL;
- /**
- * Set the debug level.
- *
- * \param debug_level the debug level
- *
- * \return True on success, False on failure.
- */
- int
- SetDebugLevel(int debug_level)
- {
- if (!message)
- return False;
+ return object;
+}
- PyObject *obj = pysession.PyObject_CallMethod(
- message, "set_debug_level", "(I)", debug_level);
- int ret;
- if (obj)
- ret = True;
- else
- ret = False;
+/**
+ * Set the debug level.
+ *
+ * \param debug_level the debug level
+ *
+ * \return True on success, False on failure.
+ */
+int
+SetDebugLevel(int debug_level)
+{
+ if (!message)
+ return False;
- is Py_XDECREF(obj);
+ PyObject *obj = pysession.PyObject_CallMethod(
+ message, "set_debug_level", "(I)", debug_level);
+ int ret;
- return ret;
- }
+ if (obj)
+ ret = True;
+ else
+ ret = False;
+ Py_XDECREF(obj);
- /**
- * Set the info level.
- *
- * \param info_level the info level
- *
- * \return True on success, False on failure.
- */
- int
- SetInfoLevel(int info_level)
- {
- if (!message)
- return False;
+ return ret;
+}
- PyObject *obj = pysession.PyObject_CallMethod(
- message, "set_info_level", "(I)",
- PyInt_FromLong(info_level));
- int ret;
- if (obj)
- ret = True;
- else
- ret = False;
+/**
+ * Set the info level.
+ *
+ * \param info_level the info level
+ *
+ * \return True on success, False on failure.
+ */
+int
+SetInfoLevel(int info_level)
+{
+ if (!message)
+ return False;
- is Py_XDECREF(obj);
+ PyObject *obj = pysession.PyObject_CallMethod(
+ message, "set_info_level", "(I)",
+ PyInt_FromLong(info_level));
+ int ret;
- return ret;
- }
+ if (obj)
+ ret = True;
+ else
+ ret = False;
- /**
- * Set the warning level.
- *
- * \param warn_level the warning level
- *
- * \return True on success, False on failure.
- */
- int
- SetWarnLevel(int warn_level)
- {
- if (!message)
- return False;
+ Py_XDECREF(obj);
- PyObject *obj = pysession.PyObject_CallMethod(
- message, "set_warn_level", "(I)",
- PyInt_FromLong(warn_level));
- int ret;
+ return ret;
+}
- if (obj)
- ret = True;
- else
- ret = False;
+/**
+ * Set the warning level.
+ *
+ * \param warn_level the warning level
+ *
+ * \return True on success, False on failure.
+ */
+int
+SetWarnLevel(int warn_level)
+{
+ if (!message)
+ return False;
- is Py_XDECREF(obj);
+ PyObject *obj = pysession.PyObject_CallMethod(
+ message, "set_warn_level", "(I)",
+ PyInt_FromLong(warn_level));
+ int ret;
- return ret;
- }
+ if (obj)
+ ret = True;
+ else
+ ret = False;
- /**
- * Activates colors in the output
- *
- * \return 1 on success, 0 on failure
- */
- int
- SetColorsOn()
- {
- if (!message)
- return False;
+ Py_XDECREF(obj);
- PyObject *obj = pysession.PyObject_CallMethod(
- message, "set_colorize", Py_True);
- int ret;
+ return ret;
+}
- if (obj)
- ret = True;
- else
- ret = False;
+/**
+ * Activates colors in the output
+ *
+ * \return 1 on success, 0 on failure
+ */
+int
+SetColorsOn()
+{
+ if (!message)
+ return False;
- is Py_XDECREF(obj);
+ PyObject *obj = pysession.PyObject_CallMethod(
+ message, "set_colorize", Py_True);
+ int ret;
- return ret;
- }
+ if (obj)
+ ret = True;
+ else
+ ret = False;
- /**
- * Deactivates colors in the output
- *
- * \return 1 on success, 0 on failure
- */
- int
- SetColorsOff()
- {
- if (!message)
- return False;
+ Py_XDECREF(obj);
- PyObject *obj = pysession.PyObject_CallMethod(
- message, "set_colorize", Py_False);
- int ret;
+ return ret;
+}
- if (obj)
- ret = True;
- else
- ret = False;
+/**
+ * Deactivates colors in the output
+ *
+ * \return 1 on success, 0 on failure
+ */
+int
+SetColorsOff()
+{
+ if (!message)
+ return False;
- is Py_XDECREF(obj);
+ PyObject *obj = pysession.PyObject_CallMethod(
+ message, "set_colorize", Py_False);
+ int ret;
- return ret;
- }
+ if (obj)
+ ret = True;
+ else
+ ret = False;
+ Py_XDECREF(obj);
-};
+ return ret;
+}
/**
@@ -232,7 +255,7 @@ messageFree(MessageStruct *m)
{
if (m && m->interpreter)
{
- is Py_XDECREF(m->interpreter);
+ Py_XDECREF(m->interpreter);
}
if (m)
{
diff --git a/c-layman/src/message.h b/c-layman/src/message.h
index 0c13765..5d12cf1 100644
--- a/c-layman/src/message.h
+++ b/c-layman/src/message.h
@@ -5,13 +5,18 @@
#include "stringlist.h"
-typedef struct Message Message;
+typedef struct MessageStruct MessageStruct;
-Message *messageCreate(FILE *out, FILE *err, int infolevel, int warnlevel, int col);
-void messageFree(Message *m);
-int messageSetDebugLevel(Message *m, int debug_level);
-int messageSetInfoLevel(Message *m, int info_level);
-int messageSetWarnLevel(Message *m, int warn_level);
+MessageStruct *messageCreate(PythonSessionStruct *_pysession,
+ FILE *out,
+ FILE *err,
+ int infolevel,
+ int warnlevel,
+ int col);
+void messageFree(MessageStruct *m);
+int messageSetDebugLevel(MessageStruct *m, int debug_level);
+int messageSetInfoLevel(MessageStruct *m, int info_level);
+int messageSetWarnLevel(MessageStruct *m, int warn_level);
#endif
diff --git a/c-layman/src/stringlist.c b/c-layman/src/stringlist.c
index 1d82d4d..4ea61df 100644
--- a/c-layman/src/stringlist.c
+++ b/c-layman/src/stringlist.c
@@ -1,4 +1,7 @@
#include <Python.h>
+// temp workaround for my environment
+// since at times it fails to find Python.h
+#include <python2.6/Python.h>
#include <stdlib.h>
#include "stringlist.h"
diff --git a/c-layman/src/stringlist.h b/c-layman/src/stringlist.h
index b90cfd2..f37ec8c 100644
--- a/c-layman/src/stringlist.h
+++ b/c-layman/src/stringlist.h
@@ -1,7 +1,6 @@
#ifndef STRINGLIST_H
#define STRINGLIST_H
-#include <sys/types.h>
typedef struct StringList StringList;