nx_vessel_emit_gcode.nx source
↩ module page · 50 lines · 1533 B
1// nx_vessel_emit_gcode.nx -- emit a print-ready G-code file for a real
2// fermenter vessel (50 mm radius, 3 mm wall, 80 mm tall, 4 mm base) via the
3// sovereign slicer. Writes web_assets/fermenter_vessel.gcode. Run directly.
4
5import "nx_syscalls.nx"
6import "nx_gcode_emit.nx"
7import "nx_vessel_gcode.nx"
8
9func ep_puts(s: *u8) -> i64 {
10 var n: i64 = 0
11 while s[n] != (0 as u8) { n = n + 1 }
12 sys_write(1, s, n)
13 return 0
14}
15
16func ep_putn(v: i64) -> i64 {
17 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
18 var m: i64 = v
19 let d: *u8 = (sys_mmap(24)) as *u8
20 var k: i64 = 0
21 while m > 0 {
22 d[k] = (48 + (m % 10)) as u8
23 m = m / 10
24 k = k + 1
25 }
26 var i: i64 = k - 1
27 while i >= 0 {
28 let o: *u8 = (sys_mmap(1)) as *u8
29 o[0] = d[i]
30 sys_write(1, o, 1)
31 i = i - 1
32 }
33 return 0
34}
35
36func main() -> i64 {
37 // 50 mm radius, 3 mm wall, 80 mm tall, 4 mm base; res 32; 0.3 mm layers;
38 // 0.4 mm lines; 15% infill; 16 MB G-code buffer
39 let e: *NxGcodeEmitter = nx_vessel_to_gcode(40, 3, 60, 4, 32, 4915, 6554, 15, 16777216)
40 if (e as i64) == 0 { ep_puts("NULL_EMITTER\n" as *u8); return 2 }
41 ep_puts("GCODE_BYTES=" as *u8)
42 ep_putn(e.len)
43 ep_puts("\n" as *u8)
44 let fd: i64 = sys_openat_wr("web_assets/fermenter_vessel.gcode" as *u8, 0x1a4)
45 if fd < 0 { ep_puts("OPEN_FAIL\n" as *u8); return 1 }
46 sys_write(fd, e.buf, e.len)
47 sys_close(fd)
48 ep_puts("WROTE web_assets/fermenter_vessel.gcode\n" as *u8)
49 return 0
50}