spwn 0.0.6

A language for Geometry Dash triggers
Documentation
#[no_std, cache_output]
// brought to you by camden314

type @file

impl @file {
	new: #[desc("Creates a new file IO object") example("@file::new('C:/path/to/file.txt')")](path: @string) {
		let ret = {type: @file};

		ret.filedata = $.readfile(path);
		ret.size = ret.filedata.length;
		let ret.fseek = 0;
		return ret;
	},
	seek: #[desc("Sets a position in the file to read from") example("
f = @file::new('data.txt')
f.seek(10)
data = f.read(5) // reads characters 10 to 15
	")] (self, s: @number) {
		if s < 0 {
			throw "Negative seek position " + s as @string;
		}
		self.fseek = s;
	},
	read: #[desc("Reads the data in the file from the seek position to the end (or for a specified amount of characters)") example("
data = @file::new('data.txt').read()
	")](self, s=-1) {
		let size = s
		if s == -1 {
			size = self.size;
		}
		if self.fseek >= self.size {
			return "";
		} else {
			oldseek = self.fseek;
			self.fseek += size;
			return $.substr(self.filedata, oldseek, [self.fseek, self.size].min());
		}
	}
}