xref: /inferno-os/appl/lib/libc0.b (revision 2249108ae3e3c5d02e45007e195672e350517856)
137da2899SCharles.Forsythimplement Libc0;
237da2899SCharles.Forsyth
337da2899SCharles.Forsythinclude "libc0.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.Forsythstrlen(s: array of byte): int
9537da2899SCharles.Forsyth{
9637da2899SCharles.Forsyth	l := len s;
9737da2899SCharles.Forsyth	for(i := 0; i < l; i++)
9837da2899SCharles.Forsyth		if(s[i] == byte 0)
9937da2899SCharles.Forsyth			break;
10037da2899SCharles.Forsyth	return i;
10137da2899SCharles.Forsyth}
10237da2899SCharles.Forsyth
10337da2899SCharles.Forsythstrcpy(s1: array of byte, s2: array of byte): array of byte
10437da2899SCharles.Forsyth{
10537da2899SCharles.Forsyth	l := strlen(s2)+1;
10637da2899SCharles.Forsyth	if(l == len s2)
10737da2899SCharles.Forsyth		s1[0: ] = s2;
10837da2899SCharles.Forsyth	else
10937da2899SCharles.Forsyth		s1[0: ] = s2[0: l];
11037da2899SCharles.Forsyth	return s1;
11137da2899SCharles.Forsyth}
11237da2899SCharles.Forsyth
11337da2899SCharles.Forsythstrncpy(s1: array of byte, s2: array of byte, n: int): array of byte
11437da2899SCharles.Forsyth{
11537da2899SCharles.Forsyth	l := strlen(s2);
11637da2899SCharles.Forsyth	if(l >= n)
11737da2899SCharles.Forsyth		s1[0: ] = s2[0: n];
11837da2899SCharles.Forsyth	else{
11937da2899SCharles.Forsyth		s1[0: ] = s2;
12037da2899SCharles.Forsyth		for(i := l; i < n; i++)
12137da2899SCharles.Forsyth			s1[i] = byte '\0';
12237da2899SCharles.Forsyth	}
12337da2899SCharles.Forsyth	return s1;
12437da2899SCharles.Forsyth}
12537da2899SCharles.Forsyth
12637da2899SCharles.Forsythstrcat(s1: array of byte, s2: array of byte): array of byte
12737da2899SCharles.Forsyth{
12837da2899SCharles.Forsyth	l := strlen(s2)+1;
12937da2899SCharles.Forsyth	m := strlen(s1);
13037da2899SCharles.Forsyth	if(l == len s2)
13137da2899SCharles.Forsyth		s1[m: ] = s2;
13237da2899SCharles.Forsyth	else
13337da2899SCharles.Forsyth		s1[m: ] = s2[0: l];
13437da2899SCharles.Forsyth	return s1;
13537da2899SCharles.Forsyth}
13637da2899SCharles.Forsyth
13737da2899SCharles.Forsythstrncat(s1: array of byte, s2: array of byte, n: int): array of byte
13837da2899SCharles.Forsyth{
13937da2899SCharles.Forsyth	l := strlen(s2);
14037da2899SCharles.Forsyth	if(l >= n){
14137da2899SCharles.Forsyth		m := strlen(s1);
14237da2899SCharles.Forsyth		s1[m: ] = s2[0: n];
14337da2899SCharles.Forsyth		s1[m+n] = byte '\0';
14437da2899SCharles.Forsyth	}
14537da2899SCharles.Forsyth	else
14637da2899SCharles.Forsyth		strcat(s1, s2);
14737da2899SCharles.Forsyth	return s1;
14837da2899SCharles.Forsyth}
14937da2899SCharles.Forsyth
15037da2899SCharles.Forsythstrdup(s: array of byte): array of byte
15137da2899SCharles.Forsyth{
15237da2899SCharles.Forsyth	l := strlen(s)+1;
15337da2899SCharles.Forsyth	t := array[l] of byte;
15437da2899SCharles.Forsyth	if(l == len s)
15537da2899SCharles.Forsyth		t[0: ] = s;
15637da2899SCharles.Forsyth	else
15737da2899SCharles.Forsyth		t[0: ] = s[0: l];
15837da2899SCharles.Forsyth	return t;
15937da2899SCharles.Forsyth}
16037da2899SCharles.Forsyth
16137da2899SCharles.Forsythstrcmp(s1: array of byte, s2: array of byte): int
16237da2899SCharles.Forsyth{
16337da2899SCharles.Forsyth	l1 := strlen(s1);
16437da2899SCharles.Forsyth	l2 := strlen(s2);
16537da2899SCharles.Forsyth	for(i := 0; i < l1 && i < l2; i++)
16637da2899SCharles.Forsyth		if(s1[i] != s2[i])
16737da2899SCharles.Forsyth			return int s1[i]-int s2[i];
16837da2899SCharles.Forsyth	return l1-l2;
16937da2899SCharles.Forsyth}
17037da2899SCharles.Forsyth
17137da2899SCharles.Forsythstrncmp(s1: array of byte, s2: array of byte, n: int): int
17237da2899SCharles.Forsyth{
173*2249108aSCharles.Forsyth	i1 := i2 := 0;
174*2249108aSCharles.Forsyth	while(n > 0){
175*2249108aSCharles.Forsyth		c1 := int s1[i1++];
176*2249108aSCharles.Forsyth		c2 := int s2[i2++];
177*2249108aSCharles.Forsyth		n--;
178*2249108aSCharles.Forsyth		if(c1 != c2){
179*2249108aSCharles.Forsyth			if(c1 > c2)
180*2249108aSCharles.Forsyth				return 1;
181*2249108aSCharles.Forsyth			return -1;
182*2249108aSCharles.Forsyth		}
183*2249108aSCharles.Forsyth		if(c1 == 0)
184*2249108aSCharles.Forsyth			break;
185*2249108aSCharles.Forsyth	}
186*2249108aSCharles.Forsyth	return 0;
18737da2899SCharles.Forsyth}
18837da2899SCharles.Forsyth
18937da2899SCharles.Forsythstrchr(s: array of byte, n: int): array of byte
19037da2899SCharles.Forsyth{
19137da2899SCharles.Forsyth	l := strlen(s);
19237da2899SCharles.Forsyth	for(i := 0; i < l; i++)
19337da2899SCharles.Forsyth		if(s[i] == byte n)
19437da2899SCharles.Forsyth			return s[i: ];
19537da2899SCharles.Forsyth	return nil;
19637da2899SCharles.Forsyth}
19737da2899SCharles.Forsyth
19837da2899SCharles.Forsythstrrchr(s: array of byte, n: int): array of byte
19937da2899SCharles.Forsyth{
20037da2899SCharles.Forsyth	l := strlen(s);
20137da2899SCharles.Forsyth	for(i := l-1; i >= 0; i--)
20237da2899SCharles.Forsyth		if(s[i] == byte n)
20337da2899SCharles.Forsyth			return s[i: ];
20437da2899SCharles.Forsyth	return nil;
20537da2899SCharles.Forsyth}
20637da2899SCharles.Forsyth
20737da2899SCharles.Forsythls2aab(argl: list of string): array of array of byte
20837da2899SCharles.Forsyth{
20937da2899SCharles.Forsyth	l := len argl;
21037da2899SCharles.Forsyth	ls := argl;
21137da2899SCharles.Forsyth	a := array[l+1] of array of byte;
21237da2899SCharles.Forsyth	for(i := 0; i < l; i++){
21337da2899SCharles.Forsyth		a[i] = array of byte (hd ls + "\0");
21437da2899SCharles.Forsyth		ls = tl ls;
21537da2899SCharles.Forsyth	}
21637da2899SCharles.Forsyth	a[l] = nil;
21737da2899SCharles.Forsyth	return a;
21837da2899SCharles.Forsyth}
21937da2899SCharles.Forsyth
22037da2899SCharles.Forsyths2ab(s: string): array of byte
22137da2899SCharles.Forsyth{
22237da2899SCharles.Forsyth	return array of byte (s + "\0");
22337da2899SCharles.Forsyth}
22437da2899SCharles.Forsyth
22537da2899SCharles.Forsythab2s(a: array of byte): string
22637da2899SCharles.Forsyth{
22737da2899SCharles.Forsyth	return string a[0: strlen(a)];
22837da2899SCharles.Forsyth}
22937da2899SCharles.Forsyth
23037da2899SCharles.Forsythabs(n: int): int
23137da2899SCharles.Forsyth{
23237da2899SCharles.Forsyth	if(n < 0)
23337da2899SCharles.Forsyth		return -n;
23437da2899SCharles.Forsyth	return n;
23537da2899SCharles.Forsyth}
23637da2899SCharles.Forsyth
23737da2899SCharles.Forsythmin(m: int, n: int): int
23837da2899SCharles.Forsyth{
23937da2899SCharles.Forsyth	if(m < n)
24037da2899SCharles.Forsyth		return m;
24137da2899SCharles.Forsyth	return n;
24237da2899SCharles.Forsyth}
24337da2899SCharles.Forsyth
24437da2899SCharles.Forsythmax(m: int, n: int): int
24537da2899SCharles.Forsyth{
24637da2899SCharles.Forsyth	if(m > n)
24737da2899SCharles.Forsyth		return m;
24837da2899SCharles.Forsyth	return n;
24937da2899SCharles.Forsyth}
250