xref: /inferno-os/appl/lib/libc.b (revision 2249108ae3e3c5d02e45007e195672e350517856)
137da2899SCharles.Forsythimplement Libc;
237da2899SCharles.Forsyth
337da2899SCharles.Forsythinclude "libc.m";
437da2899SCharles.Forsyth
537da2899SCharles.Forsythislx(c: int): int
637da2899SCharles.Forsyth{
737da2899SCharles.Forsyth	return c >= 'a' && c <= 'f';
837da2899SCharles.Forsyth}
937da2899SCharles.Forsyth
1037da2899SCharles.Forsythisux(c: int): int
1137da2899SCharles.Forsyth{
1237da2899SCharles.Forsyth	return c >= 'A' && c <= 'F';
1337da2899SCharles.Forsyth}
1437da2899SCharles.Forsyth
1537da2899SCharles.Forsythisalnum(c: int): int
1637da2899SCharles.Forsyth{
1737da2899SCharles.Forsyth	return isalpha(c) || isdigit(c);
1837da2899SCharles.Forsyth}
1937da2899SCharles.Forsyth
2037da2899SCharles.Forsythisalpha(c: int): int
2137da2899SCharles.Forsyth{
2237da2899SCharles.Forsyth	return islower(c) || isupper(c);
2337da2899SCharles.Forsyth}
2437da2899SCharles.Forsyth
2537da2899SCharles.Forsythisascii(c: int): int
2637da2899SCharles.Forsyth{
2737da2899SCharles.Forsyth	return (c&~16r7f) == 0;
2837da2899SCharles.Forsyth}
2937da2899SCharles.Forsyth
3037da2899SCharles.Forsythiscntrl(c: int): int
3137da2899SCharles.Forsyth{
3237da2899SCharles.Forsyth	return c == 16r7f || (c&~16r1f) == 0;
3337da2899SCharles.Forsyth}
3437da2899SCharles.Forsyth
3537da2899SCharles.Forsythisdigit(c: int): int
3637da2899SCharles.Forsyth{
3737da2899SCharles.Forsyth	return c >= '0' && c <= '9';
3837da2899SCharles.Forsyth}
3937da2899SCharles.Forsyth
4037da2899SCharles.Forsythisgraph(c: int): int
4137da2899SCharles.Forsyth{
4237da2899SCharles.Forsyth	return c >= '!' && c <= '~';
4337da2899SCharles.Forsyth}
4437da2899SCharles.Forsyth
4537da2899SCharles.Forsythislower(c: int): int
4637da2899SCharles.Forsyth{
4737da2899SCharles.Forsyth	return c >= 'a' && c <= 'z';
4837da2899SCharles.Forsyth}
4937da2899SCharles.Forsyth
5037da2899SCharles.Forsythisprint(c: int): int
5137da2899SCharles.Forsyth{
5237da2899SCharles.Forsyth	return c >= ' ' && c <= '~';
5337da2899SCharles.Forsyth}
5437da2899SCharles.Forsyth
5537da2899SCharles.Forsythispunct(c: int): int
5637da2899SCharles.Forsyth{
5737da2899SCharles.Forsyth	return isascii(c) && !iscntrl(c) && !isspace(c) && !isalnum(c);
5837da2899SCharles.Forsyth}
5937da2899SCharles.Forsyth
6037da2899SCharles.Forsythisspace(c: int): int
6137da2899SCharles.Forsyth{
6237da2899SCharles.Forsyth	return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v';
6337da2899SCharles.Forsyth}
6437da2899SCharles.Forsyth
6537da2899SCharles.Forsythisupper(c: int): int
6637da2899SCharles.Forsyth{
6737da2899SCharles.Forsyth	return c >= 'A' && c <= 'Z';
6837da2899SCharles.Forsyth}
6937da2899SCharles.Forsyth
7037da2899SCharles.Forsythisxdigit(c: int): int
7137da2899SCharles.Forsyth{
7237da2899SCharles.Forsyth	return isdigit(c) || islx(c) || isux(c);
7337da2899SCharles.Forsyth}
7437da2899SCharles.Forsyth
7537da2899SCharles.Forsythtolower(c: int): int
7637da2899SCharles.Forsyth{
7737da2899SCharles.Forsyth	if(isupper(c))
7837da2899SCharles.Forsyth		return c+'a'-'A';
7937da2899SCharles.Forsyth	return c;
8037da2899SCharles.Forsyth}
8137da2899SCharles.Forsyth
8237da2899SCharles.Forsythtoupper(c: int): int
8337da2899SCharles.Forsyth{
8437da2899SCharles.Forsyth	if(islower(c))
8537da2899SCharles.Forsyth		return c+'A'-'a';
8637da2899SCharles.Forsyth	return c;
8737da2899SCharles.Forsyth}
8837da2899SCharles.Forsyth
8937da2899SCharles.Forsythtoascii(c: int): int
9037da2899SCharles.Forsyth{
9137da2899SCharles.Forsyth	return c&16r7f;
9237da2899SCharles.Forsyth}
9337da2899SCharles.Forsyth
9437da2899SCharles.Forsythstrchr(s: string, n: int): int
9537da2899SCharles.Forsyth{
9637da2899SCharles.Forsyth	l := len s;
9737da2899SCharles.Forsyth	for(i := 0; i < l; i++)
9837da2899SCharles.Forsyth		if(s[i] == n)
9937da2899SCharles.Forsyth			return i;
10037da2899SCharles.Forsyth	return -1;
10137da2899SCharles.Forsyth}
10237da2899SCharles.Forsyth
10337da2899SCharles.Forsythstrrchr(s: string, n: int): int
10437da2899SCharles.Forsyth{
10537da2899SCharles.Forsyth	l := len s;
10637da2899SCharles.Forsyth	for(i := l-1; i >= 0; i--)
10737da2899SCharles.Forsyth		if(s[i] == n)
10837da2899SCharles.Forsyth			return i;
10937da2899SCharles.Forsyth	return -1;
11037da2899SCharles.Forsyth}
11137da2899SCharles.Forsyth
11237da2899SCharles.Forsythstrncmp(s1: string, s2: string, n: int): int
11337da2899SCharles.Forsyth{
11437da2899SCharles.Forsyth	l1 := len s1;
11537da2899SCharles.Forsyth	l2 := len s2;
116*2249108aSCharles.Forsyth	m := n;
117*2249108aSCharles.Forsyth	if(m > l1)
118*2249108aSCharles.Forsyth		m = l1;
119*2249108aSCharles.Forsyth	if(m > l2)
120*2249108aSCharles.Forsyth		m = l2;
121*2249108aSCharles.Forsyth	for(i := 0; i < m; i++)
12237da2899SCharles.Forsyth		if(s1[i] != s2[i])
123*2249108aSCharles.Forsyth			return s1[i]-s2[i];
124*2249108aSCharles.Forsyth	if(i == n)
125*2249108aSCharles.Forsyth		return 0;
12637da2899SCharles.Forsyth	return l1-l2;
12737da2899SCharles.Forsyth}
12837da2899SCharles.Forsyth
12937da2899SCharles.Forsythabs(n: int): int
13037da2899SCharles.Forsyth{
13137da2899SCharles.Forsyth	if(n < 0)
13237da2899SCharles.Forsyth		return -n;
13337da2899SCharles.Forsyth	return n;
13437da2899SCharles.Forsyth}
13537da2899SCharles.Forsyth
13637da2899SCharles.Forsythmin(m: int, n: int): int
13737da2899SCharles.Forsyth{
13837da2899SCharles.Forsyth	if(m < n)
13937da2899SCharles.Forsyth		return m;
14037da2899SCharles.Forsyth	return n;
14137da2899SCharles.Forsyth}
14237da2899SCharles.Forsyth
14337da2899SCharles.Forsythmax(m: int, n: int): int
14437da2899SCharles.Forsyth{
14537da2899SCharles.Forsyth	if(m > n)
14637da2899SCharles.Forsyth		return m;
14737da2899SCharles.Forsyth	return n;
14837da2899SCharles.Forsyth}
149