10 function isPrintable(char)
15 function mkPrintable(char)
20 return "%04s".format("0x%04x".format(char.tointeger()))
25 if(this.isPrintable(char))
27 return "'%s'".format(char)
31 tmpresult = "0x%.2x".format(char.tointeger())
33 return "%04s".format(tmpresult)
37 function processFile(filename)
39 this.processHandle(io.open(filename, "r"), true)
42 function processHandle(handle, do_close=false)
46 while((c = handle.readchar()) != null)
50 if(do_close) handle.close()
51 this.processData(rawdata)
54 function processData(rawdata)
59 local strlen = rawdata.len()
61 "const char %s[%d] = {\n%s".format(this.fieldname,
64 foreach(char in rawdata)
66 char = this.mkPrintable(char)
71 this.result.push("\n%s".format(this.space))
74 this.result.push("%s".format(char))
75 if ((idx + 1) < strlen)
77 this.result.push(", ")
81 this.result.push(", ");
82 this.result.push(this.mkPrintable('\0'));
83 this.result.push("\n};")
89 foreach(itm in this.result)
96 function setSpace(instr)
101 function setFieldName(instr)
103 this.fieldname = instr
106 function constructor()
108 this.fieldname = "rawdata"
115 bin2c = BinaryToRepr()
116 if(system.argv.len() > 1)
118 fieldname = system.argv[1]
119 filename = system.argv[2]
120 bin2c.setFieldName(fieldname)
121 if(filename == "-" || filename == "/dev/stdin")
123 io.stderr.write("** reading from stdin **\n")
124 bin2c.processHandle(io.stdin)
128 bin2c.processFile(filename)
133 handle := io.open(outfile, "w")
134 handle.write(bin2c.rawData())
139 print(bin2c.rawData())
145 println("Usage: bin2c.vx <fieldname> <filename> [<outfile>]")