Plan 9 from Bell Labs’s /usr/web/sources/contrib/maht/inferno/module/bytelib.m

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.



bytes_to_int(b : array of byte) : (int, int)
{
	neg, i : int;

	if(len b > 4) return (1, 0);

	if(int (b[0] & byte 2r10000000) > 0) {
		neg = -1;
		i = 1;
	} else {
		neg = 1;
		i = 0;
	}
	shift := 0;

	for(k := len(b) -1; k >= 0; k--) {
		if(neg == -1)
			i += (int ~b[k]) << shift;
		else
			i += (int b[k]) << shift;
		shift += 8;
	}

	return (0, i * neg);
}
bytes_to_big(b : array of byte) : (int, big)
{
	i : big;
	neg : int;

	if(len b > 8) return (1, big 0);

	if(int (b[0] & byte 2r10000000) > 0) {
		neg = -1;
		i = big 1;
	} else {
		neg = 1;
		i = big 0;
	}
	shift := 0;

	for(k := len(b) -1; k >= 0; k--) {
		if(neg == -1)
			i += (big ~b[k]) << shift;
		else
			i += (big b[k]) << shift;
		shift += 8;
	}

	return (0, i * big neg);
}
big_to_bytes(i : big, length : int) : array of byte
{
	b := array[length] of byte;
	shift := 0;
	j : big;
	if(i < big 0)
		j = -i;
	else
		j = i;

	for(k := length-1; k >= 0; k--) {
		b[k] = byte (j >> shift);
		if(i < big 0) {
			b[k] = ~b[k];
		}
		shift += 8;
	}
	if(i < big 0)
		b[length -1]++;

	return b;
}


int_to_bytes(i, length : int) : array of byte
{
	b := array[length] of byte;
	shift := 0;
	j : int;
	if(i < 0)
		j = -i;
	else
		j = i;

	for(k := length-1; k >= 0; k--) {
		b[k] = byte ((j >> shift) & 16rFF);
		if(i < 0) {
			b[k] = ~b[k];
		}
		shift += 8;
	}
	if(i < 0)
		b[length -1]++;

	return b;
}

int32_read(io : ref Iobuf) : int
{
	bytes := array[4] of byte;
	io.read(bytes, 4);
	(nil, value) := bytes_to_int(bytes);
	return value;
}

int32_write(io : ref Iobuf, n : int) : int
{
	bytes := int_to_bytes(n, 4);
	return io.write(bytes, 4);
}

int16_read(io : ref Iobuf) : int
{
	bytes := array[2] of byte;
	io.read(bytes, 2);
	(nil, value) := bytes_to_int(bytes);
	return value;
}

int16_write(io : ref Iobuf, n : int) : int
{
	bytes := int_to_bytes(n, 2);
	return io.write(bytes, 2);
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.