ref: 90115699edf954c715cf319a374cffd3208248ce
parent: fdaa107e288c8aebc6ff8d69bb9a83cdb6b64fc8
author: Ori Bernstein <[email protected]>
date: Mon Aug 6 21:35:11 EDT 2012
Add variadic api.
--- a/fmt.myr
+++ b/fmt.myr
@@ -5,6 +5,7 @@
pkg std =
const bfmt : (buf : byte[,], fmt : byte[,], args:... -> size)
+ const bfmtv : (buf : byte[,], fmt : byte[,], ap:byte* -> size)
const put : (fmt : byte[,], args:... -> size)
;;
@@ -12,20 +13,22 @@
var buf : byte[2048]
var n
- n = bfmt(buf[0,2048], fmt, args)
+ n = bfmtv(buf[0,2048], fmt, &args castto(byte*))
write(1, buf[0,n])
-> n
}
const bfmt = {buf, fmt, args
+ -> bfmtv(buf, fmt, &args castto(byte*))
+}
+
+const bfmtv = {buf, fmt, ap
var c
var n
- var ap
var i_val;
var s_val;
n = 0
- ap = &args castto(byte*)
while fmt.len
(c, fmt) = striter(fmt)
if c == '%'
@@ -44,7 +47,6 @@
n += intfmt(buf[n, buf.len], i_val, 10)
ap = add(ap, sizeof(int8))
;;
- /*
'w':
ap = align(ap, sizeof(int16));
i_val = *(ap castto(int16*)) castto(int64)
@@ -51,7 +53,6 @@
n += intfmt(buf[n, buf.len], i_val, 10)
ap = add(ap, sizeof(int16))
;;
- */
'i':
ap = align(ap, sizeof(int32));
i_val = *(ap castto(int32*)) castto(int64)