diff options
| author | ubq323 <ubq323@ubq323.website> | 2024-03-28 18:50:23 +0000 | 
|---|---|---|
| committer | ubq323 <ubq323@ubq323.website> | 2024-03-28 18:50:23 +0000 | 
| commit | 1762e9f622c7a9045e6ea23a92a81d7dfa5dadda (patch) | |
| tree | 78df664636234ccdd8de761bdda65339ed22d441 | |
| parent | 52557c8a1c78ee02bd0eda1c740a37f8d6759b0c (diff) | |
reörganize
| -rw-r--r-- | client/drawing.ha (renamed from drawing.ha) | 20 | ||||
| -rw-r--r-- | client/main.ha (renamed from main.ha) | 1 | ||||
| -rw-r--r-- | server/main.ha | 43 | 
3 files changed, 53 insertions, 11 deletions
| diff --git a/drawing.ha b/client/drawing.ha index 5812109..e164d33 100644 --- a/drawing.ha +++ b/client/drawing.ha @@ -2,16 +2,16 @@ use sdl2;  use fmt;  // 2d position, x and y -type pos = (i32, i32); +export type pos = (i32, i32); -type drawing_state = struct { +export type drawing_state = struct {  	// is the mouse button held down?  	drawing: bool,  	pos: pos,  	pictures: []picture,  }; -type picture = struct { +export type picture = struct {  	// the surface data as u32s  	d: *[*]u32,  	w: size, @@ -27,7 +27,7 @@ type picture = struct {  // Returns array index of the pixel at position pos.  // Bounds check happens in here instead of using a slice type, so  // that it's easier to remove later. -fn pidx(pic: *picture, pos: pos) size = { +export fn pidx(pic: *picture, pos: pos) size = {  	const (x,y) = pos;  	const (xs,ys) = (x:size, y:size);  	assert(0 <= x, "x position must not be less than 0"); @@ -38,10 +38,10 @@ fn pidx(pic: *picture, pos: pos) size = {  	return xs + pic.w*ys;  }; -fn pic_set(pic: *picture, pos: pos, val: u32) void = +export fn pic_set(pic: *picture, pos: pos, val: u32) void =  	pic.d[pidx(pic,pos)] = val; -fn picture_from_surface(surf: *sdl2::SDL_Surface, pos: pos) picture = picture { +export fn picture_from_surface(surf: *sdl2::SDL_Surface, pos: pos) picture = picture {  	w = surf.w: size,  	h = surf.h: size,  	d = (surf.pixels as *opaque: *[*]u32), @@ -49,11 +49,11 @@ fn picture_from_surface(surf: *sdl2::SDL_Surface, pos: pos) picture = picture {  	pos = pos,  }; -fn clear_picture(pic: *picture, color: u32) void = { +export fn clear_picture(pic: *picture, color: u32) void = {  	for (let i = 0z; i < pic.w*pic.h; i+=1) pic.d[i] = color;  }; -fn outline_picture(pic: *picture) void = { +export fn outline_picture(pic: *picture) void = {  	for (let x = 0; x:size < pic.w; x+=1) {  		pic_set(pic, (x, 0), 0);  		pic_set(pic, (x, pic.h:int-1), 0); @@ -69,7 +69,7 @@ fn max(a: i32, b: i32) i32 = if (a<b) b else a;  // Draws a circle onto the picture, at given position radius color  // Clips at the boundaries of the picture to avoid overflow. -fn circle(picture: *picture, c: pos, r: i32, color: u32) void = { +export fn circle(picture: *picture, c: pos, r: i32, color: u32) void = {  	// fmt::printfln("C {} {} {} {:x}",c.0,c.1,r,color)!;  	const (cx,cy) = c;  	const ymin = max(0, cy-r); @@ -90,7 +90,7 @@ fn circle(picture: *picture, c: pos, r: i32, color: u32) void = {  	};  }; -fn do_drawing(dstate: *drawing_state) void = { +export fn do_drawing(dstate: *drawing_state) void = {  	if (dstate.drawing) for (let i = 0z; i < 4; i+=1) {  		const pic = &dstate.pictures[i];  		const p = (dstate.pos.0 - pic.pos.0, dstate.pos.1 - pic.pos.1); @@ -36,7 +36,6 @@ export fn main() void = {  	for (let i = 0z; i < 4; i += 1) {  		const p = &dstate.pictures[i];  		clear_picture(p, 0xffffff); -		outline_picture(p);  	};  	let quit = false; diff --git a/server/main.ha b/server/main.ha new file mode 100644 index 0000000..43bdf34 --- /dev/null +++ b/server/main.ha @@ -0,0 +1,43 @@ +use fmt; +use os; +use io; +use fs; +use errors; +use drawing::{pos}; + +// type chunk = struct { +// 	fd: io::file, +// 	d: []u32, +// }; + +// def CHUNKSIZE: size = 512; +// def CHUNK_LENGTH: size = CHUNKSIZE*CHUNKSIZE*size(u32); + +// fn open_chunk_file(chunkpos: pos) (chunk | fs::error) = { +// 	const path = fmt::asprintf("c.{}.{}.dat", chunkpos.0, chunkpos.1); +// 	defer free(path); +// 	const fd = fs::create_file(os::cwd, path, +// 		fs::mode::USER_RW | fs::mode::GROUP_RW, +// 		fs::flag::RDWR)?; +// 	io::trunc(fd, CHUNK_LENGTH)?; +// 	const dp = io::mmap(null, CHUNK_LENGTH, +// 		io::prot::READ | io::prot::WRITE, +// 		io::mflag::SHARED, +// 		fd, 0)?; +// 	const d = (dp: *[*]u32)[..CHUNKSIZE*CHUNKSIZE]; +// 	return chunk { fd = fd, d = d }; +// }; + +export fn main() void = { +	// match (open_chunk_file((-3,12))) { +	// case let e: fs::error => +	// 	fmt::fatal(fs::strerror(e)); +	// case let ch: chunk => +	// 	ch.d[0] = 0x12345678; +	// 	ch.d[CHUNKSIZE*CHUNKSIZE - 1]=0xdeadbeef; +	// }; + +	const t = test2 { a=4, b=5 }; +	thethe(&t); + +}; | 
