/bs/util.go
package bs
import (
"fmt"
"image"
"math"
"bytex64.net/code/bitsmash/packet"
)
func (self *BitSmash) Size() image.Point {
return image.Point{self.size, self.Length() / self.size}
}
func (self *BitSmash) Length() int {
n := 0
for _, p := range(self.packetList) {
n += p.Length()
}
return n
}
func (self *BitSmash) ByteLength() int {
n_pd := int(math.Ceil(float64(len(self.packetList)) / 4.0))
total_len := n_pd + 3
for _, p := range(self.packetList) {
total_len += p.ByteLength()
}
return total_len
}
func (self *BitSmash) unpackRepeat() []packet.Packet {
outlist := make([]packet.Packet, 1)
outlist[0] = self.packetList[0]
c := 1
for _, p := range(self.packetList) {
switch p.(type) {
case *packet.RepeatPacket:
rp := p.(*packet.RepeatPacket)
outlist = rp.UnRepeat(outlist, c)
c += rp.Count()
default:
outlist = append(outlist, p)
c++
}
}
return outlist
}
func (self *BitSmash) Dump() {
self.unpackRepeat()
size := self.Size()
fmt.Printf("%d pixels, %dx%d\n", self.Length(), size.X, size.Y)
fmt.Printf("Palette %d, palette map %b %04b %04b %04b %04b\n", self.palette,
self.paletteMap & 0x10000 >> 16,
self.paletteMap & 0xF000 >> 12,
self.paletteMap & 0xF00 >> 8,
self.paletteMap & 0xF0 >> 4,
self.paletteMap & 0xF)
fmt.Printf("%d packets:\n", len(self.packetList))
c := 0
for _, p := range(self.packetList) {
switch p.(type) {
case *packet.RepeatPacket:
fmt.Printf(" %s\n", p)
rp := p.(*packet.RepeatPacket)
//d := c - rp.Distance()
//tpl = rp.UnRepeat(tpl, c)
for i := 0; i < rp.Count(); i++ {
fmt.Printf("%-4d %s\n", c + i, rp.Slice()[i])
}
c += rp.Count()
default:
fmt.Printf("%-4d %s\n", c, p)
c++
}
}
fmt.Printf("%d total bytes\n", self.ByteLength())
}
func (self *BitSmash) RawDump() {
for i, p := range(self.packetList) {
fmt.Printf("%-4d %s\n", i, p)
}
}