cmd.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Copyright ©2021 The star-tex Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE-STAR-TEX file.
  4. package pkf
  5. import (
  6. "modernc.org/knuth/internal/iobuf"
  7. )
  8. // Cmd is a PK command.
  9. type Cmd interface {
  10. opcode() opCode
  11. Name() string
  12. read(r *iobuf.Reader)
  13. }
  14. type CmdXXX1 struct {
  15. Value []byte
  16. }
  17. func (CmdXXX1) opcode() opCode { return opXXX1 }
  18. func (CmdXXX1) Name() string { return "pk_xxx1" }
  19. func (cmd *CmdXXX1) read(r *iobuf.Reader) {
  20. _ = r.ReadU8()
  21. n := int(r.ReadU8())
  22. cmd.Value = r.ReadBuf(n)
  23. }
  24. type CmdXXX2 struct {
  25. Value []byte
  26. }
  27. func (CmdXXX2) opcode() opCode { return opXXX2 }
  28. func (CmdXXX2) Name() string { return "pk_xxx2" }
  29. func (cmd *CmdXXX2) read(r *iobuf.Reader) {
  30. _ = r.ReadU8()
  31. n := int(r.ReadU16())
  32. cmd.Value = r.ReadBuf(n)
  33. }
  34. type CmdXXX3 struct {
  35. Value []byte
  36. }
  37. func (CmdXXX3) opcode() opCode { return opXXX3 }
  38. func (CmdXXX3) Name() string { return "pk_xxx3" }
  39. func (cmd *CmdXXX3) read(r *iobuf.Reader) {
  40. _ = r.ReadU8()
  41. n := int(r.ReadU24())
  42. cmd.Value = r.ReadBuf(n)
  43. }
  44. type CmdXXX4 struct {
  45. Value []byte
  46. }
  47. func (CmdXXX4) opcode() opCode { return opXXX4 }
  48. func (CmdXXX4) Name() string { return "pk_xxx4" }
  49. func (cmd *CmdXXX4) read(r *iobuf.Reader) {
  50. _ = r.ReadU8()
  51. n := int(r.ReadU32())
  52. cmd.Value = r.ReadBuf(n)
  53. }
  54. type CmdYYY struct {
  55. Value uint32
  56. }
  57. func (CmdYYY) opcode() opCode { return opYYY }
  58. func (CmdYYY) Name() string { return "pk_yyy" }
  59. func (cmd *CmdYYY) read(r *iobuf.Reader) {
  60. _ = r.ReadU8()
  61. cmd.Value = r.ReadU32()
  62. }
  63. type CmdPost struct{}
  64. func (CmdPost) opcode() opCode { return opPost }
  65. func (CmdPost) Name() string { return "pk_post" }
  66. func (CmdPost) read(r *iobuf.Reader) {
  67. _ = r.ReadU8()
  68. }
  69. type CmdNOP struct{}
  70. func (CmdNOP) opcode() opCode { return opNOP }
  71. func (CmdNOP) Name() string { return "pk_nop" }
  72. func (CmdNOP) read(r *iobuf.Reader) {
  73. _ = r.ReadU8()
  74. }
  75. type CmdPre struct {
  76. Version uint8
  77. Msg string
  78. Design uint32
  79. Checksum uint32
  80. Hppp uint32
  81. Vppp uint32
  82. }
  83. func (CmdPre) opcode() opCode { return opPre }
  84. func (CmdPre) Name() string { return "pk_pre" }
  85. func (cmd *CmdPre) read(r *iobuf.Reader) {
  86. _ = r.ReadU8()
  87. cmd.Version = r.ReadU8()
  88. n := int(r.ReadU8())
  89. cmd.Msg = string(r.ReadBuf(n))
  90. cmd.Design = r.ReadU32()
  91. cmd.Checksum = r.ReadU32()
  92. cmd.Hppp = r.ReadU32()
  93. cmd.Vppp = r.ReadU32()
  94. }
  95. var (
  96. _ Cmd = (*CmdXXX1)(nil)
  97. _ Cmd = (*CmdXXX2)(nil)
  98. _ Cmd = (*CmdXXX3)(nil)
  99. _ Cmd = (*CmdXXX4)(nil)
  100. _ Cmd = (*CmdYYY)(nil)
  101. _ Cmd = (*CmdPost)(nil)
  102. _ Cmd = (*CmdNOP)(nil)
  103. _ Cmd = (*CmdPre)(nil)
  104. )