Example #1
0
/* Find menu items for which the name, description or exec contains str.
 * Return a list of struct menuitem_t * */
struct List *menuitems_match(char *str)
{
    unsigned int i;
    struct List *L = List_new();
    for (i = 0; i < all_menu_items->size; i++)
    {
        struct menuitem_t *M = all_menu_items->items[i];
        if (!M->name)
            msg("BLANK NAME!\n");
        if (strcasestr(M->name, str))
            List_push_back(L, M);
        else if (M->descr)
        {
            if (strcasestr(M->descr, str))
                List_push_back(L, M);
        }
    }
    return L;
}
Example #2
0
void Manager_Insert()
{
	char ch[256];
	printf("문자 입력: ");
	gets(ch);
	int num=strlen(ch);
	
	for(int i=0;i<num;i++)
	{
		List_push_back(&mm.li,ch[i]);
	}
	printf("입력결과: 총 %d개의 문자를 입력하셨습니다.\n",mm.li.count);
}
Example #3
0
/*
 * Returns all tokens delimeted by the given beginning and ending delimeters
 */
static void get_delimited_tokens(const Parser *parser,
                                 const Symbol beg,
                                 const Symbol end,
                                 List **out)
{
    if (parser == NULL || out == NULL) {
        return;
    }

    Token *token;
    token = NULL;

    unsigned int i, open_count, close_count, group_index;
    i = 0;
    open_count = 0;
    close_count = 0;
    group_index = 0;

    while ((token = List_get_data(parser->token_list, i)) != NULL) {
        if (strcmp(token->value, beg.value) == 0) {
            unsigned int j;
            j = i;
            Token *temp;
            temp = NULL;
            while ((temp = List_get_data(parser->token_list, j)) != NULL) {
                Token *match;
                match = Token_create(temp->value,
                                     temp->begin, temp->end,
                                     temp->type);

                List_push_back(out[group_index], match);

                if (strcmp(temp->value, beg.value) == 0) {
                    ++open_count;
                }
                if (strcmp(temp->value, end.value) == 0) {
                    ++close_count;
                }

                if (open_count == close_count) {
                    ++group_index;
                    break;
                }

                ++j;
            }
        }

        ++i;
    }
}
Example #4
0
/* Recursively scan through the given directory
 * looking for .desktop files */
