Beispiel #1
0
static PyObject *PyRRD_dump(
    PyObject UNUSED(*self),
    PyObject * args)
{
    PyObject *r;
    int       argc;
    char    **argv;

    if (create_args("dump", args, &argc, &argv) < 0)
        return NULL;

    if (rrd_dump(argc, argv) != 0) {
        PyErr_SetString(ErrorObject, rrd_get_error());
        rrd_clear_error();
        r = NULL;
    } else {
        Py_INCREF(Py_None);
        r = Py_None;
    }

    destroy_args(&argv);
    return r;
}
Beispiel #2
0
static PyObject *PyRRD_resize(
    PyObject UNUSED(*self),
    PyObject * args)
{
    PyObject *r;
    char    **argv;
    int       argc, ts;

    if (create_args("resize", args, &argc, &argv) < 0)
        return NULL;

    if ((ts = rrd_resize(argc, argv)) == -1) {
        PyErr_SetString(ErrorObject, rrd_get_error());
        rrd_clear_error();
        r = NULL;
    } else {
        Py_INCREF(Py_None);
        r = Py_None;
    }

    destroy_args(&argv);
    return r;
}
Beispiel #3
0
static PyObject *PyRRD_updatev(
    PyObject UNUSED(*self),
    PyObject * args)
{
    PyObject *r;
    int       argc;
    char    **argv;
    rrd_info_t *data;

    if (create_args("updatev", args, &argc, &argv) < 0)
        return NULL;

    if ((data = rrd_update_v(argc, argv)) == NULL) {
        PyErr_SetString(ErrorObject, rrd_get_error());
        rrd_clear_error();
        r = NULL;
    } else {
        r = PyDict_FromInfo(data);
        rrd_info_free(data);
    }

    destroy_args(&argv);
    return r;
}
Beispiel #4
0
/* [user thread] */
bool _al_show_display_menu(ALLEGRO_DISPLAY *display, ALLEGRO_MENU *menu)
{
#ifdef CREATE_WINDOW_FOR_MENU
   ARGS *args;
   
   if (!ensure_gtk_thread()) {
      return false;
   }
   
   args = create_args();
   if (!args) {
      return false;
   }
   
   args->display = display;
   args->menu = menu;
   
   return wait_for_args(do_show_display_menu, args);
#else
   (void) display;
   (void) menu;
   return false;
#endif
}
Beispiel #5
0
static PyObject *PyRRD_xport(
    PyObject UNUSED(*self),
    PyObject * args)
{
    PyObject *r;
    int       argc, xsize;
    char    **argv, **legend_v;
    time_t    start, end;
    unsigned long step, col_cnt;
    rrd_value_t *data, *datai;

    if (create_args("xport", args, &argc, &argv) < 0)
        return NULL;

    if (rrd_xport(argc, argv, &xsize, &start, &end,
                  &step, &col_cnt, &legend_v, &data) == -1) {
        PyErr_SetString(ErrorObject, rrd_get_error());
        rrd_clear_error();
        r = NULL;
    } else {
        PyObject *meta_dict, *data_list, *legend_list, *t;
        unsigned long i, j;
        rrd_value_t dv;

        unsigned long row_cnt = ((end - start) / step);

        r = PyDict_New();
        meta_dict = PyDict_New();
        legend_list = PyList_New(col_cnt);
        data_list = PyList_New(row_cnt);
        PyDict_SetItem(r, PyString_FromString("meta"), meta_dict);
        PyDict_SetItem(r, PyString_FromString("data"), data_list);

        datai = data;

        PyDict_SetItem(meta_dict, PyString_FromString("start"), PyInt_FromLong((long) start));
        PyDict_SetItem(meta_dict, PyString_FromString("end"), PyInt_FromLong((long) end));
        PyDict_SetItem(meta_dict, PyString_FromString("step"), PyInt_FromLong((long) step));
        PyDict_SetItem(meta_dict, PyString_FromString("rows"), PyInt_FromLong((long) row_cnt));
        PyDict_SetItem(meta_dict, PyString_FromString("columns"), PyInt_FromLong((long) col_cnt));
        PyDict_SetItem(meta_dict, PyString_FromString("legend"), legend_list);

        for (i = 0; i < col_cnt; i++) {
            PyList_SET_ITEM(legend_list, i, PyString_FromString(legend_v[i]));
        }

        for (i = 0; i < row_cnt; i++) {
            t = PyTuple_New(col_cnt);
            PyList_SET_ITEM(data_list, i, t);

            for (j = 0; j < col_cnt; j++) {
                dv = *(datai++);
                if (isnan(dv)) {
                    PyTuple_SET_ITEM(t, j, Py_None);
                    Py_INCREF(Py_None);
                } else {
                    PyTuple_SET_ITEM(t, j, PyFloat_FromDouble((double) dv));
                }
            }
        }

        for (i = 0; i < col_cnt; i++) {
            rrd_freemem(legend_v[i]);
        }
        rrd_freemem(legend_v);
        rrd_freemem(data);
    }
    destroy_args(&argv);
    return r;
}
Beispiel #6
0
static PyObject *PyRRD_fetch(
    PyObject UNUSED(*self),
    PyObject * args)
{
    PyObject *r;
    rrd_value_t *data, *datai;
    unsigned long step, ds_cnt;
    time_t    start, end;
    int       argc;
    char    **argv, **ds_namv;

    if (create_args("fetch", args, &argc, &argv) < 0)
        return NULL;

    if (rrd_fetch(argc, argv, &start, &end, &step,
                  &ds_cnt, &ds_namv, &data) == -1) {
        PyErr_SetString(ErrorObject, rrd_get_error());
        rrd_clear_error();
        r = NULL;
    } else {
        /* Return :
           ((start, end, step), (name1, name2, ...), [(data1, data2, ..), ...]) */
        PyObject *range_tup, *dsnam_tup, *data_list, *t;
        unsigned long i, j, row;
        rrd_value_t dv;

        row = (end - start) / step;

        r = PyTuple_New(3);
        range_tup = PyTuple_New(3);
        dsnam_tup = PyTuple_New(ds_cnt);
        data_list = PyList_New(row);
        PyTuple_SET_ITEM(r, 0, range_tup);
        PyTuple_SET_ITEM(r, 1, dsnam_tup);
        PyTuple_SET_ITEM(r, 2, data_list);

        datai = data;

        PyTuple_SET_ITEM(range_tup, 0, PyInt_FromLong((long) start));
        PyTuple_SET_ITEM(range_tup, 1, PyInt_FromLong((long) end));
        PyTuple_SET_ITEM(range_tup, 2, PyInt_FromLong((long) step));

        for (i = 0; i < ds_cnt; i++)
            PyTuple_SET_ITEM(dsnam_tup, i, PyString_FromString(ds_namv[i]));

        for (i = 0; i < row; i++) {
            t = PyTuple_New(ds_cnt);
            PyList_SET_ITEM(data_list, i, t);

            for (j = 0; j < ds_cnt; j++) {
                dv = *(datai++);
                if (isnan(dv)) {
                    PyTuple_SET_ITEM(t, j, Py_None);
                    Py_INCREF(Py_None);
                } else {
                    PyTuple_SET_ITEM(t, j, PyFloat_FromDouble((double) dv));
                }
            }
        }

        for (i = 0; i < ds_cnt; i++)
            rrd_freemem(ds_namv[i]);
        rrd_freemem(ds_namv);   /* rrdtool don't use PyMem_Malloc :) */
        rrd_freemem(data);
    }

    destroy_args(&argv);
    return r;
}
Beispiel #7
0
Call builtin_setTempo(Env parent_env, Args args) {
    Number n = (Number)args_get(args, 0);
    Closure k = (Closure)args_get(args, 1);
    tempo = (int)n->value;
    return create_call(k, create_args(0));
}
Beispiel #8
0
int main(int argc, char **argv)
{
    signal(SIGINT, handle_signal);

    char line[MAXLINE]; /* The current input line */

    /* Points to the beginning of the list of current command tokens */
    cmd_tok *current_cmd = NULL;

    /* Points to a token within the command tokens list */
    cmd_tok *current_tok_ptr = NULL;

    print_prompt();
    int length = 0;
    while((length = getln(line, MAXLINE)) > 0)
    {
        if (length == 1 && line[0] == '\n')
        {
            /* They pushed enter without any text */
            print_prompt();
            continue;
        }
        char *token = strtok(line, " ");
        current_cmd = create_cmd_tok(token);
        current_tok_ptr = current_cmd;
        token = strtok(NULL, " ");

        /* Continue to tokenize input line */
        while (token != NULL)
        {
            current_tok_ptr->next_token = create_cmd_tok(token);
            current_tok_ptr = current_tok_ptr->next_token;
            token = strtok(NULL, " ");
        }

        /* Process the command */

        /* Check if it was one of the internal commands: exit, cd */
        if (strcmp(current_cmd->current_token, "exit") == 0)
        {
            destroy_cmd_toks(current_cmd);
            return 0;
        }
        else if (strcmp(current_cmd->current_token, "cd") == 0)
        {
            char *directory = NULL;
            int num_args = get_num_tokens(current_cmd);
            if (num_args == 1)
            {
                /* The user just typed "cd".  Go to home directory. */
                directory = getenv("HOME");
            }
            else
            {
                /* Get the token after "cd" */
                directory = current_cmd->next_token->current_token;
            }

            int cd_return_val = chdir(directory);

            /* chdir returns 0 if successful */
            if (cd_return_val != 0)
            {
                /* Print error messages */
                char *error_msg =
                    (char *)malloc(sizeof(argv[0]) +
                                   sizeof(directory) + 7*sizeof(char));
                strcpy(error_msg, argv[0]);
                strcat(error_msg, ": cd: ");
                strcat(error_msg, directory);
                perror(error_msg);
                free(error_msg);
            }
        }
        else
        {
            /* Assume input was an external executable command */
            char **args = create_args(current_cmd);

            /* In case executable is not on path, allocate memory for
               args[0] with ./ prepended */
            char *arg0 = NULL;
            int child_pid = fork();
            if (child_pid == 0)
            {
                execvp(args[0], args);

                /* execvp only returns if it fails */

                /* Didn't find command on path,
                try looking in current directory */
                arg0 = (char *)malloc(sizeof(args[0]) + 3*sizeof(char));
                strcpy(arg0, "./");
                strcat(arg0, args[0]);
                execvp(arg0, args);

                /* Couldn't find command */
                print_cmd_not_found(args[0]);
                return 0;
            }
            else
            {
                signal(SIGINT, child_terminate_handler);
                wait(NULL);
            }
            signal(SIGINT, handle_signal);
            free(args);
            free(arg0);
        }

        /* Free and reset command pointers */
        destroy_cmd_toks(current_cmd);
        current_cmd = NULL;
        current_tok_ptr = NULL;

        print_prompt();
    }

    /* In case they exit with control-D,
       want prompt to show up on new line */
    printf("\n");

    return 0;
}