ASCII art diagram converter: Difference between revisions

Content added Content deleted
Line 537: Line 537:


=={{header|Julia}}==
=={{header|Julia}}==
The validator() function can be customized. The one used only checks length.
<lang julia>diagram = """
<lang julia>diagram = """
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Line 582: Line 583:
binbyte(c) = string(parse(UInt8, c, base=16), base=2, pad=8)
binbyte(c) = string(parse(UInt8, c, base=16), base=2, pad=8)
hextobinary(s) = reduce(*, map(binbyte, map(x -> s[x:x+1], 1:2:length(s)-1)))
hextobinary(s) = reduce(*, map(binbyte, map(x -> s[x:x+1], 1:2:length(s)-1)))
validator(binstring, fields) = length(binstring) == sum(x -> x.bits, fields)


function bitreader(bitfields, hexdata)
function bitreader(bitfields, hexdata)
Line 587: Line 589:
println("Name Size Bits\n------- ---- ----------------")
println("Name Size Bits\n------- ---- ----------------")
b = hextobinary(hexdata)
b = hextobinary(hexdata)
@assert(validator(b, bitfields))
for bf in bitfields
for bf in bitfields
pat = b[bf.fieldstart+1:bf.fieldend+1]
pat = b[bf.fieldstart+1:bf.fieldend+1]