/* places a single char in the input buffer. */ static int sf_fill_input (SCM port) { SCM p = SCM_PACK (SCM_STREAM (port)); SCM ans; scm_t_port *pt; ans = scm_call_0 (SCM_SIMPLE_VECTOR_REF (p, 3)); /* get char. */ if (scm_is_false (ans) || SCM_EOF_OBJECT_P (ans)) return EOF; SCM_ASSERT (SCM_CHARP (ans), ans, SCM_ARG1, "sf_fill_input"); pt = SCM_PTAB_ENTRY (port); if (pt->encoding == NULL) { scm_t_port *pt = SCM_PTAB_ENTRY (port); *pt->read_buf = SCM_CHAR (ans); pt->read_pos = pt->read_buf; pt->read_end = pt->read_buf + 1; return *pt->read_buf; } else scm_ungetc_unlocked (SCM_CHAR (ans), port); return SCM_CHAR (ans); }
ScmObj Scm_CharSetAdd(ScmCharSet *dst, ScmCharSet *src) { if (dst == src) return SCM_OBJ(dst); /* precaution */ ScmTreeIter iter; ScmDictEntry *e; Scm_BitsOperate(dst->small, SCM_BIT_IOR, dst->small, src->small, 0, SCM_CHAR_SET_SMALL_CHARS); Scm_TreeIterInit(&iter, &src->large, NULL); while ((e = Scm_TreeIterNext(&iter)) != NULL) { Scm_CharSetAddRange(dst, SCM_CHAR(e->key), SCM_CHAR(e->value)); } return SCM_OBJ(dst); }