summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c67
1 files changed, 65 insertions, 2 deletions
diff --git a/lib.c b/lib.c
index 672efa4a..82ab73a1 100644
--- a/lib.c
+++ b/lib.c
@@ -794,9 +794,12 @@ val num(cnum n)
cnum c_num(val num)
{
- if (!is_num(num))
+ switch (tag(num)) {
+ case TAG_CHR: case TAG_NUM:
+ return ((cnum) num) >> TAG_SHIFT;
+ default:
type_mismatch(lit("~s is not a number"), num, nao);
- return ((cnum) num) >> TAG_SHIFT;
+ }
}
val nump(val num)
@@ -1465,6 +1468,66 @@ wchar_t c_chr(val chr)
return (wchar_t) ((cnum) chr >> TAG_SHIFT);
}
+val chr_isalnum(val ch)
+{
+ return c_true(iswalnum(c_chr(ch)));
+}
+
+val chr_isalpha(val ch)
+{
+ return c_true(iswalpha(c_chr(ch)));
+}
+
+val chr_isascii(val ch)
+{
+ return c_true(c_chr(ch) >= 0 && c_chr(ch) < 128);
+}
+
+val chr_iscntrl(val ch)
+{
+ return c_true(iswcntrl(c_chr(ch)));
+}
+
+val chr_isdigit(val ch)
+{
+ return c_true(iswdigit(c_chr(ch)));
+}
+
+val chr_isgraph(val ch)
+{
+ return c_true(iswgraph(c_chr(ch)));
+}
+
+val chr_islower(val ch)
+{
+ return c_true(iswlower(c_chr(ch)));
+}
+
+val chr_isprint(val ch)
+{
+ return c_true(iswprint(c_chr(ch)));
+}
+
+val chr_ispunct(val ch)
+{
+ return c_true(iswpunct(c_chr(ch)));
+}
+
+val chr_isspace(val ch)
+{
+ return c_true(iswspace(c_chr(ch)));
+}
+
+val chr_isupper(val ch)
+{
+ return c_true(iswupper(c_chr(ch)));
+}
+
+val chr_isxdigit(val ch)
+{
+ return c_true(iswxdigit(c_chr(ch)));
+}
+
val chr_str(val str, val index)
{
bug_unless (length_str_gt(str, index));