pflags=klass() function pflags:init(o) self.speed = o.speed or 15 self.len = o.len or 32 self.noiz = o.noiz or 0 self.buzz = o.buzz or 0 self.detune = o.detune or 0 self.reverb = o.reverb or 0 self.dampen = o.dampen or 0 self.editormode = o.editormode or 1 end function pflags:validate() local speed,len,noiz,buzz,detune,reverb,dampen,editormode =self.speed,self.len,self.noiz,self.buzz, self.detune,self.reverb,self.dampen,self.editormode assert_range(speed,1,255,"speed") assert_range(len,1,33,"len") assert_range(noiz,0,2,"noiz") assert_range(buzz,0,2,"buzz") assert_range(detune,0,3,"detune") assert_range(reverb,0,3,"reverb") assert_range(dampen,0,3,"dampen") assert_range(editormode,0,2,"editormode") end function pflags:encode() local speed,len,noiz,buzz,detune,reverb,dampen,editormode =self.speed,self.len,self.noiz,self.buzz, self.detune,self.reverb,self.dampen,self.editormode speed &= 0xffff len &= 0xffff noiz &= 0xffff buzz &= 0xffff detune &= 0xffff reverb &= 0xffff dampen &= 0xffff editormode &= 0xffff self:validate() local byte0 = ( dampen*72 + reverb*24 + detune*8 + buzz*4 + noiz*2 + editormode -- "in editor mode" flag ) return len | speed>>8 | byte0 >>16 end