pattern=klass() function pattern:init(p) self.pflags=pflags:new(p) self.nflags={} for i=0,31 do -- because the user could change the length self.nflags[i]=nflags:new{} end end function pattern:plot(ix, n) assert_range(ix,0,self.pflags.len,"ix") self.nflags[ix]=nflags:new(n) end function pattern:silent() for i=0,31 do if (self.nflags[i].v!=0) return end return true end function pattern:key() local key=0 for i=0,self.pflags.len-1 do key ^= self.nflags[i]:encode()>>(i%16) end return key end function pattern:eq(other) if (self.pflags:encode() != other.pflags:encode()) return for i=0,self.pflags.len-1 do if (self.nflags[i]:encode()!= other.nflags[i]:encode()) return end return true end function pattern:map_to(ix) self.map_ix=ix local at=0x3200+ix*68 poke4(at+64,self.pflags:encode()) for i=0,31 do poke2(at+i*2,self.nflags[i]:encode()) end end