cmd.go 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042
  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 dvi
  5. import (
  6. "fmt"
  7. "modernc.org/knuth/internal/iobuf"
  8. )
  9. // Cmd is a DVI command.
  10. type Cmd interface {
  11. opcode() opCode
  12. Name() string
  13. write(w *iobuf.Writer)
  14. read(r *iobuf.Reader)
  15. }
  16. type CmdSetChar struct {
  17. Value uint8 `json:"-"`
  18. }
  19. func (c CmdSetChar) opcode() opCode { return opCode(c.Value) }
  20. func (c CmdSetChar) Name() string { return fmt.Sprintf("set_char_%d", c.Value) }
  21. func (c CmdSetChar) write(w *iobuf.Writer) { w.WriteU8(c.Value) }
  22. func (c *CmdSetChar) read(r *iobuf.Reader) { c.Value = r.ReadU8() }
  23. type CmdSet1 struct {
  24. Value uint32 `json:"v"`
  25. }
  26. func (CmdSet1) opcode() opCode { return opSet1 }
  27. func (CmdSet1) Name() string { return "set1" }
  28. func (c CmdSet1) write(w *iobuf.Writer) {
  29. w.WriteU8(uint8(c.opcode()))
  30. w.WriteU8(uint8(c.Value))
  31. }
  32. func (c *CmdSet1) read(r *iobuf.Reader) {
  33. _ = r.ReadU8()
  34. c.Value = uint32(r.ReadU8())
  35. }
  36. type CmdSet2 struct {
  37. Value uint32 `json:"v"`
  38. }
  39. func (CmdSet2) opcode() opCode { return opSet2 }
  40. func (CmdSet2) Name() string { return "set2" }
  41. func (c CmdSet2) write(w *iobuf.Writer) {
  42. w.WriteU8(uint8(c.opcode()))
  43. w.WriteU16(uint16(c.Value))
  44. }
  45. func (c *CmdSet2) read(r *iobuf.Reader) {
  46. _ = r.ReadU8()
  47. c.Value = uint32(r.ReadU16())
  48. }
  49. type CmdSet3 struct {
  50. Value uint32 `json:"v"`
  51. }
  52. func (CmdSet3) opcode() opCode { return opSet3 }
  53. func (CmdSet3) Name() string { return "set3" }
  54. func (c CmdSet3) write(w *iobuf.Writer) {
  55. w.WriteU8(uint8(c.opcode()))
  56. w.WriteU24(c.Value)
  57. }
  58. func (c *CmdSet3) read(r *iobuf.Reader) {
  59. _ = r.ReadU8()
  60. c.Value = r.ReadU24()
  61. }
  62. type CmdSet4 struct {
  63. Value int32 `json:"v"`
  64. }
  65. func (CmdSet4) opcode() opCode { return opSet4 }
  66. func (CmdSet4) Name() string { return "set4" }
  67. func (c CmdSet4) write(w *iobuf.Writer) {
  68. w.WriteU8(uint8(c.opcode()))
  69. w.WriteI32(c.Value)
  70. }
  71. func (c *CmdSet4) read(r *iobuf.Reader) {
  72. _ = r.ReadU8()
  73. c.Value = r.ReadI32()
  74. }
  75. type CmdSetRule struct {
  76. Height int32 `json:"h"`
  77. Width int32 `json:"w"`
  78. }
  79. func (CmdSetRule) opcode() opCode { return opSetRule }
  80. func (CmdSetRule) Name() string { return "set_rule" }
  81. func (c CmdSetRule) write(w *iobuf.Writer) {
  82. w.WriteU8(uint8(c.opcode()))
  83. w.WriteI32(c.Height)
  84. w.WriteI32(c.Width)
  85. }
  86. func (c *CmdSetRule) read(r *iobuf.Reader) {
  87. _ = r.ReadU8()
  88. c.Height = r.ReadI32()
  89. c.Width = r.ReadI32()
  90. }
  91. type CmdPut1 struct {
  92. Value uint32 `json:"v"`
  93. }
  94. func (CmdPut1) opcode() opCode { return opPut1 }
  95. func (CmdPut1) Name() string { return "put1" }
  96. func (c CmdPut1) write(w *iobuf.Writer) {
  97. w.WriteU8(uint8(c.opcode()))
  98. w.WriteU8(uint8(c.Value))
  99. }
  100. func (c *CmdPut1) read(r *iobuf.Reader) {
  101. _ = r.ReadU8()
  102. c.Value = uint32(r.ReadU8())
  103. }
  104. type CmdPut2 struct {
  105. Value uint32 `json:"v"`
  106. }
  107. func (CmdPut2) opcode() opCode { return opPut2 }
  108. func (CmdPut2) Name() string { return "put2" }
  109. func (c CmdPut2) write(w *iobuf.Writer) {
  110. w.WriteU8(uint8(c.opcode()))
  111. w.WriteU16(uint16(c.Value))
  112. }
  113. func (c *CmdPut2) read(r *iobuf.Reader) {
  114. _ = r.ReadU8()
  115. c.Value = uint32(r.ReadU16())
  116. }
  117. type CmdPut3 struct {
  118. Value uint32 `json:"v"`
  119. }
  120. func (CmdPut3) opcode() opCode { return opPut3 }
  121. func (CmdPut3) Name() string { return "put3" }
  122. func (c CmdPut3) write(w *iobuf.Writer) {
  123. w.WriteU8(uint8(c.opcode()))
  124. w.WriteU24(c.Value)
  125. }
  126. func (c *CmdPut3) read(r *iobuf.Reader) {
  127. _ = r.ReadU8()
  128. c.Value = r.ReadU24()
  129. }
  130. type CmdPut4 struct {
  131. Value int32 `json:"v"`
  132. }
  133. func (CmdPut4) opcode() opCode { return opPut4 }
  134. func (CmdPut4) Name() string { return "put4" }
  135. func (c CmdPut4) write(w *iobuf.Writer) {
  136. w.WriteU8(uint8(c.opcode()))
  137. w.WriteI32(c.Value)
  138. }
  139. func (c *CmdPut4) read(r *iobuf.Reader) {
  140. _ = r.ReadU8()
  141. c.Value = r.ReadI32()
  142. }
  143. type CmdPutRule struct {
  144. Height int32 `json:"h"`
  145. Width int32 `json:"w"`
  146. }
  147. func (CmdPutRule) opcode() opCode { return opPutRule }
  148. func (CmdPutRule) Name() string { return "put_rule" }
  149. func (c CmdPutRule) write(w *iobuf.Writer) {
  150. w.WriteU8(uint8(c.opcode()))
  151. w.WriteI32(c.Height)
  152. w.WriteI32(c.Width)
  153. }
  154. func (c *CmdPutRule) read(r *iobuf.Reader) {
  155. _ = r.ReadU8()
  156. c.Height = r.ReadI32()
  157. c.Width = r.ReadI32()
  158. }
  159. type CmdNOP struct{}
  160. func (CmdNOP) opcode() opCode { return opNOP }
  161. func (CmdNOP) Name() string { return "nop" }
  162. func (CmdNOP) write(w *iobuf.Writer) { w.WriteU8(uint8(opNOP)) }
  163. func (CmdNOP) read(r *iobuf.Reader) { _ = r.ReadU8() }
  164. type CmdBOP struct {
  165. C0 int32 `json:"c0"`
  166. C1 int32 `json:"c1"`
  167. C2 int32 `json:"c2"`
  168. C3 int32 `json:"c3"`
  169. C4 int32 `json:"c4"`
  170. C5 int32 `json:"c5"`
  171. C6 int32 `json:"c6"`
  172. C7 int32 `json:"c7"`
  173. C8 int32 `json:"c8"`
  174. C9 int32 `json:"c9"`
  175. Prev int32 `json:"prev"`
  176. }
  177. func (CmdBOP) opcode() opCode { return opBOP }
  178. func (CmdBOP) Name() string { return "bop" }
  179. func (c CmdBOP) write(w *iobuf.Writer) {
  180. w.WriteU8(uint8(c.opcode()))
  181. w.WriteI32(c.C0)
  182. w.WriteI32(c.C1)
  183. w.WriteI32(c.C2)
  184. w.WriteI32(c.C3)
  185. w.WriteI32(c.C4)
  186. w.WriteI32(c.C5)
  187. w.WriteI32(c.C6)
  188. w.WriteI32(c.C7)
  189. w.WriteI32(c.C8)
  190. w.WriteI32(c.C9)
  191. w.WriteI32(c.Prev)
  192. }
  193. func (c *CmdBOP) read(r *iobuf.Reader) {
  194. _ = r.ReadU8()
  195. c.C0 = r.ReadI32()
  196. c.C1 = r.ReadI32()
  197. c.C2 = r.ReadI32()
  198. c.C3 = r.ReadI32()
  199. c.C4 = r.ReadI32()
  200. c.C5 = r.ReadI32()
  201. c.C6 = r.ReadI32()
  202. c.C7 = r.ReadI32()
  203. c.C8 = r.ReadI32()
  204. c.C9 = r.ReadI32()
  205. c.Prev = r.ReadI32()
  206. }
  207. type CmdEOP struct{}
  208. func (CmdEOP) opcode() opCode { return opEOP }
  209. func (CmdEOP) Name() string { return "eop" }
  210. func (c CmdEOP) write(w *iobuf.Writer) { w.WriteU8(uint8(c.opcode())) }
  211. func (CmdEOP) read(r *iobuf.Reader) { _ = r.ReadU8() }
  212. type CmdPush struct{}
  213. func (CmdPush) opcode() opCode { return opPush }
  214. func (CmdPush) Name() string { return "push" }
  215. func (c CmdPush) write(w *iobuf.Writer) { w.WriteU8(uint8(c.opcode())) }
  216. func (CmdPush) read(r *iobuf.Reader) { _ = r.ReadU8() }
  217. type CmdPop struct{}
  218. func (CmdPop) opcode() opCode { return opPop }
  219. func (CmdPop) Name() string { return "pop" }
  220. func (c CmdPop) write(w *iobuf.Writer) { w.WriteU8(uint8(c.opcode())) }
  221. func (CmdPop) read(r *iobuf.Reader) { _ = r.ReadU8() }
  222. type CmdRight1 struct {
  223. Value int32 `json:"v"`
  224. }
  225. func (CmdRight1) opcode() opCode { return opRight1 }
  226. func (CmdRight1) Name() string { return "right1" }
  227. func (c CmdRight1) write(w *iobuf.Writer) {
  228. w.WriteU8(uint8(c.opcode()))
  229. w.WriteI8(int8(c.Value))
  230. }
  231. func (c *CmdRight1) read(r *iobuf.Reader) {
  232. _ = r.ReadU8()
  233. c.Value = int32(r.ReadI8())
  234. }
  235. type CmdRight2 struct {
  236. Value int32 `json:"v"`
  237. }
  238. func (CmdRight2) opcode() opCode { return opRight2 }
  239. func (CmdRight2) Name() string { return "right2" }
  240. func (c CmdRight2) write(w *iobuf.Writer) {
  241. w.WriteU8(uint8(c.opcode()))
  242. w.WriteI16(int16(c.Value))
  243. }
  244. func (c *CmdRight2) read(r *iobuf.Reader) {
  245. _ = r.ReadU8()
  246. c.Value = int32(r.ReadI16())
  247. }
  248. type CmdRight3 struct {
  249. Value int32 `json:"v"`
  250. }
  251. func (CmdRight3) opcode() opCode { return opRight3 }
  252. func (CmdRight3) Name() string { return "right3" }
  253. func (c CmdRight3) write(w *iobuf.Writer) {
  254. w.WriteU8(uint8(c.opcode()))
  255. w.WriteI24(c.Value)
  256. }
  257. func (c *CmdRight3) read(r *iobuf.Reader) {
  258. _ = r.ReadU8()
  259. c.Value = r.ReadI24()
  260. }
  261. type CmdRight4 struct {
  262. Value int32 `json:"v"`
  263. }
  264. func (CmdRight4) opcode() opCode { return opRight4 }
  265. func (CmdRight4) Name() string { return "right4" }
  266. func (c CmdRight4) write(w *iobuf.Writer) {
  267. w.WriteU8(uint8(c.opcode()))
  268. w.WriteI32(c.Value)
  269. }
  270. func (c *CmdRight4) read(r *iobuf.Reader) {
  271. _ = r.ReadU8()
  272. c.Value = r.ReadI32()
  273. }
  274. type CmdW0 struct{}
  275. func (CmdW0) opcode() opCode { return opW0 }
  276. func (CmdW0) Name() string { return "w0" }
  277. func (c CmdW0) write(w *iobuf.Writer) {
  278. w.WriteU8(uint8(c.opcode()))
  279. }
  280. func (c *CmdW0) read(r *iobuf.Reader) {
  281. _ = r.ReadU8()
  282. }
  283. type CmdW1 struct {
  284. Value int32 `json:"v"`
  285. }
  286. func (CmdW1) opcode() opCode { return opW1 }
  287. func (CmdW1) Name() string { return "w1" }
  288. func (c CmdW1) write(w *iobuf.Writer) {
  289. w.WriteU8(uint8(c.opcode()))
  290. w.WriteI8(int8(c.Value))
  291. }
  292. func (c *CmdW1) read(r *iobuf.Reader) {
  293. _ = r.ReadU8()
  294. c.Value = int32(r.ReadI8())
  295. }
  296. type CmdW2 struct {
  297. Value int32 `json:"v"`
  298. }
  299. func (CmdW2) opcode() opCode { return opW2 }
  300. func (CmdW2) Name() string { return "w2" }
  301. func (c CmdW2) write(w *iobuf.Writer) {
  302. w.WriteU8(uint8(c.opcode()))
  303. w.WriteI16(int16(c.Value))
  304. }
  305. func (c *CmdW2) read(r *iobuf.Reader) {
  306. _ = r.ReadU8()
  307. c.Value = int32(r.ReadI16())
  308. }
  309. type CmdW3 struct {
  310. Value int32 `json:"v"`
  311. }
  312. func (CmdW3) opcode() opCode { return opW3 }
  313. func (CmdW3) Name() string { return "w3" }
  314. func (c CmdW3) write(w *iobuf.Writer) {
  315. w.WriteU8(uint8(c.opcode()))
  316. w.WriteI24(c.Value)
  317. }
  318. func (c *CmdW3) read(r *iobuf.Reader) {
  319. _ = r.ReadU8()
  320. c.Value = r.ReadI24()
  321. }
  322. type CmdW4 struct {
  323. Value int32 `json:"v"`
  324. }
  325. func (CmdW4) opcode() opCode { return opW4 }
  326. func (CmdW4) Name() string { return "w4" }
  327. func (c CmdW4) write(w *iobuf.Writer) {
  328. w.WriteU8(uint8(c.opcode()))
  329. w.WriteI32(c.Value)
  330. }
  331. func (c *CmdW4) read(r *iobuf.Reader) {
  332. _ = r.ReadU8()
  333. c.Value = r.ReadI32()
  334. }
  335. type CmdX0 struct{}
  336. func (CmdX0) opcode() opCode { return opX0 }
  337. func (CmdX0) Name() string { return "x0" }
  338. func (c CmdX0) write(w *iobuf.Writer) {
  339. w.WriteU8(uint8(c.opcode()))
  340. }
  341. func (c *CmdX0) read(r *iobuf.Reader) {
  342. _ = r.ReadU8()
  343. }
  344. type CmdX1 struct {
  345. Value int32 `json:"v"`
  346. }
  347. func (CmdX1) opcode() opCode { return opX1 }
  348. func (CmdX1) Name() string { return "x1" }
  349. func (c CmdX1) write(w *iobuf.Writer) {
  350. w.WriteU8(uint8(c.opcode()))
  351. w.WriteI8(int8(c.Value))
  352. }
  353. func (c *CmdX1) read(r *iobuf.Reader) {
  354. _ = r.ReadU8()
  355. c.Value = int32(r.ReadI8())
  356. }
  357. type CmdX2 struct {
  358. Value int32 `json:"v"`
  359. }
  360. func (CmdX2) opcode() opCode { return opX2 }
  361. func (CmdX2) Name() string { return "x2" }
  362. func (c CmdX2) write(w *iobuf.Writer) {
  363. w.WriteU8(uint8(c.opcode()))
  364. w.WriteI16(int16(c.Value))
  365. }
  366. func (c *CmdX2) read(r *iobuf.Reader) {
  367. _ = r.ReadU8()
  368. c.Value = int32(r.ReadI16())
  369. }
  370. type CmdX3 struct {
  371. Value int32 `json:"v"`
  372. }
  373. func (CmdX3) opcode() opCode { return opX3 }
  374. func (CmdX3) Name() string { return "x3" }
  375. func (c CmdX3) write(w *iobuf.Writer) {
  376. w.WriteU8(uint8(c.opcode()))
  377. w.WriteI24(c.Value)
  378. }
  379. func (c *CmdX3) read(r *iobuf.Reader) {
  380. _ = r.ReadU8()
  381. c.Value = r.ReadI24()
  382. }
  383. type CmdX4 struct {
  384. Value int32 `json:"v"`
  385. }
  386. func (CmdX4) opcode() opCode { return opX4 }
  387. func (CmdX4) Name() string { return "x4" }
  388. func (c CmdX4) write(w *iobuf.Writer) {
  389. w.WriteU8(uint8(c.opcode()))
  390. w.WriteI32(c.Value)
  391. }
  392. func (c *CmdX4) read(r *iobuf.Reader) {
  393. _ = r.ReadU8()
  394. c.Value = r.ReadI32()
  395. }
  396. type CmdDown1 struct {
  397. Value int32 `json:"v"`
  398. }
  399. func (CmdDown1) opcode() opCode { return opDown1 }
  400. func (CmdDown1) Name() string { return "down1" }
  401. func (c CmdDown1) write(w *iobuf.Writer) {
  402. w.WriteU8(uint8(c.opcode()))
  403. w.WriteI8(int8(c.Value))
  404. }
  405. func (c *CmdDown1) read(r *iobuf.Reader) {
  406. _ = r.ReadU8()
  407. c.Value = int32(r.ReadI8())
  408. }
  409. type CmdDown2 struct {
  410. Value int32 `json:"v"`
  411. }
  412. func (CmdDown2) opcode() opCode { return opDown2 }
  413. func (CmdDown2) Name() string { return "down2" }
  414. func (c CmdDown2) write(w *iobuf.Writer) {
  415. w.WriteU8(uint8(c.opcode()))
  416. w.WriteI16(int16(c.Value))
  417. }
  418. func (c *CmdDown2) read(r *iobuf.Reader) {
  419. _ = r.ReadU8()
  420. c.Value = int32(r.ReadI16())
  421. }
  422. type CmdDown3 struct {
  423. Value int32 `json:"v"`
  424. }
  425. func (CmdDown3) opcode() opCode { return opDown3 }
  426. func (CmdDown3) Name() string { return "down3" }
  427. func (c CmdDown3) write(w *iobuf.Writer) {
  428. w.WriteU8(uint8(c.opcode()))
  429. w.WriteI24(c.Value)
  430. }
  431. func (c *CmdDown3) read(r *iobuf.Reader) {
  432. _ = r.ReadU8()
  433. c.Value = r.ReadI24()
  434. }
  435. type CmdDown4 struct {
  436. Value int32 `json:"v"`
  437. }
  438. func (CmdDown4) opcode() opCode { return opDown4 }
  439. func (CmdDown4) Name() string { return "down4" }
  440. func (c CmdDown4) write(w *iobuf.Writer) {
  441. w.WriteU8(uint8(c.opcode()))
  442. w.WriteI32(c.Value)
  443. }
  444. func (c *CmdDown4) read(r *iobuf.Reader) {
  445. _ = r.ReadU8()
  446. c.Value = r.ReadI32()
  447. }
  448. type CmdY0 struct{}
  449. func (CmdY0) opcode() opCode { return opY0 }
  450. func (CmdY0) Name() string { return "y0" }
  451. func (c CmdY0) write(w *iobuf.Writer) {
  452. w.WriteU8(uint8(c.opcode()))
  453. }
  454. func (c *CmdY0) read(r *iobuf.Reader) {
  455. _ = r.ReadU8()
  456. }
  457. type CmdY1 struct {
  458. Value int32 `json:"v"`
  459. }
  460. func (CmdY1) opcode() opCode { return opY1 }
  461. func (CmdY1) Name() string { return "y1" }
  462. func (c CmdY1) write(w *iobuf.Writer) {
  463. w.WriteU8(uint8(c.opcode()))
  464. w.WriteI8(int8(c.Value))
  465. }
  466. func (c *CmdY1) read(r *iobuf.Reader) {
  467. _ = r.ReadU8()
  468. c.Value = int32(r.ReadI8())
  469. }
  470. type CmdY2 struct {
  471. Value int32 `json:"v"`
  472. }
  473. func (CmdY2) opcode() opCode { return opY2 }
  474. func (CmdY2) Name() string { return "y2" }
  475. func (c CmdY2) write(w *iobuf.Writer) {
  476. w.WriteU8(uint8(c.opcode()))
  477. w.WriteI16(int16(c.Value))
  478. }
  479. func (c *CmdY2) read(r *iobuf.Reader) {
  480. _ = r.ReadU8()
  481. c.Value = int32(r.ReadI16())
  482. }
  483. type CmdY3 struct {
  484. Value int32 `json:"v"`
  485. }
  486. func (CmdY3) opcode() opCode { return opY3 }
  487. func (CmdY3) Name() string { return "y3" }
  488. func (c CmdY3) write(w *iobuf.Writer) {
  489. w.WriteU8(uint8(c.opcode()))
  490. w.WriteI24(c.Value)
  491. }
  492. func (c *CmdY3) read(r *iobuf.Reader) {
  493. _ = r.ReadU8()
  494. c.Value = r.ReadI24()
  495. }
  496. type CmdY4 struct {
  497. Value int32 `json:"v"`
  498. }
  499. func (CmdY4) opcode() opCode { return opY4 }
  500. func (CmdY4) Name() string { return "y4" }
  501. func (c CmdY4) write(w *iobuf.Writer) {
  502. w.WriteU8(uint8(c.opcode()))
  503. w.WriteI32(c.Value)
  504. }
  505. func (c *CmdY4) read(r *iobuf.Reader) {
  506. _ = r.ReadU8()
  507. c.Value = r.ReadI32()
  508. }
  509. type CmdZ0 struct{}
  510. func (CmdZ0) opcode() opCode { return opZ0 }
  511. func (CmdZ0) Name() string { return "z0" }
  512. func (c CmdZ0) write(w *iobuf.Writer) {
  513. w.WriteU8(uint8(c.opcode()))
  514. }
  515. func (c *CmdZ0) read(r *iobuf.Reader) {
  516. _ = r.ReadU8()
  517. }
  518. type CmdZ1 struct {
  519. Value int32 `json:"v"`
  520. }
  521. func (CmdZ1) opcode() opCode { return opZ1 }
  522. func (CmdZ1) Name() string { return "z1" }
  523. func (c CmdZ1) write(w *iobuf.Writer) {
  524. w.WriteU8(uint8(c.opcode()))
  525. w.WriteI8(int8(c.Value))
  526. }
  527. func (c *CmdZ1) read(r *iobuf.Reader) {
  528. _ = r.ReadU8()
  529. c.Value = int32(r.ReadI8())
  530. }
  531. type CmdZ2 struct {
  532. Value int32 `json:"v"`
  533. }
  534. func (CmdZ2) opcode() opCode { return opZ2 }
  535. func (CmdZ2) Name() string { return "z2" }
  536. func (c CmdZ2) write(w *iobuf.Writer) {
  537. w.WriteU8(uint8(c.opcode()))
  538. w.WriteI16(int16(c.Value))
  539. }
  540. func (c *CmdZ2) read(r *iobuf.Reader) {
  541. _ = r.ReadU8()
  542. c.Value = int32(r.ReadI16())
  543. }
  544. type CmdZ3 struct {
  545. Value int32 `json:"v"`
  546. }
  547. func (CmdZ3) opcode() opCode { return opZ3 }
  548. func (CmdZ3) Name() string { return "z3" }
  549. func (c CmdZ3) write(w *iobuf.Writer) {
  550. w.WriteU8(uint8(c.opcode()))
  551. w.WriteI24(c.Value)
  552. }
  553. func (c *CmdZ3) read(r *iobuf.Reader) {
  554. _ = r.ReadU8()
  555. c.Value = r.ReadI24()
  556. }
  557. type CmdZ4 struct {
  558. Value int32 `json:"v"`
  559. }
  560. func (CmdZ4) opcode() opCode { return opZ4 }
  561. func (CmdZ4) Name() string { return "z4" }
  562. func (c CmdZ4) write(w *iobuf.Writer) {
  563. w.WriteU8(uint8(c.opcode()))
  564. w.WriteI32(c.Value)
  565. }
  566. func (c *CmdZ4) read(r *iobuf.Reader) {
  567. _ = r.ReadU8()
  568. c.Value = r.ReadI32()
  569. }
  570. type CmdFntNum struct {
  571. ID uint8 `json:"-"`
  572. }
  573. func (cmd CmdFntNum) opcode() opCode { return (opFntNum00 + opCode(cmd.ID)) }
  574. func (cmd CmdFntNum) Name() string { return fmt.Sprintf("fnt_num_%d", cmd.ID) }
  575. func (c CmdFntNum) write(w *iobuf.Writer) {
  576. w.WriteU8(uint8(c.opcode()))
  577. }
  578. func (c *CmdFntNum) read(r *iobuf.Reader) {
  579. op := r.ReadU8()
  580. c.ID = op - uint8(opFntNum00)
  581. }
  582. type CmdFnt1 struct {
  583. ID uint32
  584. }
  585. func (CmdFnt1) opcode() opCode { return opFnt1 }
  586. func (CmdFnt1) Name() string { return "fnt_1" }
  587. func (c CmdFnt1) write(w *iobuf.Writer) {
  588. w.WriteU8(uint8(c.opcode()))
  589. w.WriteU8(uint8(c.ID))
  590. }
  591. func (c *CmdFnt1) read(r *iobuf.Reader) {
  592. _ = r.ReadU8()
  593. c.ID = uint32(r.ReadU8())
  594. }
  595. type CmdFnt2 struct {
  596. ID uint32
  597. }
  598. func (CmdFnt2) opcode() opCode { return opFnt2 }
  599. func (CmdFnt2) Name() string { return "fnt_2" }
  600. func (c CmdFnt2) write(w *iobuf.Writer) {
  601. w.WriteU8(uint8(c.opcode()))
  602. w.WriteU16(uint16(c.ID))
  603. }
  604. func (c *CmdFnt2) read(r *iobuf.Reader) {
  605. _ = r.ReadU8()
  606. c.ID = uint32(r.ReadU16())
  607. }
  608. type CmdFnt3 struct {
  609. ID uint32
  610. }
  611. func (CmdFnt3) opcode() opCode { return opFnt3 }
  612. func (CmdFnt3) Name() string { return "fnt_3" }
  613. func (c CmdFnt3) write(w *iobuf.Writer) {
  614. w.WriteU8(uint8(c.opcode()))
  615. w.WriteU24(c.ID)
  616. }
  617. func (c *CmdFnt3) read(r *iobuf.Reader) {
  618. _ = r.ReadU8()
  619. c.ID = r.ReadU24()
  620. }
  621. type CmdFnt4 struct {
  622. ID int32
  623. }
  624. func (CmdFnt4) opcode() opCode { return opFnt4 }
  625. func (CmdFnt4) Name() string { return "fnt_4" }
  626. func (c CmdFnt4) write(w *iobuf.Writer) {
  627. w.WriteU8(uint8(c.opcode()))
  628. w.WriteU32(uint32(c.ID))
  629. }
  630. func (c *CmdFnt4) read(r *iobuf.Reader) {
  631. _ = r.ReadU8()
  632. c.ID = r.ReadI32()
  633. }
  634. type CmdXXX1 struct {
  635. Value []byte
  636. }
  637. func (CmdXXX1) opcode() opCode { return opXXX1 }
  638. func (CmdXXX1) Name() string { return "xxx1" }
  639. func (c CmdXXX1) write(w *iobuf.Writer) {
  640. w.WriteU8(uint8(c.opcode()))
  641. w.WriteU8(uint8(len(c.Value)))
  642. w.WriteBuf(c.Value)
  643. }
  644. func (c *CmdXXX1) read(r *iobuf.Reader) {
  645. _ = r.ReadU8()
  646. n := int(r.ReadU8())
  647. c.Value = r.ReadBuf(n)
  648. }
  649. type CmdXXX2 struct {
  650. Value []byte
  651. }
  652. func (CmdXXX2) opcode() opCode { return opXXX2 }
  653. func (CmdXXX2) Name() string { return "xxx2" }
  654. func (c CmdXXX2) write(w *iobuf.Writer) {
  655. w.WriteU8(uint8(c.opcode()))
  656. w.WriteU16(uint16(len(c.Value)))
  657. w.WriteBuf(c.Value)
  658. }
  659. func (c *CmdXXX2) read(r *iobuf.Reader) {
  660. _ = r.ReadU8()
  661. n := int(r.ReadU16())
  662. c.Value = r.ReadBuf(n)
  663. }
  664. type CmdXXX3 struct {
  665. Value []byte
  666. }
  667. func (CmdXXX3) opcode() opCode { return opXXX3 }
  668. func (CmdXXX3) Name() string { return "xxx3" }
  669. func (c CmdXXX3) write(w *iobuf.Writer) {
  670. w.WriteU8(uint8(c.opcode()))
  671. w.WriteU24(uint32(len(c.Value)))
  672. w.WriteBuf(c.Value)
  673. }
  674. func (c *CmdXXX3) read(r *iobuf.Reader) {
  675. _ = r.ReadU8()
  676. n := int(r.ReadU24())
  677. c.Value = r.ReadBuf(n)
  678. }
  679. type CmdXXX4 struct {
  680. Value []byte
  681. }
  682. func (CmdXXX4) opcode() opCode { return opXXX4 }
  683. func (CmdXXX4) Name() string { return "xxx4" }
  684. func (c CmdXXX4) write(w *iobuf.Writer) {
  685. w.WriteU8(uint8(c.opcode()))
  686. w.WriteU32(uint32(len(c.Value)))
  687. w.WriteBuf(c.Value)
  688. }
  689. func (c *CmdXXX4) read(r *iobuf.Reader) {
  690. _ = r.ReadU8()
  691. n := int(r.ReadU32())
  692. c.Value = r.ReadBuf(n)
  693. }
  694. type CmdFntDef1 struct {
  695. ID uint8 `json:"id"`
  696. Checksum uint32 `json:"chksum"`
  697. Size int32 `json:"size"`
  698. Design int32 `json:"dsize"`
  699. Area string `json:"area"`
  700. Font string `json:"name"`
  701. }
  702. func (CmdFntDef1) opcode() opCode { return opFntDef1 }
  703. func (CmdFntDef1) Name() string { return "fnt_def1" }
  704. func (c CmdFntDef1) write(w *iobuf.Writer) {
  705. w.WriteU8(uint8(c.opcode()))
  706. w.WriteU8(c.ID)
  707. w.WriteU32(c.Checksum)
  708. w.WriteI32(c.Size)
  709. w.WriteI32(c.Design)
  710. w.WriteU8(uint8(len(c.Area)))
  711. w.WriteU8(uint8(len(c.Font)))
  712. w.WriteBuf([]byte(c.Area))
  713. w.WriteBuf([]byte(c.Font))
  714. }
  715. func (c *CmdFntDef1) read(r *iobuf.Reader) {
  716. _ = r.ReadU8()
  717. c.ID = r.ReadU8()
  718. c.Checksum = r.ReadU32()
  719. c.Size = r.ReadI32()
  720. c.Design = r.ReadI32()
  721. area := r.ReadU8()
  722. font := r.ReadU8()
  723. buf := r.ReadBuf(int(area + font))
  724. c.Area = string(buf[:area])
  725. c.Font = string(buf[area:])
  726. }
  727. type CmdFntDef2 struct {
  728. ID uint16 `json:"id"`
  729. Checksum uint32 `json:"chksum"`
  730. Size int32 `json:"size"`
  731. Design int32 `json:"dsize"`
  732. Area string `json:"area"`
  733. Font string `json:"name"`
  734. }
  735. func (CmdFntDef2) opcode() opCode { return opFntDef2 }
  736. func (CmdFntDef2) Name() string { return "fnt_def2" }
  737. func (c CmdFntDef2) write(w *iobuf.Writer) {
  738. w.WriteU8(uint8(c.opcode()))
  739. w.WriteU16(c.ID)
  740. w.WriteU32(c.Checksum)
  741. w.WriteI32(c.Size)
  742. w.WriteI32(c.Design)
  743. w.WriteU8(uint8(len(c.Area)))
  744. w.WriteU8(uint8(len(c.Font)))
  745. w.WriteBuf([]byte(c.Area))
  746. w.WriteBuf([]byte(c.Font))
  747. }
  748. func (c *CmdFntDef2) read(r *iobuf.Reader) {
  749. _ = r.ReadU8()
  750. c.ID = r.ReadU16()
  751. c.Checksum = r.ReadU32()
  752. c.Size = r.ReadI32()
  753. c.Design = r.ReadI32()
  754. area := r.ReadU8()
  755. font := r.ReadU8()
  756. buf := r.ReadBuf(int(area + font))
  757. c.Area = string(buf[:area])
  758. c.Font = string(buf[area:])
  759. }
  760. type CmdFntDef3 struct {
  761. ID uint32 `json:"id"`
  762. Checksum uint32 `json:"chksum"`
  763. Size int32 `json:"size"`
  764. Design int32 `json:"dsize"`
  765. Area string `json:"area"`
  766. Font string `json:"name"`
  767. }
  768. func (CmdFntDef3) opcode() opCode { return opFntDef3 }
  769. func (CmdFntDef3) Name() string { return "fnt_def3" }
  770. func (c CmdFntDef3) write(w *iobuf.Writer) {
  771. w.WriteU8(uint8(c.opcode()))
  772. w.WriteU24(c.ID)
  773. w.WriteU32(c.Checksum)
  774. w.WriteI32(c.Size)
  775. w.WriteI32(c.Design)
  776. w.WriteU8(uint8(len(c.Area)))
  777. w.WriteU8(uint8(len(c.Font)))
  778. w.WriteBuf([]byte(c.Area))
  779. w.WriteBuf([]byte(c.Font))
  780. }
  781. func (c *CmdFntDef3) read(r *iobuf.Reader) {
  782. _ = r.ReadU8()
  783. c.ID = r.ReadU24()
  784. c.Checksum = r.ReadU32()
  785. c.Size = r.ReadI32()
  786. c.Design = r.ReadI32()
  787. area := r.ReadU8()
  788. font := r.ReadU8()
  789. buf := r.ReadBuf(int(area + font))
  790. c.Area = string(buf[:area])
  791. c.Font = string(buf[area:])
  792. }
  793. type CmdFntDef4 struct {
  794. ID int32 `json:"id"`
  795. Checksum uint32 `json:"chksum"`
  796. Size int32 `json:"size"`
  797. Design int32 `json:"dsize"`
  798. Area string `json:"area"`
  799. Font string `json:"name"`
  800. }
  801. func (CmdFntDef4) opcode() opCode { return opFntDef4 }
  802. func (CmdFntDef4) Name() string { return "fnt_def4" }
  803. func (c CmdFntDef4) write(w *iobuf.Writer) {
  804. w.WriteU8(uint8(c.opcode()))
  805. w.WriteU32(uint32(c.ID))
  806. w.WriteU32(c.Checksum)
  807. w.WriteI32(c.Size)
  808. w.WriteI32(c.Design)
  809. w.WriteU8(uint8(len(c.Area)))
  810. w.WriteU8(uint8(len(c.Font)))
  811. w.WriteBuf([]byte(c.Area))
  812. w.WriteBuf([]byte(c.Font))
  813. }
  814. func (c *CmdFntDef4) read(r *iobuf.Reader) {
  815. _ = r.ReadU8()
  816. c.ID = r.ReadI32()
  817. c.Checksum = r.ReadU32()
  818. c.Size = r.ReadI32()
  819. c.Design = r.ReadI32()
  820. area := r.ReadU8()
  821. font := r.ReadU8()
  822. buf := r.ReadBuf(int(area + font))
  823. c.Area = string(buf[:area])
  824. c.Font = string(buf[area:])
  825. }
  826. type CmdPre struct {
  827. Version uint8 `json:"version"`
  828. Num int32 `json:"num"`
  829. Den int32 `json:"den"`
  830. Mag int32 `json:"mag"`
  831. Msg string `json:"msg"`
  832. }
  833. func (cmd CmdPre) opcode() opCode { return opPre }
  834. func (cmd CmdPre) Name() string { return "pre" }
  835. func (c CmdPre) write(w *iobuf.Writer) {
  836. w.WriteU8(uint8(c.opcode()))
  837. w.WriteU8(c.Version)
  838. w.WriteI32(c.Num)
  839. w.WriteI32(c.Den)
  840. w.WriteI32(c.Mag)
  841. w.WriteU8(uint8(len(c.Msg)))
  842. w.WriteBuf([]byte(c.Msg))
  843. }
  844. func (c *CmdPre) read(r *iobuf.Reader) {
  845. _ = r.ReadU8()
  846. c.Version = r.ReadU8()
  847. c.Num = r.ReadI32()
  848. c.Den = r.ReadI32()
  849. c.Mag = r.ReadI32()
  850. n := r.ReadU8()
  851. c.Msg = string(r.ReadBuf(int(n)))
  852. }
  853. type CmdPost struct {
  854. BOP uint32 `json:"bop"`
  855. Num int32 `json:"num"`
  856. Den int32 `json:"den"`
  857. Mag int32 `json:"mag"`
  858. Height uint32 `json:"height"`
  859. Width uint32 `json:"width"`
  860. MaxStack uint16 `json:"max_stack"`
  861. Pages uint16 `json:"pages"`
  862. }
  863. func (CmdPost) opcode() opCode { return opPost }
  864. func (CmdPost) Name() string { return "post" }
  865. func (c CmdPost) write(w *iobuf.Writer) {
  866. w.WriteU8(uint8(c.opcode()))
  867. w.WriteU32(c.BOP)
  868. w.WriteI32(c.Num)
  869. w.WriteI32(c.Den)
  870. w.WriteI32(c.Mag)
  871. w.WriteU32(c.Height)
  872. w.WriteU32(c.Width)
  873. w.WriteU16(c.MaxStack)
  874. w.WriteU16(c.Pages)
  875. }
  876. func (c *CmdPost) read(r *iobuf.Reader) {
  877. _ = r.ReadU8()
  878. c.BOP = r.ReadU32()
  879. c.Num = r.ReadI32()
  880. c.Den = r.ReadI32()
  881. c.Mag = r.ReadI32()
  882. c.Height = r.ReadU32()
  883. c.Width = r.ReadU32()
  884. c.MaxStack = r.ReadU16()
  885. c.Pages = r.ReadU16()
  886. }
  887. type CmdPostPost struct {
  888. BOP uint32 `json:"bop"`
  889. Version uint8 `json:"version"`
  890. Trailer uint8 `json:"trailer"`
  891. }
  892. func (CmdPostPost) opcode() opCode { return opPostPost }
  893. func (CmdPostPost) Name() string { return "post_post" }
  894. func (c CmdPostPost) write(w *iobuf.Writer) {
  895. w.WriteU8(uint8(c.opcode()))
  896. w.WriteU32(c.BOP)
  897. w.WriteU8(c.Version)
  898. for i := 0; i < int(c.Trailer); i++ {
  899. w.WriteU8(dviEOF)
  900. }
  901. }
  902. func (c *CmdPostPost) read(r *iobuf.Reader) {
  903. _ = r.ReadU8()
  904. c.BOP = r.ReadU32()
  905. c.Version = r.ReadU8()
  906. c.Trailer = 0
  907. for r.Pos() < r.Len() {
  908. v := r.ReadU8()
  909. if v != dviEOF {
  910. r.SetPos(r.Pos() - 1)
  911. break
  912. }
  913. c.Trailer++
  914. }
  915. }