package sync /* This file was generated by sync.xml on May 10 2012 4:20:28pm EDT. This file is automatically generated. Edit at your peril! */ import ( "github.com/BurntSushi/xgb" "github.com/BurntSushi/xgb/xproto" ) // Init must be called before using the SYNC extension. func Init(c *xgb.Conn) error { reply, err := xproto.QueryExtension(c, 4, "SYNC").Reply() switch { case err != nil: return err case !reply.Present: return xgb.Errorf("No extension named SYNC could be found on on the server.") } xgb.ExtLock.Lock() c.Extensions["SYNC"] = reply.MajorOpcode for evNum, fun := range xgb.NewExtEventFuncs["SYNC"] { xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun } for errNum, fun := range xgb.NewExtErrorFuncs["SYNC"] { xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun } xgb.ExtLock.Unlock() return nil } func init() { xgb.NewExtEventFuncs["SYNC"] = make(map[int]xgb.NewEventFun) xgb.NewExtErrorFuncs["SYNC"] = make(map[int]xgb.NewErrorFun) } // Skipping definition for base type 'Bool' // Skipping definition for base type 'Float' // Skipping definition for base type 'Card8' // Skipping definition for base type 'Int16' // Skipping definition for base type 'Int32' // Skipping definition for base type 'Void' // Skipping definition for base type 'Byte' // Skipping definition for base type 'Int8' // Skipping definition for base type 'Card16' // Skipping definition for base type 'Char' // Skipping definition for base type 'Card32' // Skipping definition for base type 'Double' const ( AlarmstateActive = 0 AlarmstateInactive = 1 AlarmstateDestroyed = 2 ) const ( TesttypePositiveTransition = 0 TesttypeNegativeTransition = 1 TesttypePositiveComparison = 2 TesttypeNegativeComparison = 3 ) const ( ValuetypeAbsolute = 0 ValuetypeRelative = 1 ) const ( CaCounter = 1 CaValueType = 2 CaValue = 4 CaTestType = 8 CaDelta = 16 CaEvents = 32 ) type Alarm uint32 func NewAlarmId(c *xgb.Conn) (Alarm, error) { id, err := c.NewId() if err != nil { return 0, err } return Alarm(id), nil } type Counter uint32 func NewCounterId(c *xgb.Conn) (Counter, error) { id, err := c.NewId() if err != nil { return 0, err } return Counter(id), nil } type Fence uint32 func NewFenceId(c *xgb.Conn) (Fence, error) { id, err := c.NewId() if err != nil { return 0, err } return Fence(id), nil } // 'Int64' struct definition // Size: 8 type Int64 struct { Hi int32 Lo uint32 } // Struct read Int64 func Int64Read(buf []byte, v *Int64) int { b := 0 v.Hi = int32(xgb.Get32(buf[b:])) b += 4 v.Lo = xgb.Get32(buf[b:]) b += 4 return b } // Struct list read Int64 func Int64ReadList(buf []byte, dest []Int64) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = Int64{} b += Int64Read(buf[b:], &dest[i]) } return xgb.Pad(b) } // Struct write Int64 func (v Int64) Bytes() []byte { buf := make([]byte, 8) b := 0 xgb.Put32(buf[b:], uint32(v.Hi)) b += 4 xgb.Put32(buf[b:], v.Lo) b += 4 return buf } // Write struct list Int64 func Int64ListBytes(buf []byte, list []Int64) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b } // 'Systemcounter' struct definition // Size: (14 + xgb.Pad((int(NameLen) * 1))) type Systemcounter struct { Counter Counter Resolution Int64 NameLen uint16 Name string // size: xgb.Pad((int(NameLen) * 1)) } // Struct read Systemcounter func SystemcounterRead(buf []byte, v *Systemcounter) int { b := 0 v.Counter = Counter(xgb.Get32(buf[b:])) b += 4 v.Resolution = Int64{} b += Int64Read(buf[b:], &v.Resolution) v.NameLen = xgb.Get16(buf[b:]) b += 2 { byteString := make([]byte, v.NameLen) copy(byteString[:v.NameLen], buf[b:]) v.Name = string(byteString) b += xgb.Pad(int(v.NameLen)) } return b } // Struct list read Systemcounter func SystemcounterReadList(buf []byte, dest []Systemcounter) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = Systemcounter{} b += SystemcounterRead(buf[b:], &dest[i]) } return xgb.Pad(b) } // Struct write Systemcounter func (v Systemcounter) Bytes() []byte { buf := make([]byte, (14 + xgb.Pad((int(v.NameLen) * 1)))) b := 0 xgb.Put32(buf[b:], uint32(v.Counter)) b += 4 { structBytes := v.Resolution.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } xgb.Put16(buf[b:], v.NameLen) b += 2 copy(buf[b:], v.Name[:v.NameLen]) b += xgb.Pad(int(v.NameLen)) return buf } // Write struct list Systemcounter func SystemcounterListBytes(buf []byte, list []Systemcounter) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b } // Struct list size Systemcounter func SystemcounterListSize(list []Systemcounter) int { size := 0 for _, item := range list { size += (14 + xgb.Pad((int(item.NameLen) * 1))) } return size } // 'Trigger' struct definition // Size: 20 type Trigger struct { Counter Counter WaitType uint32 WaitValue Int64 TestType uint32 } // Struct read Trigger func TriggerRead(buf []byte, v *Trigger) int { b := 0 v.Counter = Counter(xgb.Get32(buf[b:])) b += 4 v.WaitType = xgb.Get32(buf[b:]) b += 4 v.WaitValue = Int64{} b += Int64Read(buf[b:], &v.WaitValue) v.TestType = xgb.Get32(buf[b:]) b += 4 return b } // Struct list read Trigger func TriggerReadList(buf []byte, dest []Trigger) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = Trigger{} b += TriggerRead(buf[b:], &dest[i]) } return xgb.Pad(b) } // Struct write Trigger func (v Trigger) Bytes() []byte { buf := make([]byte, 20) b := 0 xgb.Put32(buf[b:], uint32(v.Counter)) b += 4 xgb.Put32(buf[b:], v.WaitType) b += 4 { structBytes := v.WaitValue.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } xgb.Put32(buf[b:], v.TestType) b += 4 return buf } // Write struct list Trigger func TriggerListBytes(buf []byte, list []Trigger) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b } // 'Waitcondition' struct definition // Size: 28 type Waitcondition struct { Trigger Trigger EventThreshold Int64 } // Struct read Waitcondition func WaitconditionRead(buf []byte, v *Waitcondition) int { b := 0 v.Trigger = Trigger{} b += TriggerRead(buf[b:], &v.Trigger) v.EventThreshold = Int64{} b += Int64Read(buf[b:], &v.EventThreshold) return b } // Struct list read Waitcondition func WaitconditionReadList(buf []byte, dest []Waitcondition) int { b := 0 for i := 0; i < len(dest); i++ { dest[i] = Waitcondition{} b += WaitconditionRead(buf[b:], &dest[i]) } return xgb.Pad(b) } // Struct write Waitcondition func (v Waitcondition) Bytes() []byte { buf := make([]byte, 28) b := 0 { structBytes := v.Trigger.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.EventThreshold.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return buf } // Write struct list Waitcondition func WaitconditionListBytes(buf []byte, list []Waitcondition) int { b := 0 var structBytes []byte for _, item := range list { structBytes = item.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return b } // Event definition CounterNotify (0) // Size: 32 const CounterNotify = 0 type CounterNotifyEvent struct { Sequence uint16 Kind byte Counter Counter WaitValue Int64 CounterValue Int64 Timestamp xproto.Timestamp Count uint16 Destroyed bool // padding: 1 bytes } // Event read CounterNotify func CounterNotifyEventNew(buf []byte) xgb.Event { v := CounterNotifyEvent{} b := 1 // don't read event number v.Kind = buf[b] b += 1 v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Counter = Counter(xgb.Get32(buf[b:])) b += 4 v.WaitValue = Int64{} b += Int64Read(buf[b:], &v.WaitValue) v.CounterValue = Int64{} b += Int64Read(buf[b:], &v.CounterValue) v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:])) b += 4 v.Count = xgb.Get16(buf[b:]) b += 2 if buf[b] == 1 { v.Destroyed = true } else { v.Destroyed = false } b += 1 b += 1 // padding return v } // Event write CounterNotify func (v CounterNotifyEvent) Bytes() []byte { buf := make([]byte, 32) b := 0 // write event number buf[b] = 0 b += 1 buf[b] = v.Kind b += 1 b += 2 // skip sequence number xgb.Put32(buf[b:], uint32(v.Counter)) b += 4 { structBytes := v.WaitValue.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.CounterValue.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } xgb.Put32(buf[b:], uint32(v.Timestamp)) b += 4 xgb.Put16(buf[b:], v.Count) b += 2 if v.Destroyed { buf[b] = 1 } else { buf[b] = 0 } b += 1 b += 1 // padding return buf } func (v CounterNotifyEvent) ImplementsEvent() {} func (v CounterNotifyEvent) SequenceId() uint16 { return v.Sequence } func (v CounterNotifyEvent) String() string { fieldVals := make([]string, 0, 8) fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence)) fieldVals = append(fieldVals, xgb.Sprintf("Kind: %d", v.Kind)) fieldVals = append(fieldVals, xgb.Sprintf("Counter: %d", v.Counter)) fieldVals = append(fieldVals, xgb.Sprintf("Timestamp: %d", v.Timestamp)) fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count)) fieldVals = append(fieldVals, xgb.Sprintf("Destroyed: %t", v.Destroyed)) return "CounterNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}" } func init() { xgb.NewExtEventFuncs["SYNC"][0] = CounterNotifyEventNew } // Event definition AlarmNotify (1) // Size: 32 const AlarmNotify = 1 type AlarmNotifyEvent struct { Sequence uint16 Kind byte Alarm Alarm CounterValue Int64 AlarmValue Int64 Timestamp xproto.Timestamp State byte // padding: 3 bytes } // Event read AlarmNotify func AlarmNotifyEventNew(buf []byte) xgb.Event { v := AlarmNotifyEvent{} b := 1 // don't read event number v.Kind = buf[b] b += 1 v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Alarm = Alarm(xgb.Get32(buf[b:])) b += 4 v.CounterValue = Int64{} b += Int64Read(buf[b:], &v.CounterValue) v.AlarmValue = Int64{} b += Int64Read(buf[b:], &v.AlarmValue) v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:])) b += 4 v.State = buf[b] b += 1 b += 3 // padding return v } // Event write AlarmNotify func (v AlarmNotifyEvent) Bytes() []byte { buf := make([]byte, 32) b := 0 // write event number buf[b] = 1 b += 1 buf[b] = v.Kind b += 1 b += 2 // skip sequence number xgb.Put32(buf[b:], uint32(v.Alarm)) b += 4 { structBytes := v.CounterValue.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } { structBytes := v.AlarmValue.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } xgb.Put32(buf[b:], uint32(v.Timestamp)) b += 4 buf[b] = v.State b += 1 b += 3 // padding return buf } func (v AlarmNotifyEvent) ImplementsEvent() {} func (v AlarmNotifyEvent) SequenceId() uint16 { return v.Sequence } func (v AlarmNotifyEvent) String() string { fieldVals := make([]string, 0, 7) fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence)) fieldVals = append(fieldVals, xgb.Sprintf("Kind: %d", v.Kind)) fieldVals = append(fieldVals, xgb.Sprintf("Alarm: %d", v.Alarm)) fieldVals = append(fieldVals, xgb.Sprintf("Timestamp: %d", v.Timestamp)) fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State)) return "AlarmNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}" } func init() { xgb.NewExtEventFuncs["SYNC"][1] = AlarmNotifyEventNew } // Error definition Counter (0) // Size: 32 const BadCounter = 0 type CounterError struct { Sequence uint16 NiceName string BadCounter uint32 MinorOpcode uint16 MajorOpcode byte } // Error read Counter func CounterErrorNew(buf []byte) xgb.Error { v := CounterError{} v.NiceName = "Counter" b := 1 // skip error determinant b += 1 // don't read error number v.Sequence = xgb.Get16(buf[b:]) b += 2 v.BadCounter = xgb.Get32(buf[b:]) b += 4 v.MinorOpcode = xgb.Get16(buf[b:]) b += 2 v.MajorOpcode = buf[b] b += 1 return v } func (err CounterError) ImplementsError() {} func (err CounterError) SequenceId() uint16 { return err.Sequence } func (err CounterError) BadId() uint32 { return 0 } func (err CounterError) Error() string { fieldVals := make([]string, 0, 3) fieldVals = append(fieldVals, "NiceName: "+err.NiceName) fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) fieldVals = append(fieldVals, xgb.Sprintf("BadCounter: %d", err.BadCounter)) fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) return "BadCounter {" + xgb.StringsJoin(fieldVals, ", ") + "}" } func init() { xgb.NewExtErrorFuncs["SYNC"][0] = CounterErrorNew } // Error definition Alarm (1) // Size: 32 const BadAlarm = 1 type AlarmError struct { Sequence uint16 NiceName string BadAlarm uint32 MinorOpcode uint16 MajorOpcode byte } // Error read Alarm func AlarmErrorNew(buf []byte) xgb.Error { v := AlarmError{} v.NiceName = "Alarm" b := 1 // skip error determinant b += 1 // don't read error number v.Sequence = xgb.Get16(buf[b:]) b += 2 v.BadAlarm = xgb.Get32(buf[b:]) b += 4 v.MinorOpcode = xgb.Get16(buf[b:]) b += 2 v.MajorOpcode = buf[b] b += 1 return v } func (err AlarmError) ImplementsError() {} func (err AlarmError) SequenceId() uint16 { return err.Sequence } func (err AlarmError) BadId() uint32 { return 0 } func (err AlarmError) Error() string { fieldVals := make([]string, 0, 3) fieldVals = append(fieldVals, "NiceName: "+err.NiceName) fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) fieldVals = append(fieldVals, xgb.Sprintf("BadAlarm: %d", err.BadAlarm)) fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) return "BadAlarm {" + xgb.StringsJoin(fieldVals, ", ") + "}" } func init() { xgb.NewExtErrorFuncs["SYNC"][1] = AlarmErrorNew } // Request Initialize // size: 8 type InitializeCookie struct { *xgb.Cookie } func Initialize(c *xgb.Conn, DesiredMajorVersion byte, DesiredMinorVersion byte) InitializeCookie { cookie := c.NewCookie(true, true) c.NewRequest(initializeRequest(c, DesiredMajorVersion, DesiredMinorVersion), cookie) return InitializeCookie{cookie} } func InitializeUnchecked(c *xgb.Conn, DesiredMajorVersion byte, DesiredMinorVersion byte) InitializeCookie { cookie := c.NewCookie(false, true) c.NewRequest(initializeRequest(c, DesiredMajorVersion, DesiredMinorVersion), cookie) return InitializeCookie{cookie} } // Request reply for Initialize // size: 32 type InitializeReply struct { Sequence uint16 Length uint32 // padding: 1 bytes MajorVersion byte MinorVersion byte // padding: 22 bytes } // Waits and reads reply data from request Initialize func (cook InitializeCookie) Reply() (*InitializeReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return initializeReply(buf), nil } // Read reply into structure from buffer for Initialize func initializeReply(buf []byte) *InitializeReply { v := new(InitializeReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.MajorVersion = buf[b] b += 1 v.MinorVersion = buf[b] b += 1 b += 22 // padding return v } // Write request to wire for Initialize func initializeRequest(c *xgb.Conn, DesiredMajorVersion byte, DesiredMinorVersion byte) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 0 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 buf[b] = DesiredMajorVersion b += 1 buf[b] = DesiredMinorVersion b += 1 return buf } // Request ListSystemCounters // size: 4 type ListSystemCountersCookie struct { *xgb.Cookie } func ListSystemCounters(c *xgb.Conn) ListSystemCountersCookie { cookie := c.NewCookie(true, true) c.NewRequest(listSystemCountersRequest(c), cookie) return ListSystemCountersCookie{cookie} } func ListSystemCountersUnchecked(c *xgb.Conn) ListSystemCountersCookie { cookie := c.NewCookie(false, true) c.NewRequest(listSystemCountersRequest(c), cookie) return ListSystemCountersCookie{cookie} } // Request reply for ListSystemCounters // size: (32 + SystemcounterListSize(Counters)) type ListSystemCountersReply struct { Sequence uint16 Length uint32 // padding: 1 bytes CountersLen uint32 // padding: 20 bytes Counters []Systemcounter // size: SystemcounterListSize(Counters) } // Waits and reads reply data from request ListSystemCounters func (cook ListSystemCountersCookie) Reply() (*ListSystemCountersReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return listSystemCountersReply(buf), nil } // Read reply into structure from buffer for ListSystemCounters func listSystemCountersReply(buf []byte) *ListSystemCountersReply { v := new(ListSystemCountersReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.CountersLen = xgb.Get32(buf[b:]) b += 4 b += 20 // padding v.Counters = make([]Systemcounter, v.CountersLen) b += SystemcounterReadList(buf[b:], v.Counters) return v } // Write request to wire for ListSystemCounters func listSystemCountersRequest(c *xgb.Conn) []byte { size := 4 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 1 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 return buf } // Request CreateCounter // size: 16 type CreateCounterCookie struct { *xgb.Cookie } // Write request to wire for CreateCounter func CreateCounter(c *xgb.Conn, Id Counter, InitialValue Int64) CreateCounterCookie { cookie := c.NewCookie(false, false) c.NewRequest(createCounterRequest(c, Id, InitialValue), cookie) return CreateCounterCookie{cookie} } func CreateCounterChecked(c *xgb.Conn, Id Counter, InitialValue Int64) CreateCounterCookie { cookie := c.NewCookie(true, false) c.NewRequest(createCounterRequest(c, Id, InitialValue), cookie) return CreateCounterCookie{cookie} } func (cook CreateCounterCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for CreateCounter func createCounterRequest(c *xgb.Conn, Id Counter, InitialValue Int64) []byte { size := 16 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 2 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Id)) b += 4 { structBytes := InitialValue.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return buf } // Request DestroyCounter // size: 8 type DestroyCounterCookie struct { *xgb.Cookie } // Write request to wire for DestroyCounter func DestroyCounter(c *xgb.Conn, Counter Counter) DestroyCounterCookie { cookie := c.NewCookie(false, false) c.NewRequest(destroyCounterRequest(c, Counter), cookie) return DestroyCounterCookie{cookie} } func DestroyCounterChecked(c *xgb.Conn, Counter Counter) DestroyCounterCookie { cookie := c.NewCookie(true, false) c.NewRequest(destroyCounterRequest(c, Counter), cookie) return DestroyCounterCookie{cookie} } func (cook DestroyCounterCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for DestroyCounter func destroyCounterRequest(c *xgb.Conn, Counter Counter) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 6 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Counter)) b += 4 return buf } // Request QueryCounter // size: 8 type QueryCounterCookie struct { *xgb.Cookie } func QueryCounter(c *xgb.Conn, Counter Counter) QueryCounterCookie { cookie := c.NewCookie(true, true) c.NewRequest(queryCounterRequest(c, Counter), cookie) return QueryCounterCookie{cookie} } func QueryCounterUnchecked(c *xgb.Conn, Counter Counter) QueryCounterCookie { cookie := c.NewCookie(false, true) c.NewRequest(queryCounterRequest(c, Counter), cookie) return QueryCounterCookie{cookie} } // Request reply for QueryCounter // size: 16 type QueryCounterReply struct { Sequence uint16 Length uint32 // padding: 1 bytes CounterValue Int64 } // Waits and reads reply data from request QueryCounter func (cook QueryCounterCookie) Reply() (*QueryCounterReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return queryCounterReply(buf), nil } // Read reply into structure from buffer for QueryCounter func queryCounterReply(buf []byte) *QueryCounterReply { v := new(QueryCounterReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.CounterValue = Int64{} b += Int64Read(buf[b:], &v.CounterValue) return v } // Write request to wire for QueryCounter func queryCounterRequest(c *xgb.Conn, Counter Counter) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 5 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Counter)) b += 4 return buf } // Request Await // size: xgb.Pad((4 + xgb.Pad((len(WaitList) * 28)))) type AwaitCookie struct { *xgb.Cookie } // Write request to wire for Await func Await(c *xgb.Conn, WaitList []Waitcondition) AwaitCookie { cookie := c.NewCookie(false, false) c.NewRequest(awaitRequest(c, WaitList), cookie) return AwaitCookie{cookie} } func AwaitChecked(c *xgb.Conn, WaitList []Waitcondition) AwaitCookie { cookie := c.NewCookie(true, false) c.NewRequest(awaitRequest(c, WaitList), cookie) return AwaitCookie{cookie} } func (cook AwaitCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for Await func awaitRequest(c *xgb.Conn, WaitList []Waitcondition) []byte { size := xgb.Pad((4 + xgb.Pad((len(WaitList) * 28)))) b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 7 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 b += WaitconditionListBytes(buf[b:], WaitList) return buf } // Request ChangeCounter // size: 16 type ChangeCounterCookie struct { *xgb.Cookie } // Write request to wire for ChangeCounter func ChangeCounter(c *xgb.Conn, Counter Counter, Amount Int64) ChangeCounterCookie { cookie := c.NewCookie(false, false) c.NewRequest(changeCounterRequest(c, Counter, Amount), cookie) return ChangeCounterCookie{cookie} } func ChangeCounterChecked(c *xgb.Conn, Counter Counter, Amount Int64) ChangeCounterCookie { cookie := c.NewCookie(true, false) c.NewRequest(changeCounterRequest(c, Counter, Amount), cookie) return ChangeCounterCookie{cookie} } func (cook ChangeCounterCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for ChangeCounter func changeCounterRequest(c *xgb.Conn, Counter Counter, Amount Int64) []byte { size := 16 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 4 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Counter)) b += 4 { structBytes := Amount.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return buf } // Request SetCounter // size: 16 type SetCounterCookie struct { *xgb.Cookie } // Write request to wire for SetCounter func SetCounter(c *xgb.Conn, Counter Counter, Value Int64) SetCounterCookie { cookie := c.NewCookie(false, false) c.NewRequest(setCounterRequest(c, Counter, Value), cookie) return SetCounterCookie{cookie} } func SetCounterChecked(c *xgb.Conn, Counter Counter, Value Int64) SetCounterCookie { cookie := c.NewCookie(true, false) c.NewRequest(setCounterRequest(c, Counter, Value), cookie) return SetCounterCookie{cookie} } func (cook SetCounterCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for SetCounter func setCounterRequest(c *xgb.Conn, Counter Counter, Value Int64) []byte { size := 16 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 3 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Counter)) b += 4 { structBytes := Value.Bytes() copy(buf[b:], structBytes) b += xgb.Pad(len(structBytes)) } return buf } // Request CreateAlarm // size: xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask))))))) type CreateAlarmCookie struct { *xgb.Cookie } // Write request to wire for CreateAlarm func CreateAlarm(c *xgb.Conn, Id Alarm, ValueMask uint32, ValueList []uint32) CreateAlarmCookie { cookie := c.NewCookie(false, false) c.NewRequest(createAlarmRequest(c, Id, ValueMask, ValueList), cookie) return CreateAlarmCookie{cookie} } func CreateAlarmChecked(c *xgb.Conn, Id Alarm, ValueMask uint32, ValueList []uint32) CreateAlarmCookie { cookie := c.NewCookie(true, false) c.NewRequest(createAlarmRequest(c, Id, ValueMask, ValueList), cookie) return CreateAlarmCookie{cookie} } func (cook CreateAlarmCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for CreateAlarm func createAlarmRequest(c *xgb.Conn, Id Alarm, ValueMask uint32, ValueList []uint32) []byte { size := xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask))))))) b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 8 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Id)) b += 4 xgb.Put32(buf[b:], ValueMask) b += 4 for i := 0; i < xgb.PopCount(int(ValueMask)); i++ { xgb.Put32(buf[b:], ValueList[i]) b += 4 } b = xgb.Pad(b) return buf } // Request ChangeAlarm // size: xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask))))))) type ChangeAlarmCookie struct { *xgb.Cookie } // Write request to wire for ChangeAlarm func ChangeAlarm(c *xgb.Conn, Id Alarm, ValueMask uint32, ValueList []uint32) ChangeAlarmCookie { cookie := c.NewCookie(false, false) c.NewRequest(changeAlarmRequest(c, Id, ValueMask, ValueList), cookie) return ChangeAlarmCookie{cookie} } func ChangeAlarmChecked(c *xgb.Conn, Id Alarm, ValueMask uint32, ValueList []uint32) ChangeAlarmCookie { cookie := c.NewCookie(true, false) c.NewRequest(changeAlarmRequest(c, Id, ValueMask, ValueList), cookie) return ChangeAlarmCookie{cookie} } func (cook ChangeAlarmCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for ChangeAlarm func changeAlarmRequest(c *xgb.Conn, Id Alarm, ValueMask uint32, ValueList []uint32) []byte { size := xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask))))))) b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 9 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Id)) b += 4 xgb.Put32(buf[b:], ValueMask) b += 4 for i := 0; i < xgb.PopCount(int(ValueMask)); i++ { xgb.Put32(buf[b:], ValueList[i]) b += 4 } b = xgb.Pad(b) return buf } // Request DestroyAlarm // size: 8 type DestroyAlarmCookie struct { *xgb.Cookie } // Write request to wire for DestroyAlarm func DestroyAlarm(c *xgb.Conn, Alarm Alarm) DestroyAlarmCookie { cookie := c.NewCookie(false, false) c.NewRequest(destroyAlarmRequest(c, Alarm), cookie) return DestroyAlarmCookie{cookie} } func DestroyAlarmChecked(c *xgb.Conn, Alarm Alarm) DestroyAlarmCookie { cookie := c.NewCookie(true, false) c.NewRequest(destroyAlarmRequest(c, Alarm), cookie) return DestroyAlarmCookie{cookie} } func (cook DestroyAlarmCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for DestroyAlarm func destroyAlarmRequest(c *xgb.Conn, Alarm Alarm) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 11 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Alarm)) b += 4 return buf } // Request QueryAlarm // size: 8 type QueryAlarmCookie struct { *xgb.Cookie } func QueryAlarm(c *xgb.Conn, Alarm Alarm) QueryAlarmCookie { cookie := c.NewCookie(true, true) c.NewRequest(queryAlarmRequest(c, Alarm), cookie) return QueryAlarmCookie{cookie} } func QueryAlarmUnchecked(c *xgb.Conn, Alarm Alarm) QueryAlarmCookie { cookie := c.NewCookie(false, true) c.NewRequest(queryAlarmRequest(c, Alarm), cookie) return QueryAlarmCookie{cookie} } // Request reply for QueryAlarm // size: 40 type QueryAlarmReply struct { Sequence uint16 Length uint32 // padding: 1 bytes Trigger Trigger Delta Int64 Events bool State byte // padding: 2 bytes } // Waits and reads reply data from request QueryAlarm func (cook QueryAlarmCookie) Reply() (*QueryAlarmReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return queryAlarmReply(buf), nil } // Read reply into structure from buffer for QueryAlarm func queryAlarmReply(buf []byte) *QueryAlarmReply { v := new(QueryAlarmReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.Trigger = Trigger{} b += TriggerRead(buf[b:], &v.Trigger) v.Delta = Int64{} b += Int64Read(buf[b:], &v.Delta) if buf[b] == 1 { v.Events = true } else { v.Events = false } b += 1 v.State = buf[b] b += 1 b += 2 // padding return v } // Write request to wire for QueryAlarm func queryAlarmRequest(c *xgb.Conn, Alarm Alarm) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 10 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Alarm)) b += 4 return buf } // Request SetPriority // size: 12 type SetPriorityCookie struct { *xgb.Cookie } // Write request to wire for SetPriority func SetPriority(c *xgb.Conn, Id uint32, Priority int32) SetPriorityCookie { cookie := c.NewCookie(false, false) c.NewRequest(setPriorityRequest(c, Id, Priority), cookie) return SetPriorityCookie{cookie} } func SetPriorityChecked(c *xgb.Conn, Id uint32, Priority int32) SetPriorityCookie { cookie := c.NewCookie(true, false) c.NewRequest(setPriorityRequest(c, Id, Priority), cookie) return SetPriorityCookie{cookie} } func (cook SetPriorityCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for SetPriority func setPriorityRequest(c *xgb.Conn, Id uint32, Priority int32) []byte { size := 12 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 12 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], Id) b += 4 xgb.Put32(buf[b:], uint32(Priority)) b += 4 return buf } // Request GetPriority // size: 8 type GetPriorityCookie struct { *xgb.Cookie } func GetPriority(c *xgb.Conn, Id uint32) GetPriorityCookie { cookie := c.NewCookie(true, true) c.NewRequest(getPriorityRequest(c, Id), cookie) return GetPriorityCookie{cookie} } func GetPriorityUnchecked(c *xgb.Conn, Id uint32) GetPriorityCookie { cookie := c.NewCookie(false, true) c.NewRequest(getPriorityRequest(c, Id), cookie) return GetPriorityCookie{cookie} } // Request reply for GetPriority // size: 12 type GetPriorityReply struct { Sequence uint16 Length uint32 // padding: 1 bytes Priority int32 } // Waits and reads reply data from request GetPriority func (cook GetPriorityCookie) Reply() (*GetPriorityReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return getPriorityReply(buf), nil } // Read reply into structure from buffer for GetPriority func getPriorityReply(buf []byte) *GetPriorityReply { v := new(GetPriorityReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 v.Priority = int32(xgb.Get32(buf[b:])) b += 4 return v } // Write request to wire for GetPriority func getPriorityRequest(c *xgb.Conn, Id uint32) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 13 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], Id) b += 4 return buf } // Request CreateFence // size: 16 type CreateFenceCookie struct { *xgb.Cookie } // Write request to wire for CreateFence func CreateFence(c *xgb.Conn, Drawable xproto.Drawable, Fence Fence, InitiallyTriggered bool) CreateFenceCookie { cookie := c.NewCookie(false, false) c.NewRequest(createFenceRequest(c, Drawable, Fence, InitiallyTriggered), cookie) return CreateFenceCookie{cookie} } func CreateFenceChecked(c *xgb.Conn, Drawable xproto.Drawable, Fence Fence, InitiallyTriggered bool) CreateFenceCookie { cookie := c.NewCookie(true, false) c.NewRequest(createFenceRequest(c, Drawable, Fence, InitiallyTriggered), cookie) return CreateFenceCookie{cookie} } func (cook CreateFenceCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for CreateFence func createFenceRequest(c *xgb.Conn, Drawable xproto.Drawable, Fence Fence, InitiallyTriggered bool) []byte { size := 16 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 14 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Drawable)) b += 4 xgb.Put32(buf[b:], uint32(Fence)) b += 4 if InitiallyTriggered { buf[b] = 1 } else { buf[b] = 0 } b += 1 return buf } // Request TriggerFence // size: 8 type TriggerFenceCookie struct { *xgb.Cookie } // Write request to wire for TriggerFence func TriggerFence(c *xgb.Conn, Fence Fence) TriggerFenceCookie { cookie := c.NewCookie(false, false) c.NewRequest(triggerFenceRequest(c, Fence), cookie) return TriggerFenceCookie{cookie} } func TriggerFenceChecked(c *xgb.Conn, Fence Fence) TriggerFenceCookie { cookie := c.NewCookie(true, false) c.NewRequest(triggerFenceRequest(c, Fence), cookie) return TriggerFenceCookie{cookie} } func (cook TriggerFenceCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for TriggerFence func triggerFenceRequest(c *xgb.Conn, Fence Fence) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 15 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Fence)) b += 4 return buf } // Request ResetFence // size: 8 type ResetFenceCookie struct { *xgb.Cookie } // Write request to wire for ResetFence func ResetFence(c *xgb.Conn, Fence Fence) ResetFenceCookie { cookie := c.NewCookie(false, false) c.NewRequest(resetFenceRequest(c, Fence), cookie) return ResetFenceCookie{cookie} } func ResetFenceChecked(c *xgb.Conn, Fence Fence) ResetFenceCookie { cookie := c.NewCookie(true, false) c.NewRequest(resetFenceRequest(c, Fence), cookie) return ResetFenceCookie{cookie} } func (cook ResetFenceCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for ResetFence func resetFenceRequest(c *xgb.Conn, Fence Fence) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 16 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Fence)) b += 4 return buf } // Request DestroyFence // size: 8 type DestroyFenceCookie struct { *xgb.Cookie } // Write request to wire for DestroyFence func DestroyFence(c *xgb.Conn, Fence Fence) DestroyFenceCookie { cookie := c.NewCookie(false, false) c.NewRequest(destroyFenceRequest(c, Fence), cookie) return DestroyFenceCookie{cookie} } func DestroyFenceChecked(c *xgb.Conn, Fence Fence) DestroyFenceCookie { cookie := c.NewCookie(true, false) c.NewRequest(destroyFenceRequest(c, Fence), cookie) return DestroyFenceCookie{cookie} } func (cook DestroyFenceCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for DestroyFence func destroyFenceRequest(c *xgb.Conn, Fence Fence) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 17 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Fence)) b += 4 return buf } // Request QueryFence // size: 8 type QueryFenceCookie struct { *xgb.Cookie } func QueryFence(c *xgb.Conn, Fence Fence) QueryFenceCookie { cookie := c.NewCookie(true, true) c.NewRequest(queryFenceRequest(c, Fence), cookie) return QueryFenceCookie{cookie} } func QueryFenceUnchecked(c *xgb.Conn, Fence Fence) QueryFenceCookie { cookie := c.NewCookie(false, true) c.NewRequest(queryFenceRequest(c, Fence), cookie) return QueryFenceCookie{cookie} } // Request reply for QueryFence // size: 32 type QueryFenceReply struct { Sequence uint16 Length uint32 // padding: 1 bytes Triggered bool // padding: 23 bytes } // Waits and reads reply data from request QueryFence func (cook QueryFenceCookie) Reply() (*QueryFenceReply, error) { buf, err := cook.Cookie.Reply() if err != nil { return nil, err } if buf == nil { return nil, nil } return queryFenceReply(buf), nil } // Read reply into structure from buffer for QueryFence func queryFenceReply(buf []byte) *QueryFenceReply { v := new(QueryFenceReply) b := 1 // skip reply determinant b += 1 // padding v.Sequence = xgb.Get16(buf[b:]) b += 2 v.Length = xgb.Get32(buf[b:]) // 4-byte units b += 4 if buf[b] == 1 { v.Triggered = true } else { v.Triggered = false } b += 1 b += 23 // padding return v } // Write request to wire for QueryFence func queryFenceRequest(c *xgb.Conn, Fence Fence) []byte { size := 8 b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 18 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 xgb.Put32(buf[b:], uint32(Fence)) b += 4 return buf } // Request AwaitFence // size: xgb.Pad((4 + xgb.Pad((len(FenceList) * 4)))) type AwaitFenceCookie struct { *xgb.Cookie } // Write request to wire for AwaitFence func AwaitFence(c *xgb.Conn, FenceList []Fence) AwaitFenceCookie { cookie := c.NewCookie(false, false) c.NewRequest(awaitFenceRequest(c, FenceList), cookie) return AwaitFenceCookie{cookie} } func AwaitFenceChecked(c *xgb.Conn, FenceList []Fence) AwaitFenceCookie { cookie := c.NewCookie(true, false) c.NewRequest(awaitFenceRequest(c, FenceList), cookie) return AwaitFenceCookie{cookie} } func (cook AwaitFenceCookie) Check() error { return cook.Cookie.Check() } // Write request to wire for AwaitFence func awaitFenceRequest(c *xgb.Conn, FenceList []Fence) []byte { size := xgb.Pad((4 + xgb.Pad((len(FenceList) * 4)))) b := 0 buf := make([]byte, size) buf[b] = c.Extensions["SYNC"] b += 1 buf[b] = 19 // request opcode b += 1 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units b += 2 for i := 0; i < int(len(FenceList)); i++ { xgb.Put32(buf[b:], uint32(FenceList[i])) b += 4 } b = xgb.Pad(b) return buf }