コード例 #1
0
ファイル: lib_screen.c プロジェクト: kleopatra999/ncurses-1
static char *
decode_cchar(char *source, cchar_t *fillin, cchar_t *target)
{
    int color;
    attr_t attr = fillin->attr;
    wchar_t chars[CCHARW_MAX];
    int append = 0;
    int value = 0;

    T(("decode_cchar  '%s'", source));
    *target = blank;
#if NCURSES_EXT_COLORS
    color = fillin->ext_color;
#else
    color = (int) PAIR_NUMBER(attr);
#endif
    source = decode_attr(source, &attr, &color);
    memset(chars, 0, sizeof(chars));
    source = decode_char(source, &value);
    chars[0] = (wchar_t) value;
    /* handle combining characters */
    while (source[0] == MARKER && source[1] == APPEND) {
	source += 2;
	source = decode_char(source, &value);
	if (++append < CCHARW_MAX) {
	    chars[append] = (wchar_t) value;
	}
    }
    setcchar(target, chars, attr, (short) color, NULL);
    return source;
}
コード例 #2
0
ファイル: lib_screen.c プロジェクト: kleopatra999/ncurses-1
static char *
decode_chtype(char *source, chtype fillin, chtype *target)
{
    attr_t attr = ChAttrOf(fillin);
    int color = PAIR_NUMBER((int) attr);
    int value;

    T(("decode_chtype '%s'", source));
    source = decode_attr(source, &attr, &color);
    source = decode_char(source, &value);
    *target = (ChCharOf(value) | attr | (chtype) COLOR_PAIR(color));
    /* FIXME - ignore combining characters */
    return source;
}
コード例 #3
0
ファイル: parse_script_attr.c プロジェクト: vocho/openqnx
void parse_script_attr(int tokenc, char *tokenv[], struct attr_script_entry *attrp) {
	int		 i;
	int		ival;
	char	*sval;

	for(i = 0 ; i < tokenc ; ++i) {
		switch(decode_attr(1, attr_table, tokenv[i], &ival, &sval)) {
		case ATTR_ARGV0:
			attrp->argv0 = strdup(sval);
			break;
		case ATTR_CPU:
			if(*sval == '*') {
				attrp->flags &= ~SCRIPT_FLAGS_CPU_SET;
			} else {
				attrp->flags |= SCRIPT_FLAGS_CPU_SET;
				attrp->cpu = ival;
			}
			break;
		case ATTR_DEBUG:
			if(ival) {
				attrp->flags |= SCRIPT_FLAGS_KDEBUG;
			} else {
				attrp->flags &= ~SCRIPT_FLAGS_KDEBUG;
			}
			break;
		case ATTR_EXTERNAL:
			attrp->external = ival;
			break;
		case ATTR_PRI:
			attrp->policy = SCRIPT_POLICY_NOCHANGE;
			if(*sval == '*') {
				attrp->flags &= ~SCRIPT_FLAGS_SCHED_SET;
			} else {
				attrp->flags |= SCRIPT_FLAGS_SCHED_SET;
				attrp->priority = ival;
				switch(sval[strcspn(sval, "fFrRoO")]) {
				case 'f':
				case 'F':
					attrp->policy = SCRIPT_POLICY_FIFO;
					break;
				case 'r':
				case 'R':
					attrp->policy = SCRIPT_POLICY_RR;
					break;
				case 'o':
				case 'O':
					attrp->policy = SCRIPT_POLICY_OTHER;
					break;
				}
			}
			break;
		case ATTR_SESSION:
			if(ival) {
				attrp->flags |= SCRIPT_FLAGS_SESSION;
			} else {
				attrp->flags &= ~SCRIPT_FLAGS_SESSION;
			}
			break;
		case ATTR_EXTSCHED_APS:
			ext_sched = SCRIPT_SCHED_EXT_APS;
			if((ival = aps_lookup(sval)) != -1) {
				attrp->flags |= SCRIPT_FLAGS_EXTSCHED;
				attrp->extsched.aps.id = ival;
			} else {
				attrp->flags &= ~SCRIPT_FLAGS_EXTSCHED;
				memset(&attrp->extsched, 0, sizeof(attrp->extsched));
			}
			break;
		}
	}
}
コード例 #4
0
ファイル: lib_screen.c プロジェクト: kleopatra999/ncurses-1
static int
read_win(WINDOW *win, FILE *fp)
{
    int code = ERR;
    char *txt;
    char *name;
    char *value;
    size_t n;
    int color;
#if NCURSES_WIDECHAR
    NCURSES_CH_T prior;
#endif
    chtype prior2;

    memset(win, 0, sizeof(WINDOW));
    for (;;) {
	txt = read_txt(fp);
	if (txt == 0)
	    break;
	if (!strcmp(txt, "rows:")) {
	    free(txt);
	    code = OK;
	    break;
	}
	if ((value = strchr(txt, '=')) == 0) {
	    free(txt);
	    continue;
	}
	*value++ = '\0';
	name = !strcmp(txt, "flag") ? value : txt;
	for (n = 0; n < SIZEOF(scr_params); ++n) {
	    if (!strcmp(name, scr_params[n].name)) {
		void *data = (void *) ((char *) win + scr_params[n].offset);

		switch (scr_params[n].type) {
		case pATTR:
		    (void) decode_attr(value, data, &color);
		    break;
		case pBOOL:
		    *(bool *) data = TRUE;
		    break;
		case pCHAR:
		    prior2 = ' ';
		    decode_chtype(value, prior2, data);
		    break;
		case pINT:
		    *(int *) data = atoi(value);
		    break;
		case pSHORT:
		    *(short *) data = (short) atoi(value);
		    break;
		case pSIZE:
		    *(NCURSES_SIZE_T *) data = (NCURSES_SIZE_T) atoi(value);
		    break;
#if NCURSES_WIDECHAR
		case pCCHAR:
		    prior = blank;
		    decode_cchar(value, &prior, data);
		    break;
#endif
		}
		break;
	    }
	}
	free(txt);
    }
    return code;
}
コード例 #5
0
ファイル: codec.c プロジェクト: tidatida/alarmd
void
decode_event(DBusMessageIter *iter, int *err, alarm_event_t *eve)
{
  size_t action_cnt     = 0;
  size_t recurrence_cnt = 0;

  alarm_event_del_actions(eve);
  alarm_event_del_recurrences(eve);

  decode_cookie   (iter, err, &eve->ALARMD_PRIVATE(cookie));
  decode_time     (iter, err, &eve->ALARMD_PRIVATE(trigger));
  decode_dstring  (iter, err, &eve->title);
  decode_dstring  (iter, err, &eve->message);
  decode_dstring  (iter, err, &eve->sound);
  decode_dstring  (iter, err, &eve->icon);
  decode_unsigned (iter, err, &eve->flags);
  decode_dstring  (iter, err, &eve->alarm_appid);
  decode_time     (iter, err, &eve->alarm_time);
  decode_tm       (iter, err, &eve->alarm_tm);
  decode_dstring  (iter, err, &eve->alarm_tz);
  decode_time     (iter, err, &eve->recur_secs);
  decode_int      (iter, err, &eve->recur_count);
  decode_time     (iter, err, &eve->snooze_secs);
  decode_time     (iter, err, &eve->snooze_total);

  decode_size     (iter, err, &action_cnt);
  decode_int      (iter, err, &eve->response);

  /* - - - - - - - - - - - - - - - - - - - *
   * action table
   * - - - - - - - - - - - - - - - - - - - */

  alarm_action_t *act = alarm_event_add_actions(eve, action_cnt);
  for( size_t i = 0; i < action_cnt; ++i )
  {
    decode_action(iter, err, &act[i]);
  }

  /* - - - - - - - - - - - - - - - - - - - *
   * recurrence table
   * - - - - - - - - - - - - - - - - - - - */

  decode_size     (iter, err, &recurrence_cnt);
  alarm_recur_t *rec = alarm_event_add_recurrences(eve, recurrence_cnt);
  for( size_t i = 0; i < recurrence_cnt; ++i )
  {
    decode_recur(iter, err, &rec[i]);
  }
  /* - - - - - - - - - - - - - - - - - - - *
   * attribute table sent by libalarm >= 1.0.4
   * - - - - - - - - - - - - - - - - - - - */

  if( !decode_eom_p(iter, err) )
  {
    size_t count = 0;
    decode_size     (iter, err, &count);
    for( size_t i = 0; i < count; ++i )
    {
      alarm_attr_t *att = alarm_event_add_attr(eve, "\x7f");
      decode_attr(iter, err, att);
    }
  }
}