40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
import tempfile
|
|
import gcode
|
|
import sys
|
|
|
|
def float_fmt(f):
|
|
if isinstance(f, float): return "% 5.1g" % f
|
|
return "%5s" % f
|
|
|
|
class Canon:
|
|
# Stay on the per-event canon protocol; the catch-all __getattr__ below
|
|
# would otherwise answer gcode.parse's move-batch probe with a callable.
|
|
use_move_batches = False
|
|
|
|
def __getattr__(self, attr):
|
|
"""Assume that any unknown attribute is a canon call; just print
|
|
its args and return None"""
|
|
|
|
def inner(*args):
|
|
args = list(map(float_fmt, args))
|
|
print("%-17s %s" % (attr, " ".join(args)))
|
|
return inner
|
|
|
|
# this is just noisy
|
|
def next_line(self, linecode): pass
|
|
|
|
# These can't just return None...
|
|
def get_external_length_units(self): return 1.0
|
|
def get_external_angular_units(self): return 1.0
|
|
def get_axis_mask(self): return 7 # (x y z)
|
|
def get_block_delete(self): return False
|
|
def get_tool(self, pocket):
|
|
return -1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0
|
|
|
|
parameter = tempfile.NamedTemporaryFile()
|
|
canon = Canon()
|
|
canon.parameter_file = parameter.name
|
|
result, seq = gcode.parse(sys.argv[1], canon, '', '', '')
|
|
if result > gcode.MIN_ERROR: raise SystemExit(gcode.strerror(result))
|