xref: /inferno-os/appl/lib/libc.b (revision 2249108ae3e3c5d02e45007e195672e350517856)
1implement Libc;
2
3include "libc.m";
4
5islx(c: int): int
6{
7	return c >= 'a' && c <= 'f';
8}
9
10isux(c: int): int
11{
12	return c >= 'A' && c <= 'F';
13}
14
15isalnum(c: int): int
16{
17	return isalpha(c) || isdigit(c);
18}
19
20isalpha(c: int): int
21{
22	return islower(c) || isupper(c);
23}
24
25isascii(c: int): int
26{
27	return (c&~16r7f) == 0;
28}
29
30iscntrl(c: int): int
31{
32	return c == 16r7f || (c&~16r1f) == 0;
33}
34
35isdigit(c: int): int
36{
37	return c >= '0' && c <= '9';
38}
39
40isgraph(c: int): int
41{
42	return c >= '!' && c <= '~';
43}
44
45islower(c: int): int
46{
47	return c >= 'a' && c <= 'z';
48}
49
50isprint(c: int): int
51{
52	return c >= ' ' && c <= '~';
53}
54
55ispunct(c: int): int
56{
57	return isascii(c) && !iscntrl(c) && !isspace(c) && !isalnum(c);
58}
59
60isspace(c: int): int
61{
62	return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v';
63}
64
65isupper(c: int): int
66{
67	return c >= 'A' && c <= 'Z';
68}
69
70isxdigit(c: int): int
71{
72	return isdigit(c) || islx(c) || isux(c);
73}
74
75tolower(c: int): int
76{
77	if(isupper(c))
78		return c+'a'-'A';
79	return c;
80}
81
82toupper(c: int): int
83{
84	if(islower(c))
85		return c+'A'-'a';
86	return c;
87}
88
89toascii(c: int): int
90{
91	return c&16r7f;
92}
93
94strchr(s: string, n: int): int
95{
96	l := len s;
97	for(i := 0; i < l; i++)
98		if(s[i] == n)
99			return i;
100	return -1;
101}
102
103strrchr(s: string, n: int): int
104{
105	l := len s;
106	for(i := l-1; i >= 0; i--)
107		if(s[i] == n)
108			return i;
109	return -1;
110}
111
112strncmp(s1: string, s2: string, n: int): int
113{
114	l1 := len s1;
115	l2 := len s2;
116	m := n;
117	if(m > l1)
118		m = l1;
119	if(m > l2)
120		m = l2;
121	for(i := 0; i < m; i++)
122		if(s1[i] != s2[i])
123			return s1[i]-s2[i];
124	if(i == n)
125		return 0;
126	return l1-l2;
127}
128
129abs(n: int): int
130{
131	if(n < 0)
132		return -n;
133	return n;
134}
135
136min(m: int, n: int): int
137{
138	if(m < n)
139		return m;
140	return n;
141}
142
143max(m: int, n: int): int
144{
145	if(m > n)
146		return m;
147	return n;
148}
149