1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
(* ****** ****** *)
//
// Author: Hongwei Xi
// Start time: May, 2017
// Authoremail: gmhwxiATgmailDOTcom
//
(* ****** ****** *)
(*
** For implementing
** a DSL that supports
** ATS and OpenSCAD co-programming
*)
(* ****** ****** *)
//
typedef
charptr =
$extype"atstype_string"
//
(* ****** ****** *)
#staload
UN = "prelude/SATS/unsafe.sats"
(* ****** ****** *)
//
#staload "./../SATS/OpenSCAD.sats"
//
(* ****** ****** *)
//
implement
fprint_scadarg
(out, arg) =
(
case+ arg of
| SCADARGexp(x) =>
(
fprint(out, x)
)
| SCADARGlabexp(l, x) =>
(
fprint!(out, l, "=", x)
)
)
//
(* ****** ****** *)
implement
fprint_scadexp
(out, exp) =
(
case+ exp of
| SCADEXPnil() =>
(
fprint!(out, "SCADEXPnil()")
)
//
| SCADEXPint(i) =>
(
fprint!(out, "SCADEXPint(", i, ")")
)
//
| SCADEXPbool(b) =>
(
fprint!(out, "SCADEXPbool(", b, ")")
)
//
| SCADEXPfloat
(
f0
) => $extfcall
(
void
, "fprintf", out, "SCADEXPfloat(%.2f)", f0
) (* $extfcall *)
//
| SCADEXPstring
(
s0
) => $extfcall
(
void
, "fprintf", out
, "SCADEXPstr(\"%s\")", $UN.cast{charptr}(s0)
) (* $extfcall *)
//
| SCADEXPvec(xs) =>
(
fprint!(out, "SCADEXPvec(", xs, ")")
)
//
| SCADEXPcond(x0, x1, x2) =>
(
fprint!
( out
, "SCADEXPcond(", x0, "; ", x1, "; ", x2, ")"
) (* fprint! *)
)
//
| SCADEXPextfcall
(fnm, env, args) =>
(
fprint!(out, fnm, "(", args, "; ", env, ")")
)
) (* end of [fprint_scadexp] *)
(* ****** ****** *)
(* end of [OpenSCAD_print.dats] *)
|