コード例 #1
0
ファイル: keyevents.c プロジェクト: Ferada/feh
void feh_event_handle_keypress(XEvent * ev)
{
	int state;
	char kbuf[20];
	KeySym keysym;
	XKeyEvent *kev;
	winwidget winwid = NULL;
	feh_menu_item *selected_item;
	feh_menu *selected_menu;

	winwid = winwidget_get_from_window(ev->xkey.window);

	/* nuke dupe events, unless we're typing text */
	if (winwid && !winwid->caption_entry) {
		while (XCheckTypedWindowEvent(disp, ev->xkey.window, KeyPress, ev));
	}

	kev = (XKeyEvent *) ev;
	XLookupString(&ev->xkey, (char *) kbuf, sizeof(kbuf), &keysym, NULL);
	state = kev->state & (ControlMask | ShiftMask | Mod1Mask | Mod4Mask);

	if (ignore_space(keysym))
		state &= ~ShiftMask;

	/* menus are showing, so this is a menu control keypress */
	if (ev->xbutton.window == menu_cover) {
		selected_item = feh_menu_find_selected_r(menu_root, &selected_menu);
		if (feh_is_kp(EVENT_menu_close, state, keysym, 0))
			feh_menu_hide(menu_root, True);
		else if (feh_is_kp(EVENT_menu_parent, state, keysym, 0))
			feh_menu_select_parent(selected_menu);
		else if (feh_is_kp(EVENT_menu_down, state, keysym, 0))
			feh_menu_select_next(selected_menu, selected_item);
		else if (feh_is_kp(EVENT_menu_up, state, keysym, 0))
			feh_menu_select_prev(selected_menu, selected_item);
		else if (feh_is_kp(EVENT_menu_child, state, keysym, 0))
			feh_menu_select_submenu(selected_menu);
		else if (feh_is_kp(EVENT_menu_select, state, keysym, 0))
			feh_menu_item_activate(selected_menu, selected_item);
		return;
	}

	if (winwid == NULL)
		return;

	feh_event_handle_generic(winwid, state, keysym, 0);
}
コード例 #2
0
ファイル: keyevents.c プロジェクト: Ferada/feh
static void feh_set_parse_kb_partial(fehkey *key, int index, char *ks) {
	char *cur = ks;
	int mod = 0;

	if (!*ks) {
		key->keysyms[index] = 0;
		return;
	}

	while (cur[1] == '-') {
		switch (cur[0]) {
			case 'C':
				mod |= ControlMask;
				break;
			case 'S':
				mod |= ShiftMask;
				break;
			case '1':
				mod |= Mod1Mask;
				break;
			case '4':
				mod |= Mod4Mask;
				break;
			default:
				weprintf("keys: invalid modifier %c in \"%s\"", cur[0], ks);
				break;
		}
		cur += 2;
	}

	key->keysyms[index] = XStringToKeysym(cur);
	if (ignore_space(key->keysyms[index]))
		mod &= ~ShiftMask;
	key->keystates[index] = mod;

	if (key->keysyms[index] == NoSymbol)
		weprintf("keys: Invalid keysym: %s", cur);
}
コード例 #3
0
ファイル: process.c プロジェクト: sylar94444/iptraffic
static inline int build_url_repled(int dest_index, struct rule_entry_s *rule, char *req_url, char* url_repled)
{
    int replace_flag = rule->type_repled_pos;    /* 0-整体替换,>0-替换部分字段 */
    char *p_dst_page = rule->dest_pages[dest_index];
    char *p_url_repled = url_repled;
    int offset = 0;
    int str_length = 0;
    int pre_pos_num = 0;
    int pos_num = 0;
    char dst_page_element[256] = {0};
    char *p_dst_page_element = NULL;
        
    
    /* 用以替换URL中间字段 */
    if (replace_flag > 0)
    {
        /* 兼容现有配置,pos>0且dst_page中没有<> */
        if (NULL==strchr(p_dst_page, '<'))
        {
            str_length = rule->subs_src_page[replace_flag].rm_so;
            if(str_length == -1)
            {
                /* 策略配置错误*/
                return IPTRAFFIC_FUNC_ERROR;
            }
            memcpy(url_repled, req_url, str_length);
            url_repled[str_length] = '\0';
            
            strcat(url_repled, rule->dest_pages[dest_index]);
            
            strcat(url_repled, req_url+rule->subs_src_page[replace_flag].rm_eo);

            return IPTRAFFIC_FUNC_SUCCESS;
        }
        
        /* 拆分dest_page字符串,获取替换位置 */
        while((p_dst_page=strchr(p_dst_page, '<')))
        {   
            sscanf(p_dst_page, "<%d%s", &pos_num, dst_page_element);

            /* 策略配置错误*/
            if(pre_pos_num > pos_num)
            {
                errlog("Dest_page pos index is wrong:%s",rule->dest_pages[dest_index]);
                return IPTRAFFIC_FUNC_ERROR;
            }
            pre_pos_num = pos_num;

            /* 刨除> */
            p_dst_page_element  = ignore_space(dst_page_element+1);
            
            /* 偏移下一个<> */
            p_dst_page += 1;

            /* 该位置没有匹配*/
            if((rule->subs_src_page[pos_num].rm_so == -1))
            {
                continue;
            }

            /* 保留替换dest_page前的部分*/
            str_length = rule->subs_src_page[pos_num].rm_so - offset;
            memcpy(p_url_repled, req_url+offset, str_length);
            p_url_repled += str_length;

            /* 将目标内容替换到指定位置 */
            str_length = strlen(p_dst_page_element);
            memcpy(p_url_repled, p_dst_page_element, str_length);
            p_url_repled += str_length;
            
            offset = rule->subs_src_page[pos_num].rm_eo;

        }
        /* 追加替换位置后的部分*/
        *p_url_repled = '\0';
        strcat(url_repled, req_url+offset);
    }
    else
    {
        /* 直接替换*/
        strcpy(url_repled, rule->dest_pages[dest_index]);
    }
    return IPTRAFFIC_FUNC_SUCCESS;
}
コード例 #4
0
ファイル: 4.c プロジェクト: pi8027/libdatastruct
int main(void)
{
    stack_t *stack;
    int getf,buffer[128],errcode;
    size_t counter,size;
    stack = stack_initialize(sizeof(int),DEFAULT_RELEASE_FUNCTION);
    if(!stack){
        fputs("Error!\n",stderr);
        return -1;
    }
    while(1){
        ignore_space(stdin);
        getf = fgetc(stdin);
        if(getf == 's'){
            fputs("set ",stdout);
            counter = 0;
            while(counter != 128){
                ignore_space(stdin);
                getf = fgetc(stdin);
                ungetc(getf,stdin);
                if(getf == '\n'
                    || (getf != '+' && getf != '-' && !isdigit(getf))){
                    break;
                }
                buffer[counter] = read_integer(stdin);
                fprintf(stdout,"%d ",buffer[counter]);
                counter++;
            }
            ignore_to_newline(stdin);
            errcode = stack_push_many_elements(stack,counter,buffer);
            if(errcode){
                fputs("Error!\n",stderr);
                return -1;
            }
            fputc('\n',stdout);
            fputs("stack trace : ",stdout);
            stack_trace(stack);
        }
        else if(getf == 'g'){
            fputs("get ",stdout);
            ignore_space(stdin);
            size = read_integer(stdin);
            ignore_to_newline(stdin);
            errcode = stack_pop_many_elements(stack,size,buffer);
            if(errcode){
                fputs("Error!\n",stderr);
                return -1;
            }
            counter = 0;
            while(counter != size){
                fprintf(stdout,"%d ",buffer[counter]);
                counter++;
            }
            fputc('\n',stdout);
            fputs("stack trace : ",stdout);
            stack_trace(stack);
        }
        else if(!isspace(getf)){
            break;
        }
    }
    stack_release(stack);
    return 0;
}