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; }
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; }
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; } } }
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; }
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); } } }