class Foo {
	public unowned string s = "";
}

public int main () {
	var s = "Hello, world!";

	var foo = new Foo ();

	foo.s = s;

	//string tmps = s[0:5];
	unowned string tmps = (string)((char*)s + 3);

	((char *)s)[3] = 'A';

	stdout.printf ("%s\n", s);
	stdout.printf ("%s\n", foo.s);

	stdout.printf ("%s\n", tmps);

	stdout.printf ("%s\n", tmps[0:1]);
	stdout.printf ("%s\n", tmps.ndup (1));
	stdout.printf ("%s\n", tmps.substring (2, 3));
	stdout.printf ("%s\n", tmps[2:3]);
	stdout.printf ("%s\n", tmps.chr (100, 'o'));
	//stdout.printf ("%s\n", Posix.strchr (tmps, 'o'));

	print ("----\n");
	stdout.printf ("%s\n", tmps);
	stdout.printf ("%s\n", tmps.offset (3)[0:-1]);

	for (var i = 0, max_i = tmps.length; i < max_i; ++i)
		stdout.printf ("%c", tmps[i]);
	stdout.printf ("\n");

	stdout.printf ("%p = '%s'[%u]\n", tmps.offset (100), tmps.offset (100), tmps.offset (100).length);

	return 0;
}