static void scan_applications_dir(char *path)
{
    DIR *dp = opendir(path);
    struct dirent *entry;
    struct menuitem_t *M;

    if (!dp)
    {
        perror(path);
        return;
    }

    while ( (entry = readdir(dp)) )
    {
        char *n = entry->d_name, *fullpath;
        if (!strcmp(n, "..") || !strcmp(n, "."))
            continue;
        fullpath = malloc( sizeof(char) * (strlen(n) + strlen(path) + 2) );
        sprintf(fullpath, "%s/%s", path, n);
        switch (entry->d_type)
        {
        case DT_DIR: /* Recursively scan directories */
            scan_applications_dir(fullpath);
            break;
        case DT_REG: /* A regular file */
            M = calloc(1, sizeof(struct menuitem_t));
            read_desktop_file( fullpath, &(M->name), &(M->descr), &(M->exec) );

            if ( (!M->name && !M->descr) || (!M->exec) )
            {
                free(M);
                M = NULL;
            }
            else if (!M->name && M->descr)
            {
                M->name = M->descr;
                M->descr = NULL;
            }
            if (M)
                List_push_back(all_menu_items, M);
            break;
        }
        free(fullpath);
    }
    closedir(dp);
}
Example #5
0
void manager_insert()
{
	int idx;int num;
	printf("[insert]\n");
	printf("문자입력하세요 \n");
	fflush(stdin);
	gets(arr);
	 num=strlen(arr);
	for(idx=0;idx<num;idx++)
	{
		//List_push_front(&dlist,arr[idx]);
		List_push_back(&dlist,arr[idx]);
	}
	printf("입력결과: 총 %d개의 문자를 입력하셨습니다.\n",dlist.count);

	
}
Example #6
0
void TestData_list_uint_test(TestData _test)
{
    uint i = 0;
    ///list _lst;
    List _lst = List_new(Vptr, malloc, free);
    List lst;
    Iterator iter;


    for (; i < _test->count; i++)
    {
        _test->data[i].uint32_var = i;
    }

    printf("push back begin test\n");

    lst = List_Init(_lst, Uint32, malloc, free);
    for (i = 0; i < _test->count; i++)
    {
        Iterator iter = List_push_back(lst, _test->data[i]);
        if (List_get_value(iter).uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", List_get_value(iter).uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", List_get_value(iter).uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    i = _test->count - 1;
    iter = List_end(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_prev(iter);
        i--;
    }
    List_Dest(lst);
    printf("push back test end\n");
    ///
    printf("insert after test0 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[0]);
    for (i = 1; i < _test->count; i++)
    {
        iter = List_insert_after(lst, iter, _test->data[i]);
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert after test0 end\n");
    ///
    printf("insert after test1 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[0]);
    List_push_back(lst, _test->data[_test->count - 1]);
    for (i = 1; i < _test->count - 1; i++)
    {
        iter = List_insert_after(lst, iter, _test->data[i]);
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert after test1 end\n");
    ///
    printf("insert before test0 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[_test->count - 1]);
    for (i = _test->count - 2; i; i--)
    {
        iter = List_insert_before(lst, iter, _test->data[i]);
    }
    List_insert_before(lst, iter, _test->data[0]);
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert before test0 end\n");
    ///
    ///
    printf("insert before test1 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[0]);
    List_push_back(lst, _test->data[_test->count - 1]);
    iter = List_end(lst);
    for (i = _test->count - 2; i; i--)
    {
        iter = List_insert_before(lst, iter, _test->data[i]);
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert before test1 end\n");
    ///

    printf("test succ\n");
}
Example #7
0
/*
 * Match high level parser-tokens using lexer-tokens
 */
static void init_tokens(Parser *parser,
                        const Token *tokens,
                        const size_t token_count)
{
    if (parser == NULL || tokens == NULL) {
        return;
    }

    char escape_chars[parser->symbol_count][3];
    {
        unsigned int i;
        for (i = 0; i < parser->symbol_count; ++i) {
            if (i == 0) {
                escape_chars[i][0] = '\0';
            }
            else {
                escape_chars[i][0] = parser->symbols[SYMBOL_ESCAPE].value[0];
                escape_chars[i][1] = parser->symbols[i].value[0];
                escape_chars[i][2] = '\0';
            }
        }
    }

    unsigned int indices[token_count];
    {
        unsigned int i;
        for (i = 0; i < token_count; ++i) {
            indices[i] = 0;
        }
    }

    char symbol_buffer[token_count + 1];
    char literal_buffer[token_count + 1];
    char symbol_match[1024];
    char literal_match[1024];
    symbol_buffer[0] = '\0';
    literal_buffer[0] = '\0';
    symbol_match[0] = '\0';
    literal_match[0] = '\0';

    unsigned int symbol_match_begin, symbol_match_end;
    unsigned int literal_match_begin, literal_match_end;
    TOKEN_TYPE symbol_match_type, literal_match_type;
    symbol_match_begin = 0;
    symbol_match_end = 0;
    literal_match_begin = 0;
    literal_match_end = 0;
    symbol_match_type = TOKEN_UNKNOWN;
    literal_match_type = TOKEN_UNKNOWN;

    unsigned int i;
    for (i = 0; i < token_count; ++i) {
        unsigned int j, increment;
        increment = 0;
        for (j = i; j < token_count; ++j) {
            strcat(symbol_buffer, tokens[j].value);

            unsigned int k;

            if (strlen(symbol_buffer) == 2
                && symbol_buffer[0] == parser->symbols[SYMBOL_ESCAPE].value[0]
            ) {
                unsigned int match;
                match = 0;

                for (k = 1; k < parser->symbol_count; ++k) {
                    if (strcmp(symbol_buffer, escape_chars[k]) == 0) {
                        sprintf(symbol_match, "%s", symbol_buffer);
                        symbol_match_begin = i;
                        symbol_match_end = i + 1;

                        symbol_match_type = TOKEN_ESCAPE_CHAR;

                        indices[i] = 2;
                        if (i < token_count - 1) {
                            indices[i + 1] = 2;
                            increment = 1;
                        }

                        match = 1;
                        break;
                    }
                }

                if (match) {
                    break;
                }
            }

            for (k = 1; k < parser->symbol_count; ++k) {
                if (strcmp(symbol_buffer, parser->symbols[k].value) == 0) {
                    sprintf(symbol_match, "%s", symbol_buffer);
                    symbol_match_begin = i;
                    symbol_match_end = i;

                    symbol_match_type = TOKEN_SYMBOL;

                    indices[i] = 1;

                    break;
                }
            }
        }
        symbol_buffer[0] = '\0';

        if (indices[i] != 1 && indices[i] != 2) {
            strcat(literal_buffer, tokens[i].value);
        }
        else {
            if (strlen(literal_buffer) == 1) {
                sprintf(literal_match, "%s", literal_buffer);
                literal_match_begin = i - (unsigned int) strlen(literal_buffer);
                literal_match_end = literal_match_begin;
                literal_match_type = TOKEN_LITERAL;
            }
            else if (strlen(literal_buffer) > 1) {
                sprintf(literal_match, "%s", literal_buffer);
                literal_match_begin = i - (unsigned int) strlen(literal_buffer);
                literal_match_end = i - 1;
                literal_match_type = TOKEN_LITERAL;
            }

            literal_buffer[0] = '\0';
        }

        {
            if (literal_match[0] != '\0') {
                Token *token;
                token = Token_create(literal_match,
                                     literal_match_begin, literal_match_end,
                                     literal_match_type);

                List_push_back(parser->token_list, token);
            }
        }

        {
            if (symbol_match[0] != '\0') {
                Token *token;
                token = Token_create(symbol_match,
                                     symbol_match_begin, symbol_match_end,
                                     symbol_match_type);

                List_push_back(parser->token_list, token);
            }
        }

        symbol_match[0] = '\0';
        literal_match[0] = '\0';

        i += increment;
    }
}