diff options
author | dol-sen <brian.dolbec@gmail.com> | 2011-10-11 23:36:10 -0700 |
---|---|---|
committer | dol-sen <brian.dolbec@gmail.com> | 2011-10-11 23:36:10 -0700 |
commit | 6e320b36f8aaba92a6a6605da737b7877dece01f (patch) | |
tree | fd936dbe04e869a43e97f3891bfb85ab8cfde2ae | |
parent | continued re-structure, some renaming. (diff) | |
download | layman-6e320b36f8aaba92a6a6605da737b7877dece01f.tar.gz layman-6e320b36f8aaba92a6a6605da737b7877dece01f.tar.bz2 layman-6e320b36f8aaba92a6a6605da737b7877dece01f.zip |
continued restructure, begin fixing my last screwups.
-rw-r--r-- | c-layman/src/config.c | 23 | ||||
-rw-r--r-- | c-layman/src/internal.h | 17 | ||||
-rw-r--r-- | c-layman/src/interpreter.c | 325 | ||||
-rw-r--r-- | c-layman/src/interpreter.h | 12 | ||||
-rw-r--r-- | c-layman/src/layman.c | 81 | ||||
-rw-r--r-- | c-layman/src/laymanapi.c | 37 | ||||
-rw-r--r-- | c-layman/src/laymanapi.h | 1 | ||||
-rw-r--r-- | c-layman/src/message.c | 345 | ||||
-rw-r--r-- | c-layman/src/message.h | 17 | ||||
-rw-r--r-- | c-layman/src/stringlist.c | 3 | ||||
-rw-r--r-- | c-layman/src/stringlist.h | 1 |
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; |