From d8d54bb990f17c7eb61a3a24d87943636a747e35 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Sun, 1 Nov 2026 23:22:25 +0200 Subject: [PATCH] feat(xie): a client-chosen XIE image is displayed on the VT1200 The XIE path now runs end to end: XieCreateImage -> XieCreatePhoto -> XiePutTile -> XieExport(photomap -> depth-1 pixmap) -> XCopyArea(pixmap -> window), and the client's tile appears on screen at the client's own window position, pixel-exact. TWO FAULTS BEHIND THE LONG DEAD END 1. Device model (harness/mame/vt1200.cpp, opt-in VT1200_ACCEL=1). The accelerator's output port 0x5600200 returns the pixel stream the firmware pushed into the FIFO -- the firmware then stores it into the drawable itself (file 0x125528: MOVE *B6,*B1 ; ADDK 0x10,B1). The FIFO read pointer was never reset between transfers, so consecutive exports read stale words and the same fill produced 759 then 516 set pixels. Reset m_fifo_in/out on the data-register write; the export is now deterministic. 2. Measurement, not the device. - dwt/screenshot.py without --real reads 1024x1024 at a 128-byte row stride, but the VR319 default programs 1280x1024 at a 2048-bit (256-byte) pitch. That is the "shifted" picture; --real is the correct read. - The earlier "0 differing bytes over 128 KiB" VRAM comparison stepped peek by 1024 *bit* addresses, so it scanned rows 0..63 only -- never the window at rows 200..263. Over the real raster the white/black diff is 576 bytes spanning exactly those rows. - New instrument: decclient does a server-side XGetImage readback of the pixmap and window and counts set pixels. That separated "the server never drew it" from "the framebuffer view is wrong". EVIDENCE (reproduced twice, the second time from a fresh machine) no export vs 0xFF : 4096 / 4096 pixels differ no export vs 0x00 : 0 / 4096 (the window background is black) 0xFF vs 0x00 : 4096 / 4096 0xAA vs 0x0F : 2048 / 4096 (the two stripe phases) Tile byte 0xAA reproduces as 1-pixel vertical stripes, 0x0F as 4-pixel, with no shear -- so the placement is right and the pixels are the client's. Contents: xie/ holds DEC XIE 2.3 headers, 84 man pages and complete client+server source; a libXie.a and decclient built from DEC's own code; the XIE probes; and evidence/ with every measurement, including explicit retractions of the earlier wrong readings (VRAM_IDENTICAL_FOR_BOTH_FILLS and friends). xie/evidence/XIE_IMAGE_DISPLAYED.md is the report; frames are in xie/evidence/png/. The accelerator model stays opt-in: it answers the status poll and relays the pixel stream, but performs no compositing, so it is a stand-in and the verified default configuration is unchanged (a no-env run still parks in the level-0 diagnostics menu at PC=3FDCE400). --- harness/mame/vt1200.cpp | 99 +- harness/mame/xie_acc.lua | 8 + harness/mame/xie_acc2.lua | 9 + harness/mame/xie_acc3.lua | 5 + harness/mame/xie_acc4.lua | 5 + harness/mame/xie_acc5.lua | 4 + harness/mame/xie_acct.lua | 4 + harness/mame/xie_args.lua | 9 + harness/mame/xie_arm2.lua | 15 + harness/mame/xie_armchk.lua | 14 + harness/mame/xie_b36.lua | 13 + harness/mame/xie_b8s.lua | 28 + harness/mame/xie_b8t.lua | 27 + harness/mame/xie_b8v.lua | 27 + harness/mame/xie_b8w.lua | 25 + harness/mame/xie_chain.lua | 12 + harness/mame/xie_cln.lua | 13 + harness/mame/xie_cmp.lua | 17 + harness/mame/xie_ctl.lua | 5 + harness/mame/xie_cvt.lua | 15 + harness/mame/xie_ddx.lua | 13 + harness/mame/xie_disp.lua | 17 + harness/mame/xie_disp2.lua | 18 + harness/mame/xie_dst.lua | 9 + harness/mame/xie_eb4.lua | 24 + harness/mame/xie_elem.lua | 10 + harness/mame/xie_elw.lua | 26 + harness/mame/xie_elw2.lua | 27 + harness/mame/xie_ex1.lua | 17 + harness/mame/xie_ex2.lua | 14 + harness/mame/xie_ex3.lua | 15 + harness/mame/xie_exbr.lua | 13 + harness/mame/xie_exec.lua | 15 + harness/mame/xie_expdbg.lua | 15 + harness/mame/xie_ext.lua | 14 + harness/mame/xie_fix.lua | 8 + harness/mame/xie_fix2.lua | 12 + harness/mame/xie_fix3.lua | 10 + harness/mame/xie_gate_only.lua | 12 + harness/mame/xie_gateop.lua | 13 + harness/mame/xie_handoff.lua | 15 + harness/mame/xie_hlp.lua | 15 + harness/mame/xie_import.lua | 10 + harness/mame/xie_min.lua | 9 + harness/mame/xie_min2.lua | 10 + harness/mame/xie_min3.lua | 12 + harness/mame/xie_min4.lua | 18 + harness/mame/xie_min5.lua | 16 + harness/mame/xie_min6.lua | 14 + harness/mame/xie_min7.lua | 14 + harness/mame/xie_min8.lua | 12 + harness/mame/xie_min9.lua | 16 + harness/mame/xie_outcell.lua | 16 + harness/mame/xie_outw.lua | 19 + harness/mame/xie_pc.lua | 12 + harness/mame/xie_pcfix.lua | 14 + harness/mame/xie_pg.lua | 12 + harness/mame/xie_pg2.lua | 22 + harness/mame/xie_r48.lua | 12 + harness/mame/xie_rd.lua | 14 + harness/mame/xie_rd200.lua | 4 + harness/mame/xie_regs.lua | 13 + harness/mame/xie_resource.lua | 178 + harness/mame/xie_rp20.lua | 12 + harness/mame/xie_s19.lua | 14 + harness/mame/xie_s19b.lua | 13 + harness/mame/xie_s19p.lua | 14 + harness/mame/xie_s19q.lua | 13 + harness/mame/xie_s19r.lua | 17 + harness/mame/xie_s19x.lua | 15 + harness/mame/xie_s43.lua | 13 + harness/mame/xie_s43b.lua | 12 + harness/mame/xie_s43c.lua | 20 + harness/mame/xie_s43d.lua | 16 + harness/mame/xie_s43e.lua | 16 + harness/mame/xie_s44.lua | 14 + harness/mame/xie_s44b.lua | 14 + harness/mame/xie_s44c.lua | 11 + harness/mame/xie_scl.lua | 11 + harness/mame/xie_scl2.lua | 11 + harness/mame/xie_sel.lua | 15 + harness/mame/xie_src.lua | 10 + harness/mame/xie_st.lua | 9 + harness/mame/xie_stage.lua | 4 + harness/mame/xie_stg2.lua | 4 + harness/mame/xie_stg3.lua | 4 + harness/mame/xie_stgr.lua | 4 + harness/mame/xie_stgrw.lua | 4 + harness/mame/xie_store.lua | 11 + harness/mame/xie_trace.lua | 80 + harness/mame/xie_val.lua | 17 + harness/mame/xie_vw.lua | 5 + harness/mame/xie_vwr.lua | 4 + harness/mame/xie_w198.lua | 9 + harness/mame/xie_watch6.lua | 24 + harness/mame/xie_watch7.lua | 26 + harness/mame/xie_who.lua | 13 + harness/mame/xie_who2.lua | 15 + harness/mame/xie_wpb8.lua | 27 + harness/mame/xie_xfer.lua | 10 + xie/.gitignore | 4 + xie/GHIDRA_XIE.md | 583 + xie/GHIDRA_XIE_HANDLERS.md | 610 + xie/GHIDRA_XIE_IMAGE_PATH.md | 400 + xie/GHIDRA_XIE_IMPORT.md | 285 + xie/GHIDRA_XIE_PIPELINE.md | 340 + xie/GHIDRA_XIE_SLOT20.md | 302 + xie/MAME_XIE_TRACE.md | 232 + xie/README.md | 1213 ++ xie/build.sh | 41 + xie/build/abort.o | Bin 0 -> 2016 bytes xie/build/await.o | Bin 0 -> 2016 bytes xie/build/clientdata.o | Bin 0 -> 3552 bytes xie/build/colorlist.o | Bin 0 -> 4488 bytes xie/build/conven.o | Bin 0 -> 14816 bytes xie/build/dec/MITMisc.h | 88 + xie/build/dec/X.h | 717 + xie/build/dec/X11/extensions/XieAppl.h | 295 + xie/build/dec/X11/extensions/XieDdx.h | 935 + xie/build/dec/X11/extensions/XieFloat.h | 99 + xie/build/dec/X11/extensions/XieLib.h | 372 + xie/build/dec/X11/extensions/XieProto.h | 1228 ++ xie/build/dec/X11/extensions/XieUdpDef.h | 118 + xie/build/dec/XI.h | 263 + xie/build/dec/XInput.h | 849 + xie/build/dec/XIproto.h | 1425 ++ xie/build/dec/XShm.h | 174 + xie/build/dec/XTest.h | 151 + xie/build/dec/Xext.h | 74 + xie/build/dec/XieAppl.h | 295 + xie/build/dec/XieDdx.h | 935 + xie/build/dec/XieFloat.h | 99 + xie/build/dec/XieLib.h | 372 + xie/build/dec/XieProto.h | 1228 ++ xie/build/dec/XieUdpDef.h | 118 + xie/build/dec/bits.h | 114 + xie/build/dec/decclient | Bin 0 -> 130144 bytes xie/build/dec/extutil.h | 148 + xie/build/dec/libXie.a | Bin 0 -> 140164 bytes xie/build/dec/mitmiscstr.h | 81 + xie/build/dec/multibuf.h | 305 + xie/build/dec/multibufst.h | 301 + xie/build/dec/obj/XieConvert.o | Bin 0 -> 56336 bytes xie/build/dec/obj/XieFloat.o | Bin 0 -> 2504 bytes xie/build/dec/obj/XieLibEvents.o | Bin 0 -> 3008 bytes xie/build/dec/obj/XieLibImage.o | Bin 0 -> 9936 bytes xie/build/dec/obj/XieLibProcess.o | Bin 0 -> 17936 bytes xie/build/dec/obj/XieLibResource.o | Bin 0 -> 16744 bytes xie/build/dec/obj/XieLibSession.o | Bin 0 -> 11104 bytes xie/build/dec/obj/XieLibTransport.o | Bin 0 -> 12520 bytes xie/build/dec/obj/XieLibUtils.o | Bin 0 -> 7600 bytes xie/build/dec/shape.h | 222 + xie/build/dec/shapestr.h | 255 + xie/build/dec/shmstr.h | 207 + xie/build/dec/smt.h | 106 + xie/build/dec/smtstr.h | 194 + xie/build/dec/xemacros.h | 358 + xie/build/dec/xestream.h | 201 + xie/build/dec/xkmeproto_include.h | 123 + xie/build/dec/xtestext1.h | 327 + xie/build/dec/xteststr.h | 121 + xie/build/dec/xtrapddmi.h | 181 + xie/build/dec/xtrapdi.h | 539 + xie/build/dec/xtraplib.h | 158 + xie/build/dec/xtraplibp.h | 192 + xie/build/dec/xtrapproto.h | 210 + xie/build/elements.o | Bin 0 -> 12496 bytes xie/build/errors.o | Bin 0 -> 1416 bytes xie/build/events.o | Bin 0 -> 2136 bytes xie/build/free.o | Bin 0 -> 2504 bytes xie/build/ieee.o | Bin 0 -> 1232 bytes xie/build/include/X11/extensions/XIE.h | 430 + xie/build/include/X11/extensions/XIElib.h | 1916 ++ xie/build/include/X11/extensions/XIEproto.h | 687 + xie/build/include/X11/extensions/XIEprotost.h | 1118 ++ xie/build/init.o | Bin 0 -> 15936 bytes xie/build/libXIE.a | Bin 0 -> 107536 bytes xie/build/lut.o | Bin 0 -> 2664 bytes xie/build/photoflo.o | Bin 0 -> 8296 bytes xie/build/photomap.o | Bin 0 -> 3792 bytes xie/build/photospace.o | Bin 0 -> 4016 bytes xie/build/roi.o | Bin 0 -> 2664 bytes xie/build/technique.o | Bin 0 -> 15576 bytes xie/build/utils.o | Bin 0 -> 1816 bytes xie/build/xieperf/abort.o | Bin 0 -> 4336 bytes xie/build/xieperf/arith.o | Bin 0 -> 9712 bytes xie/build/xieperf/await.o | Bin 0 -> 8736 bytes xie/build/xieperf/band.o | Bin 0 -> 15200 bytes xie/build/xieperf/blend.o | Bin 0 -> 8432 bytes xie/build/xieperf/cache.o | Bin 0 -> 6944 bytes xie/build/xieperf/compare.o | Bin 0 -> 6920 bytes xie/build/xieperf/complex.o | Bin 0 -> 16720 bytes xie/build/xieperf/constrain.o | Bin 0 -> 6504 bytes xie/build/xieperf/convolve.o | Bin 0 -> 9168 bytes xie/build/xieperf/creatdstry.o | Bin 0 -> 7536 bytes xie/build/xieperf/cvttoindex.o | Bin 0 -> 8272 bytes xie/build/xieperf/dither.o | Bin 0 -> 7592 bytes xie/build/xieperf/encode.o | Bin 0 -> 15856 bytes xie/build/xieperf/errors.o | Bin 0 -> 34120 bytes xie/build/xieperf/events.o | Bin 0 -> 17336 bytes xie/build/xieperf/exportcl.o | Bin 0 -> 23032 bytes xie/build/xieperf/funcode.o | Bin 0 -> 14208 bytes xie/build/xieperf/geometry.o | Bin 0 -> 16016 bytes xie/build/xieperf/getnext.o | Bin 0 -> 4568 bytes xie/build/xieperf/import.o | Bin 0 -> 20280 bytes xie/build/xieperf/importcl.o | Bin 0 -> 14288 bytes xie/build/xieperf/logical.o | Bin 0 -> 8280 bytes xie/build/xieperf/math.o | Bin 0 -> 8632 bytes xie/build/xieperf/modify.o | Bin 0 -> 21248 bytes xie/build/xieperf/mtchhist.o | Bin 0 -> 10552 bytes xie/build/xieperf/pasteup.o | Bin 0 -> 10632 bytes xie/build/xieperf/point.o | Bin 0 -> 14344 bytes xie/build/xieperf/purgecolst.o | Bin 0 -> 2272 bytes xie/build/xieperf/query.o | Bin 0 -> 10976 bytes xie/build/xieperf/redefine.o | Bin 0 -> 5768 bytes xie/build/xieperf/rgb.o | Bin 0 -> 10624 bytes xie/build/xieperf/tests.o | Bin 0 -> 223216 bytes xie/build/xieperf/uconstrain.o | Bin 0 -> 5912 bytes xie/build/xieperf/xieperf | Bin 0 -> 506896 bytes xie/build/xieperf/xieperf.o | Bin 0 -> 103096 bytes xie/decclient.c | 173 + ...image-1200-install-use-EK-V120I-IN-001.pdf | Bin 0 -> 790999 bytes ...image-1200-install-use-EK-V120I-IN-001.txt | 1509 ++ .../DECwindows-Motif-OpenVMS-XIE-support.pdf | Bin 0 -> 502696 bytes .../DECwindows-Motif-OpenVMS-XIE-support.txt | 6259 +++++++ ...1991-v03-04-bitonal-image-accelerators.pdf | 6705 +++++++ ...1991-v03-04-bitonal-image-accelerators.txt | 1029 ++ xie/docs/dec/README.md | 126 + ...200-release-notes-V2.0-EK-V1200-RN-001.pdf | Bin 0 -> 49786 bytes ...200-release-notes-V2.0-EK-V1200-RN-001.txt | 222 + .../dec/VT1200-user-guide-EK-V1200-UG-001.pdf | Bin 0 -> 556734 bytes .../dec/VT1200-user-guide-EK-V1200-UG-001.txt | 1491 ++ .../dec/VXT2000-user-information-XIE3.0.pdf | Bin 0 -> 3806108 bytes .../dec/VXT2000-user-information-XIE3.0.txt | 15164 ++++++++++++++++ xie/docs/dec/XIEProto.TXT | 6614 +++++++ xie/docs/dec/overview_xie.TXT | 354 + xie/docs/dec/xie23-src/include/Imakefile | 71 + xie/docs/dec/xie23-src/include/MITMisc.h | 88 + xie/docs/dec/xie23-src/include/PEX/Imakefile | 61 + xie/docs/dec/xie23-src/include/PEX/PEX.h | 946 + xie/docs/dec/xie23-src/include/PEX/PEXErr.h | 69 + xie/docs/dec/xie23-src/include/PEX/PEXOCs.h | 164 + xie/docs/dec/xie23-src/include/PEX/PEXfuncs.h | 148 + xie/docs/dec/xie23-src/include/PEX/PEXmacs.h | 58 + xie/docs/dec/xie23-src/include/PEX/PEXproto.h | 1856 ++ .../dec/xie23-src/include/PEX/PEXprotost.h | 586 + xie/docs/dec/xie23-src/include/PEX/pexSwap.h | 79 + xie/docs/dec/xie23-src/include/XI.h | 263 + xie/docs/dec/xie23-src/include/XInput.h | 849 + xie/docs/dec/xie23-src/include/XIproto.h | 1425 ++ xie/docs/dec/xie23-src/include/XShm.h | 174 + xie/docs/dec/xie23-src/include/XTest.h | 151 + xie/docs/dec/xie23-src/include/Xext.h | 74 + xie/docs/dec/xie23-src/include/XieAppl.h | 295 + xie/docs/dec/xie23-src/include/XieDdx.h | 935 + xie/docs/dec/xie23-src/include/XieFloat.h | 99 + xie/docs/dec/xie23-src/include/XieLib.h | 372 + xie/docs/dec/xie23-src/include/XieProto.h | 1228 ++ xie/docs/dec/xie23-src/include/XieUdpDef.h | 118 + xie/docs/dec/xie23-src/include/bits.h | 114 + xie/docs/dec/xie23-src/include/extutil.h | 148 + xie/docs/dec/xie23-src/include/mitmiscstr.h | 81 + xie/docs/dec/xie23-src/include/multibuf.h | 305 + xie/docs/dec/xie23-src/include/multibufst.h | 301 + xie/docs/dec/xie23-src/include/shape.h | 222 + xie/docs/dec/xie23-src/include/shapestr.h | 255 + xie/docs/dec/xie23-src/include/shmstr.h | 207 + xie/docs/dec/xie23-src/include/smt.h | 106 + xie/docs/dec/xie23-src/include/smtstr.h | 194 + xie/docs/dec/xie23-src/include/xemacros.h | 358 + xie/docs/dec/xie23-src/include/xestream.h | 201 + .../dec/xie23-src/include/xkmeproto_include.h | 123 + xie/docs/dec/xie23-src/include/xtestext1.h | 327 + xie/docs/dec/xie23-src/include/xteststr.h | 121 + xie/docs/dec/xie23-src/include/xtrapddmi.h | 181 + xie/docs/dec/xie23-src/include/xtrapdi.h | 539 + xie/docs/dec/xie23-src/include/xtraplib.h | 158 + xie/docs/dec/xie23-src/include/xtraplibp.h | 192 + xie/docs/dec/xie23-src/include/xtrapproto.h | 210 + xie/docs/dec/xie23-src/lib/xie/Imakefile | 132 + xie/docs/dec/xie23-src/lib/xie/XieConvert.c | 3916 ++++ xie/docs/dec/xie23-src/lib/xie/XieFloat.c | 195 + xie/docs/dec/xie23-src/lib/xie/XieLibEvents.c | 242 + xie/docs/dec/xie23-src/lib/xie/XieLibImage.c | 708 + .../dec/xie23-src/lib/xie/XieLibProcess.c | 1274 ++ .../dec/xie23-src/lib/xie/XieLibResource.c | 1336 ++ .../dec/xie23-src/lib/xie/XieLibSession.c | 587 + .../dec/xie23-src/lib/xie/XieLibTransport.c | 744 + xie/docs/dec/xie23-src/lib/xie/XieLibUtils.c | 496 + xie/docs/dec/xie23-src/lib/xie/XieLibint.h | 225 + xie/docs/dec/xie23-src/server/xie/Imakefile | 94 + .../dec/xie23-src/server/xie/XieDisplay.c | 2505 +++ .../dec/xie23-src/server/xie/XieDisplay.h | 254 + xie/docs/dec/xie23-src/server/xie/XieEvents.c | 225 + xie/docs/dec/xie23-src/server/xie/XieMacros.h | 367 + xie/docs/dec/xie23-src/server/xie/XieMain.c | 477 + .../xie23-src/server/xie/XiePipeInterface.h | 107 + .../dec/xie23-src/server/xie/XieProcess.c | 1628 ++ .../dec/xie23-src/server/xie/XieResource.c | 1156 ++ xie/docs/dec/xie23-src/server/xie/XieServer.h | 341 + .../dec/xie23-src/server/xie/XieSession.c | 326 + .../dec/xie23-src/server/xie/XieSwapRep.c | 429 + .../dec/xie23-src/server/xie/XieSwapReq.c | 1018 ++ xie/docs/dec/xie23-src/server/xie/XieTables.c | 382 + .../dec/xie23-src/server/xie/XieTransport.c | 1748 ++ .../dec/xie23-src/server/xie/XieTransport.h | 162 + xie/docs/dec/xie23-src/server/xie/XieUtils.c | 550 + .../xie23-src/server/xie/smi/DmiChangeList.c | 500 + .../xie23-src/server/xie/smi/DmiChangeList.h | 103 + .../dec/xie23-src/server/xie/smi/DmiConvert.c | 4667 +++++ .../dec/xie23-src/server/xie/smi/DmiConvert.h | 106 + .../dec/xie23-src/server/xie/smi/DmiDdx.c | 536 + .../xie23-src/server/xie/smi/DmiDecodeG4.c | 1298 ++ .../xie23-src/server/xie/smi/DmiDecodeG4.h | 110 + .../server/xie/smi/DmiExtendInstruct.h | 111 + .../dec/xie23-src/server/xie/smi/DmiFill.c | 1027 ++ .../dec/xie23-src/server/xie/smi/DmiFill.h | 154 + xie/docs/dec/xie23-src/server/xie/smi/DmiMi.c | 393 + .../dec/xie23-src/server/xie/smi/DmiPoint.c | 1635 ++ .../dec/xie23-src/server/xie/smi/DmiPoint.h | 141 + .../dec/xie23-src/server/xie/smi/DmiScale.c | 2315 +++ .../dec/xie23-src/server/xie/smi/DmiScale.h | 147 + .../dec/xie23-src/server/xie/smi/DmiUtil.c | 578 + .../dec/xie23-src/server/xie/smi/DmiUtil.h | 106 + .../dec/xie23-src/server/xie/smi/Imakefile | 150 + .../dec/xie23-src/server/xie/smi/SmiArea.c | 2964 +++ .../dec/xie23-src/server/xie/smi/SmiArea.h | 156 + .../xie23-src/server/xie/smi/SmiArithmetic.c | 1732 ++ .../xie23-src/server/xie/smi/SmiArithmetic.h | 148 + .../xie23-src/server/xie/smi/SmiBitMasks.h | 158 + .../xie23-src/server/xie/smi/SmiChangeList.c | 317 + .../xie23-src/server/xie/smi/SmiChangeList.h | 91 + .../xie23-src/server/xie/smi/SmiChromeCom.c | 288 + .../xie23-src/server/xie/smi/SmiChromeCom.h | 125 + .../xie23-src/server/xie/smi/SmiChromeSep.c | 259 + .../xie23-src/server/xie/smi/SmiChromeSep.h | 125 + .../dec/xie23-src/server/xie/smi/SmiCompare.c | 2096 +++ .../dec/xie23-src/server/xie/smi/SmiCompare.h | 166 + .../xie23-src/server/xie/smi/SmiConstrain.c | 384 + .../xie23-src/server/xie/smi/SmiConstrain.h | 127 + .../dec/xie23-src/server/xie/smi/SmiConvert.c | 3916 ++++ .../dec/xie23-src/server/xie/smi/SmiConvert.h | 94 + .../dec/xie23-src/server/xie/smi/SmiCrop.c | 301 + .../dec/xie23-src/server/xie/smi/SmiCrop.h | 131 + .../dec/xie23-src/server/xie/smi/SmiDctDef.h | 332 + .../xie23-src/server/xie/smi/SmiDctMacros.h | 340 + .../xie23-src/server/xie/smi/SmiDctTables.c | 1275 ++ .../dec/xie23-src/server/xie/smi/SmiDdx.c | 474 + .../xie23-src/server/xie/smi/SmiDecodeDct.c | 1805 ++ .../xie23-src/server/xie/smi/SmiDecodeDct.h | 315 + .../xie23-src/server/xie/smi/SmiDecodeG4.c | 835 + .../xie23-src/server/xie/smi/SmiDecodeG4.h | 215 + .../dec/xie23-src/server/xie/smi/SmiDither.c | 597 + .../dec/xie23-src/server/xie/smi/SmiDither.h | 128 + .../xie23-src/server/xie/smi/SmiEncodeDct.c | 2110 +++ .../xie23-src/server/xie/smi/SmiEncodeDct.h | 251 + .../xie23-src/server/xie/smi/SmiEncodeG4.c | 847 + .../xie23-src/server/xie/smi/SmiEncodeG4.h | 159 + .../xie23-src/server/xie/smi/SmiFaxTables.c | 5443 ++++++ .../dec/xie23-src/server/xie/smi/SmiFfx.c | 292 + .../dec/xie23-src/server/xie/smi/SmiFfx.h | 91 + .../dec/xie23-src/server/xie/smi/SmiFill.c | 1087 ++ .../dec/xie23-src/server/xie/smi/SmiFill.h | 136 + .../dec/xie23-src/server/xie/smi/SmiFloat.c | 195 + .../xie23-src/server/xie/smi/SmiHistogram.c | 206 + .../xie23-src/server/xie/smi/SmiHistogram.h | 90 + .../dec/xie23-src/server/xie/smi/SmiLogical.c | 1742 ++ .../dec/xie23-src/server/xie/smi/SmiLogical.h | 152 + .../xie23-src/server/xie/smi/SmiLuminance.c | 564 + .../xie23-src/server/xie/smi/SmiLuminance.h | 139 + .../server/xie/smi/SmiMatchHistogram.c | 833 + .../server/xie/smi/SmiMatchHistogram.h | 133 + .../dec/xie23-src/server/xie/smi/SmiMath.c | 1056 ++ .../dec/xie23-src/server/xie/smi/SmiMath.h | 137 + .../dec/xie23-src/server/xie/smi/SmiMemMgt.c | 326 + .../dec/xie23-src/server/xie/smi/SmiMemMgt.h | 98 + xie/docs/dec/xie23-src/server/xie/smi/SmiMi.c | 371 + .../dec/xie23-src/server/xie/smi/SmiMirror.c | 569 + .../dec/xie23-src/server/xie/smi/SmiMirror.h | 124 + .../dec/xie23-src/server/xie/smi/SmiPipe.c | 540 + .../dec/xie23-src/server/xie/smi/SmiPipe.h | 603 + .../dec/xie23-src/server/xie/smi/SmiPipeRsm.c | 1946 ++ .../dec/xie23-src/server/xie/smi/SmiPipeRsm.h | 114 + .../xie23-src/server/xie/smi/SmiPipeSched.c | 270 + .../xie23-src/server/xie/smi/SmiPipeSched.h | 93 + .../dec/xie23-src/server/xie/smi/SmiPoint.c | 1269 ++ .../dec/xie23-src/server/xie/smi/SmiPoint.h | 145 + .../dec/xie23-src/server/xie/smi/SmiRotate.c | 622 + .../dec/xie23-src/server/xie/smi/SmiRotate.h | 128 + .../dec/xie23-src/server/xie/smi/SmiScale.c | 995 + .../dec/xie23-src/server/xie/smi/SmiScale.h | 125 + .../dec/xie23-src/server/xie/smi/SmiStats.c | 3208 ++++ .../dec/xie23-src/server/xie/smi/SmiStats.h | 91 + .../xie23-src/server/xie/smi/SmiTranslate.c | 790 + .../xie23-src/server/xie/smi/SmiTranslate.h | 159 + .../dec/xie23-src/server/xie/smi/SmiUtil.c | 397 + .../dec/xie23-src/server/xie/smi/SmiUtil.h | 92 + xie/docs/dec/xie23/README.md | 121 + .../xie23/include/dec/extensions/XieAppl.h | 287 + .../dec/xie23/include/dec/extensions/XieDdx.h | 927 + .../xie23/include/dec/extensions/XieFloat.h | 89 + .../dec/xie23/include/dec/extensions/XieLib.h | 365 + .../include/dec/extensions/XiePipeInterface.h | 106 + .../xie23/include/dec/extensions/XieProto.h | 1220 ++ .../xie23/include/dec/extensions/XieUdpDef.h | 110 + xie/docs/dec/xie23/man/XieAbortFlo.3X | 59 + xie/docs/dec/xie23/man/XieAbortStream.3X | 75 + xie/docs/dec/xie23/man/XieArea.3X | 178 + xie/docs/dec/xie23/man/XieAreaStats.3X | 133 + xie/docs/dec/xie23/man/XieArithmetic.3X | 204 + xie/docs/dec/xie23/man/XieBindMapToFlo.3X | 72 + xie/docs/dec/xie23/man/XieCalloc.3X | 68 + xie/docs/dec/xie23/man/XieCallocBits.3X | 66 + xie/docs/dec/xie23/man/XieCfree.3X | 61 + xie/docs/dec/xie23/man/XieCheckFunction.3X | 75 + xie/docs/dec/xie23/man/XieChromeCom.3X | 137 + xie/docs/dec/xie23/man/XieChromeSep.3X | 91 + xie/docs/dec/xie23/man/XieClonePhoto.3X | 83 + xie/docs/dec/xie23/man/XieCompare.3X | 179 + xie/docs/dec/xie23/man/XieConstrain.3X | 118 + xie/docs/dec/xie23/man/XieCopyImage.3X | 90 + xie/docs/dec/xie23/man/XieCreateCpp.3X | 77 + xie/docs/dec/xie23/man/XieCreateImage.3X | 394 + xie/docs/dec/xie23/man/XieCreatePhoto.3X | 105 + xie/docs/dec/xie23/man/XieCreateRoi.3X | 84 + xie/docs/dec/xie23/man/XieCreateTmp.3X | 94 + xie/docs/dec/xie23/man/XieCrop.3X | 82 + xie/docs/dec/xie23/man/XieDither.3X | 90 + xie/docs/dec/xie23/man/XieExecuteFlo.3X | 74 + xie/docs/dec/xie23/man/XieExport.3X | 174 + xie/docs/dec/xie23/man/XieFill.3X | 94 + xie/docs/dec/xie23/man/XieFindResource.3X | 70 + xie/docs/dec/xie23/man/XieFree.3X | 62 + xie/docs/dec/xie23/man/XieFreeBits.3X | 64 + xie/docs/dec/xie23/man/XieFreeExport.3X | 69 + xie/docs/dec/xie23/man/XieFreeImage.3X | 60 + xie/docs/dec/xie23/man/XieFreeResource.3X | 60 + xie/docs/dec/xie23/man/XieGetImage.3X | 169 + xie/docs/dec/xie23/man/XieGetImageData.3X | 83 + xie/docs/dec/xie23/man/XieGetStream.3X | 111 + xie/docs/dec/xie23/man/XieGetTile.3X | 100 + xie/docs/dec/xie23/man/XieHistogram.3X | 98 + xie/docs/dec/xie23/man/XieImport.3X | 100 + xie/docs/dec/xie23/man/XieIsBitonal.3X | 67 + xie/docs/dec/xie23/man/XieIsCpp.3X | 63 + xie/docs/dec/xie23/man/XieIsGrayScale.3X | 67 + xie/docs/dec/xie23/man/XieIsIdc.3X | 63 + xie/docs/dec/xie23/man/XieIsPhoto.3X | 65 + xie/docs/dec/xie23/man/XieIsPhotoFlo.3X | 63 + xie/docs/dec/xie23/man/XieIsPhotoMap.3X | 63 + xie/docs/dec/xie23/man/XieIsPhotoTap.3X | 63 + xie/docs/dec/xie23/man/XieIsRGB.3X | 67 + xie/docs/dec/xie23/man/XieIsRoi.3X | 63 + xie/docs/dec/xie23/man/XieIsTmp.3X | 63 + xie/docs/dec/xie23/man/XieListFunctions.3X | 66 + xie/docs/dec/xie23/man/XieLogical.3X | 174 + xie/docs/dec/xie23/man/XieLuminance.3X | 80 + xie/docs/dec/xie23/man/XieMalloc.3X | 66 + xie/docs/dec/xie23/man/XieMallocBits.3X | 62 + xie/docs/dec/xie23/man/XieMatchHistogram.3X | 179 + xie/docs/dec/xie23/man/XieMath.3X | 141 + xie/docs/dec/xie23/man/XieMirror.3X | 80 + xie/docs/dec/xie23/man/XiePhotoCount.3X | 66 + xie/docs/dec/xie23/man/XiePlaneCount.3X | 99 + xie/docs/dec/xie23/man/XiePoint.3X | 121 + xie/docs/dec/xie23/man/XiePointStats.3X | 139 + xie/docs/dec/xie23/man/XiePutImage.3X | 114 + xie/docs/dec/xie23/man/XiePutImageData.3X | 67 + xie/docs/dec/xie23/man/XiePutStream.3X | 108 + xie/docs/dec/xie23/man/XiePutTile.3X | 103 + xie/docs/dec/xie23/man/XieQueryCpp.3X | 76 + xie/docs/dec/xie23/man/XieQueryEvents.3X | 62 + xie/docs/dec/xie23/man/XieQueryExport.3X | 109 + xie/docs/dec/xie23/man/XieQueryFlo.3X | 93 + xie/docs/dec/xie23/man/XieQueryMap.3X | 109 + xie/docs/dec/xie23/man/XieQueryOpDefaults.3X | 96 + xie/docs/dec/xie23/man/XieQueryRoi.3X | 74 + xie/docs/dec/xie23/man/XieQueryTmp.3X | 82 + xie/docs/dec/xie23/man/XieRealloc.3X | 74 + xie/docs/dec/xie23/man/XieReallocBits.3X | 73 + xie/docs/dec/xie23/man/XieRotate.3X | 108 + xie/docs/dec/xie23/man/XieScale.3X | 89 + xie/docs/dec/xie23/man/XieSelectEvents.3X | 90 + xie/docs/dec/xie23/man/XieSetOpDefaults.3X | 139 + xie/docs/dec/xie23/man/XieSetStream.3X | 131 + xie/docs/dec/xie23/man/XieTapFlo.3X | 85 + xie/docs/dec/xie23/man/XieTranslate.3X | 115 + xie/docs/dec/xie23/man/XieXid.3X | 61 + xie/docs/dec/xie23/man/Xie_intro.3X | 47 + xie/docs/dec/xieSIarch.txt | 1620 ++ xie/docs/dec/xielib.TXT | 7430 ++++++++ xie/docs/x11r4/README.md | 56 + xie/docs/x11r4/concepts.pdf | Bin 0 -> 226077 bytes xie/docs/x11r4/concepts.ps | 6925 +++++++ xie/docs/x11r4/concepts.txt | 2854 +++ xie/docs/x11r4/protocol.pdf | Bin 0 -> 271789 bytes xie/docs/x11r4/protocol.ps | 8462 +++++++++ xie/docs/x11r4/protocol.txt | 4436 +++++ xie/docs/x11r4/server.pdf | Bin 0 -> 171491 bytes xie/docs/x11r4/server.ps | 5057 ++++++ xie/docs/x11r4/server.txt | 3383 ++++ xie/evidence/ACCELERATOR_NOT_MODELLED.txt | 47 + xie/evidence/ACCEL_IS_DMA_NOT_CPU_FED.txt | 35 + xie/evidence/ACCEL_ITERATION_2.txt | 38 + xie/evidence/ACCEL_MODEL_FIRST_CUT.txt | 48 + xie/evidence/ACCEL_REGISTER_MAP_WITH_PCS.txt | 41 + xie/evidence/ACCEL_TRACE_DIFF.txt | 31 + xie/evidence/CLIENT_DATA_IN_SERVER.txt | 41 + xie/evidence/CONTROL_REGS_NOT_STAGING.txt | 29 + xie/evidence/CORRECTION_TILE_NOT_IN_VRAM.txt | 31 + xie/evidence/DDX_MODULE_INSTRUMENTED.txt | 56 + .../DDX_progress_with_compression_fixed.txt | 39 + .../DEC_23_SOURCE_AND_CREATE_FIXED.txt | 54 + xie/evidence/DEC_IDS_SEQUENCE_PIXMAP.txt | 41 + xie/evidence/DESTINATION_IS_MAIN_RAM.txt | 32 + xie/evidence/EXPORT_COMPLETES.txt | 38 + xie/evidence/EXPORT_NOW_WRITES_VRAM.txt | 41 + xie/evidence/FILL_DATA_REACHES_CPU_ONLY.txt | 28 + xie/evidence/IDS_LAYER_NOT_BUILDABLE.txt | 31 + .../MiEncodeDouble_and_create_layout.txt | 43 + xie/evidence/PIPELINE_CRASH_DIAGNOSED.txt | 30 + xie/evidence/PIPELINE_PATH_CRASHES.txt | 27 + .../PIXEL_DATA_REACHES_ACCELERATOR.txt | 45 + xie/evidence/ROOT_CAUSE_element_byte4.txt | 43 + xie/evidence/STAGING_FINAL.txt | 23 + xie/evidence/STAGING_NOT_FILL_DEPENDENT.txt | 31 + xie/evidence/STAGING_WRITER_PCS.txt | 24 + xie/evidence/STORE_IS_FILL_DEPENDENT.txt | 33 + .../TILE_IS_IN_VRAM_NOT_ON_SCREEN.txt | 39 + .../VRAM_IDENTICAL_FOR_BOTH_FILLS.txt | 32 + xie/evidence/VRAM_WRITE_ATTRIBUTION.txt | 35 + xie/evidence/XFER_ARGUMENTS.txt | 40 + xie/evidence/XFER_SIX_ARGUMENTS.txt | 35 + xie/evidence/XIE_IMAGE_DISPLAYED.md | 135 + xie/evidence/armF_lookup_codes.txt | 27 + xie/evidence/arm_check_trace.txt | 41 + xie/evidence/arm_does_not_set_byte8.txt | 39 + xie/evidence/arm_lookup_byte13.txt | 44 + xie/evidence/arm_requires_byte8_eq1.txt | 45 + xie/evidence/arm_sets_byte8.txt | 56 + xie/evidence/arm_vs_put_branch_divergence.txt | 43 + xie/evidence/badmatch_gate_located.txt | 43 + xie/evidence/band_d8_zero.txt | 21 + xie/evidence/band_element_dump.txt | 36 + .../baseline_and_arm_failure_after_lookup.txt | 41 + xie/evidence/bind_672a4.txt | 19 + xie/evidence/byte40_and_outcell.txt | 42 + xie/evidence/byte8_no_writer_final.txt | 44 + xie/evidence/byte8_slot_sweep.txt | 36 + xie/evidence/byte8_watch_validated.txt | 41 + xie/evidence/byte8_write_watch_closure.txt | 42 + xie/evidence/chain_arm_import_export_ok.txt | 37 + xie/evidence/class3_b40_patch.txt | 17 + xie/evidence/class3_id_not_stored.txt | 57 + .../class3_registration_impossible.txt | 78 + xie/evidence/class_skip_false_success.txt | 15 + xie/evidence/conversion_helpers_probed.txt | 39 + .../create_by_reference_and_arm_loop.txt | 57 + ..._is_fixed_and_puttile_not_reproducible.txt | 41 + xie/evidence/create_opcode_sweep.txt | 39 + xie/evidence/dec_23_client_built.txt | 42 + xie/evidence/dispatch_entry19.txt | 22 + xie/evidence/element_byte4_never_written.txt | 36 + xie/evidence/element_list_handler_hunt.txt | 52 + xie/evidence/element_pointer_timing.txt | 35 + xie/evidence/element_poke_no_effect.txt | 15 + .../element_types_and_render_gate.txt | 42 + xie/evidence/element_writes_and_dec_doc.txt | 68 + xie/evidence/err2_is_the_render_driver.txt | 40 + xie/evidence/events_and_bind_attempt.txt | 42 + .../export_badvalue_geometry_ruled_out.txt | 45 + .../export_badvalue_is_in_firmware_ddx.txt | 46 + xie/evidence/export_badvalue_sites.txt | 48 + xie/evidence/export_before_put.txt | 17 + xie/evidence/export_chain_trace.log | 4 + xie/evidence/export_fourth_badvalue.txt | 43 + xie/evidence/export_half_still_fails.txt | 56 + xie/evidence/export_paints_nothing.txt | 37 + xie/evidence/export_query_copyarea.txt | 44 + xie/evidence/export_renderparams_map.txt | 60 + ...xport_reports_badvalue_unconditionally.txt | 40 + xie/evidence/export_request_is_correct.txt | 38 + xie/evidence/export_side_state.txt | 36 + xie/evidence/export_variants_exhausted.txt | 34 + xie/evidence/finalize_returns_zero.txt | 34 + xie/evidence/gate_model_reconfirmed.txt | 40 + xie/evidence/gate_reached_with_byte8_3.txt | 45 + .../handler_propagates_render_code.txt | 34 + .../handoff_dispatch_and_create_shape.txt | 75 + xie/evidence/handoff_never_runs.txt | 38 + xie/evidence/handoff_runs_now.txt | 42 + xie/evidence/import_guard_word5.txt | 35 + xie/evidence/import_revalidated.txt | 43 + xie/evidence/levels_type_bug_fixed.txt | 48 + xie/evidence/lookup_is_6B966.txt | 63 + xie/evidence/mame_band_arm2.log | 23 + xie/evidence/mame_bind_slot7.txt | 10 + xie/evidence/mame_look_dump.log | 23 + xie/evidence/mame_look_not_resource.txt | 18 + xie/evidence/mame_put_gate.txt | 26 + xie/evidence/mame_put_watchpoints.log | 826 + xie/evidence/mame_state_diff.txt | 22 + xie/evidence/mame_xie_resource.log | 702 + xie/evidence/multi_operand_shapes.txt | 36 + xie/evidence/no_dd_worker.txt | 11 + xie/evidence/outcell_is_object_byte36.txt | 35 + xie/evidence/outcell_writer.txt | 43 + xie/evidence/payload_handoff_6b640.txt | 30 + xie/evidence/photoflo_chain_no_id.txt | 49 + .../photomap_query_and_corex_control.txt | 49 + xie/evidence/pipeline_3_elements.txt | 25 + xie/evidence/png/win_baseline.png | Bin 0 -> 255 bytes xie/evidence/png/win_black.png | Bin 0 -> 255 bytes xie/evidence/png/win_fill_0f.png | Bin 0 -> 258 bytes xie/evidence/png/win_fill_aa.png | Bin 0 -> 258 bytes xie/evidence/png/win_white.png | Bin 0 -> 258 bytes xie/evidence/png/xie_baseline_noexport.png | Bin 0 -> 8525 bytes xie/evidence/png/xie_baseline_window.png | Bin 0 -> 255 bytes xie/evidence/png/xie_black_fb.png | Bin 0 -> 9352 bytes xie/evidence/png/xie_black_real.png | Bin 0 -> 8502 bytes xie/evidence/png/xie_black_window.png | Bin 0 -> 361 bytes xie/evidence/png/xie_fill_0f.png | Bin 0 -> 8514 bytes xie/evidence/png/xie_fill_0f_window.png | Bin 0 -> 258 bytes xie/evidence/png/xie_fill_aa.png | Bin 0 -> 8512 bytes xie/evidence/png/xie_fill_aa_window.png | Bin 0 -> 258 bytes xie/evidence/png/xie_white_fb.png | Bin 0 -> 9376 bytes xie/evidence/png/xie_white_real.png | Bin 0 -> 8512 bytes xie/evidence/png/xie_white_window.png | Bin 0 -> 377 bytes xie/evidence/png/xie_window_tiles.png | Bin 0 -> 3556 bytes xie/evidence/protocol_model_corrected.txt | 48 + xie/evidence/put_tile_succeeds.txt | 41 + .../raw_packet_parse_and_partial_create.txt | 45 + xie/evidence/registration_hits_corrected.txt | 55 + xie/evidence/render_driver_callers.txt | 43 + xie/evidence/render_driver_returns_2.txt | 42 + xie/evidence/render_driver_tail_scan.txt | 38 + xie/evidence/residual_items_tested.txt | 46 + xie/evidence/resource_scan_fail.txt | 15 + .../rp48_is_set_and_block_is_shared.txt | 29 + xie/evidence/rp48_low_byte_tested.txt | 31 + xie/evidence/s19_lookup_retrace.txt | 47 + xie/evidence/setopdefaults_and_export_ctx.txt | 37 + .../slot11_bind_and_second_allocator.txt | 49 + xie/evidence/slot33_40_operands.txt | 45 + xie/evidence/slot43_compare_operands.txt | 42 + xie/evidence/slot43_decoded.txt | 48 + xie/evidence/slot43_excluded.txt | 40 + xie/evidence/slot43_instrumentation.txt | 20 + xie/evidence/slot43_is_a_render_request.txt | 37 + xie/evidence/slot43_self.txt | 15 + xie/evidence/slot44_accepted_shape.txt | 40 + xie/evidence/slot44_operand_requirement.txt | 36 + xie/evidence/src_base_chain_found.txt | 53 + xie/evidence/src_base_sweep_all_slots.txt | 41 + xie/evidence/srcbase_watch_and_slots15_22.txt | 45 + xie/evidence/three_wrong_assumptions.txt | 34 + xie/evidence/trampoline_unreachable.txt | 40 + .../transport_component_and_export_state.txt | 66 + xie/evidence/verified_slot33_44.txt | 41 + xie/evidence/word5_path_diverges.txt | 37 + xie/evidence/xie23_headers_and_transport.txt | 70 + xie/evidence/xie_create_export_probe.txt | 113 + xie/evidence/xie_export_crop.png | Bin 0 -> 782 bytes xie/evidence/xie_export_window_vt1200.png | Bin 0 -> 8665 bytes xie/evidence/xie_export_window_vt1200.txt | 5 + xie/evidence/xie_min_client_vt1200.txt | 5 + xie/evidence/xie_protocol_spec_found.txt | 80 + xie/evidence/xie_raw.py | 115 + xie/evidence/xie_scan.py | 10 + xie/evidence/xie_scan2.py | 11 + xie/evidence/xie_wire_probe.txt | 49 + xie/evidence/xieperf_import1_vt1200.txt | 19 + xie/evidence/xieperf_import_vt1200.txt | 35 + xie/evidence/xieperf_showtechs_vt1200.txt | 21 + xie/evidence/xieprobe_vt1200.txt | 4 + xie/evidence/xshow_vt1200.txt | 2 + xie/ghidra-evidence/dispatch_table.txt | 70 + .../handlers/client_session.txt | 5 + .../handlers/slot00_064C3C.txt | 857 + .../handlers/slot01_068A4C.txt | 284 + .../handlers/slot02_068DA6.txt | 16 + .../handlers/slot03_03FD78.txt | 48 + .../handlers/slot04_03FE06.txt | 21 + .../handlers/slot05_068DDC.txt | 84 + .../handlers/slot06_068EC6.txt | 35 + .../handlers/slot07_066866.txt | 42 + .../handlers/slot08_0668E4.txt | 58 + .../handlers/slot09_06698E.txt | 73 + .../handlers/slot10_066B64.txt | 59 + .../handlers/slot10_selectors.txt | 6 + .../handlers/slot11_0667B6.txt | 58 + .../handlers/slot12_066738.txt | 42 + .../handlers/slot13_066A8E.txt | 68 + .../handlers/slot14_066C34.txt | 140 + .../handlers/slot15_06A536.txt | 36 + .../handlers/slot18_06A5A4.txt | 139 + .../handlers/slot19_06A76E.txt | 234 + .../handlers/slot20_06AA54.txt | 449 + .../handlers/slot21_062D40.txt | 279 + .../handlers/slot22_0630F4.txt | 34 + .../handlers/slot24_06315E.txt | 159 + .../handlers/slot33_064CC8.txt | 397 + .../handlers/slot40_065262.txt | 264 + .../handlers/slot43_065600.txt | 472 + .../handlers/slot44_065CAA.txt | 243 + xie/ghidra-evidence/handlers/slot_probe.txt | 19 + .../image_path/swapper_slot01_0697B4.txt | 19 + .../image_path/swapper_slot02_069704.txt | 13 + .../image_path/swapper_slot03_06980C.txt | 19 + .../image_path/swapper_slot04_069864.txt | 19 + .../image_path/swapper_slot05_0698BC.txt | 20 + .../image_path/swapper_slot07_06990C.txt | 31 + .../image_path/swapper_slot08_06999C.txt | 143 + .../image_path/swapper_slot09_069740.txt | 25 + .../image_path/swapper_slot11_069C04.txt | 25 + .../image_path/swapper_slot12_069C78.txt | 19 + .../image_path/swapper_slot13_069CD0.txt | 19 + .../image_path/swapper_slot14_069D28.txt | 25 + .../image_path/swapper_slot15_069D9C.txt | 25 + .../image_path/swapper_slot18_069E10.txt | 25 + .../image_path/swapper_slot19_069E84.txt | 49 + .../image_path/swapper_slot20_069F68.txt | 38 + .../image_path/swapper_slot21_06A00C.txt | 97 + .../image_path/swapper_slot22_06A1D0.txt | 19 + .../image_path/swapper_slot24_06A228.txt | 25 + .../image_path/swapper_slot33_06A29C.txt | 31 + .../image_path/swapper_slot40_06A32C.txt | 25 + .../image_path/swapper_slot43_06A3A0.txt | 53 + .../image_path/swapper_slot44_06A48A.txt | 37 + xie/ghidra-evidence/import/lookup_6B966.txt | 209 + .../import/resource_init_6CA82.txt | 207 + .../import/slot07_op1_6742C.txt | 211 + .../import/slot07_op2_6759A.txt | 211 + xie/ghidra-evidence/length_sweep_wire.txt | 46 + xie/ghidra-evidence/listings.txt | 194 + .../mame/run_a_level0_diagnostics.txt | 26 + .../mame/run_b_os_terminal_manager.txt | 59 + .../mame/run_c_scalution_jump.txt | 24 + xie/ghidra-evidence/mame/run_d_control.txt | 2 + .../mame/scalution_register_writes.txt | 69 + .../mame/scalution_test_head.txt | 46 + .../pipeline/create_slot8_op12.txt | 190 + .../pipeline/dd_input_6B640.txt | 125 + .../pipeline/export_slot21.txt | 293 + xie/ghidra-evidence/pipeline/put_slot19.txt | 234 + .../pipeline/resource_init_6CA82.txt | 207 + .../slot20/band_alloc_6C660.txt | 140 + .../slot20/slot19_payload_handoff.txt | 55 + xie/ghidra-evidence/slot20/slot20_6AA54.txt | 456 + .../slot20/slot20_helper_6CD68_tail.txt | 44 + xie/probe23.py | 227 + xie/probe_verify.py | 160 + xie/xc/doc/hardcopy/XIE/SI/xieSIarch.txt | 1632 ++ xie/xc/doc/hardcopy/XIE/XIEProto/XIEProto.txt | 3978 ++++ xie/xc/doc/hardcopy/XIE/XIEProto/cmatch.txt | 175 + xie/xc/doc/hardcopy/XIE/XIEProto/overview.txt | 356 + xie/xc/doc/hardcopy/XIE/XIElib/xielib.txt | 7525 ++++++++ xie/xc/include/extensions/XIE.h | 430 + xie/xc/include/extensions/XIEproto.h | 687 + xie/xc/include/extensions/XIEprotost.h | 1118 ++ xie/xc/lib/XIE/Imakefile | 71 + xie/xc/lib/XIE/XIE-def.cpp | 112 + xie/xc/lib/XIE/XIElib.h | 1916 ++ xie/xc/lib/XIE/XIElibint.h | 303 + xie/xc/lib/XIE/abort.c | 61 + xie/xc/lib/XIE/await.c | 61 + xie/xc/lib/XIE/clientdata.c | 139 + xie/xc/lib/XIE/colorlist.c | 172 + xie/xc/lib/XIE/conven.c | 1653 ++ xie/xc/lib/XIE/elements.c | 1262 ++ xie/xc/lib/XIE/elements.h | 108 + xie/xc/lib/XIE/errors.c | 140 + xie/xc/lib/XIE/events.c | 175 + xie/xc/lib/XIE/free.c | 139 + xie/xc/lib/XIE/globals.h | 117 + xie/xc/lib/XIE/ieee.c | 198 + xie/xc/lib/XIE/init.c | 501 + xie/xc/lib/XIE/init.h | 45 + xie/xc/lib/XIE/jump_funcs | 197 + xie/xc/lib/XIE/jump_ignore | 3 + xie/xc/lib/XIE/jump_vars | 6 + xie/xc/lib/XIE/lut.c | 89 + xie/xc/lib/XIE/photoflo.c | 323 + xie/xc/lib/XIE/photomap.c | 149 + xie/xc/lib/XIE/photospace.c | 137 + xie/xc/lib/XIE/roi.c | 89 + xie/xc/lib/XIE/technique.c | 1307 ++ xie/xc/lib/XIE/technique.h | 87 + xie/xc/lib/XIE/utils.c | 119 + xie/xc/programs/Xserver/XIE/Imakefile | 11 + xie/xc/programs/Xserver/XIE/dixie/Imakefile | 21 + .../Xserver/XIE/dixie/export/Imakefile | 28 + .../Xserver/XIE/dixie/export/echist.c | 218 + .../programs/Xserver/XIE/dixie/export/eclut.c | 210 + .../Xserver/XIE/dixie/export/ecphoto.c | 734 + .../programs/Xserver/XIE/dixie/export/ecroi.c | 196 + .../programs/Xserver/XIE/dixie/export/edraw.c | 277 + .../Xserver/XIE/dixie/export/edrawp.c | 202 + .../programs/Xserver/XIE/dixie/export/elut.c | 268 + .../Xserver/XIE/dixie/export/ephoto.c | 610 + .../programs/Xserver/XIE/dixie/export/eroi.c | 232 + .../Xserver/XIE/dixie/import/Imakefile | 28 + .../programs/Xserver/XIE/dixie/import/iclut.c | 243 + .../Xserver/XIE/dixie/import/icphoto.c | 813 + .../programs/Xserver/XIE/dixie/import/icroi.c | 173 + .../programs/Xserver/XIE/dixie/import/idraw.c | 224 + .../Xserver/XIE/dixie/import/idrawp.c | 229 + .../programs/Xserver/XIE/dixie/import/ilut.c | 229 + .../Xserver/XIE/dixie/import/iphoto.c | 280 + .../programs/Xserver/XIE/dixie/import/iroi.c | 218 + .../Xserver/XIE/dixie/process/Imakefile | 33 + .../Xserver/XIE/dixie/process/parith.c | 265 + .../Xserver/XIE/dixie/process/pbandc.c | 212 + .../Xserver/XIE/dixie/process/pbande.c | 211 + .../Xserver/XIE/dixie/process/pbands.c | 191 + .../Xserver/XIE/dixie/process/pblend.c | 275 + .../Xserver/XIE/dixie/process/pcfrgb.c | 425 + .../Xserver/XIE/dixie/process/pcfromi.c | 225 + .../Xserver/XIE/dixie/process/pcnst.c | 330 + .../Xserver/XIE/dixie/process/pcomp.c | 294 + .../Xserver/XIE/dixie/process/pconv.c | 323 + .../Xserver/XIE/dixie/process/pctoi.c | 439 + .../Xserver/XIE/dixie/process/pctrgb.c | 561 + .../Xserver/XIE/dixie/process/pdither.c | 303 + .../Xserver/XIE/dixie/process/pgeom.c | 421 + .../Xserver/XIE/dixie/process/phist.c | 333 + .../Xserver/XIE/dixie/process/plogic.c | 271 + .../Xserver/XIE/dixie/process/pmath.c | 222 + .../Xserver/XIE/dixie/process/ppaste.c | 260 + .../Xserver/XIE/dixie/process/ppoint.c | 315 + .../Xserver/XIE/dixie/process/puncnst.c | 195 + .../Xserver/XIE/dixie/request/Imakefile | 30 + .../Xserver/XIE/dixie/request/colorlst.c | 370 + .../Xserver/XIE/dixie/request/difloat.c | 116 + .../Xserver/XIE/dixie/request/error.c | 337 + .../Xserver/XIE/dixie/request/event.c | 181 + .../programs/Xserver/XIE/dixie/request/flo.c | 508 + .../programs/Xserver/XIE/dixie/request/lut.c | 208 + .../Xserver/XIE/dixie/request/memory.c | 137 + .../Xserver/XIE/dixie/request/photomap.c | 301 + .../Xserver/XIE/dixie/request/protoflo.c | 948 + .../programs/Xserver/XIE/dixie/request/roi.c | 202 + .../Xserver/XIE/dixie/request/session.c | 346 + .../Xserver/XIE/dixie/request/tables.c | 350 + .../Xserver/XIE/dixie/request/technq.c | 371 + .../programs/Xserver/XIE/include/colorlst.h | 95 + xie/xc/programs/Xserver/XIE/include/corex.h | 168 + xie/xc/programs/Xserver/XIE/include/difloat.h | 97 + xie/xc/programs/Xserver/XIE/include/element.h | 476 + xie/xc/programs/Xserver/XIE/include/error.h | 161 + xie/xc/programs/Xserver/XIE/include/flo.h | 111 + xie/xc/programs/Xserver/XIE/include/flodata.h | 170 + xie/xc/programs/Xserver/XIE/include/flostr.h | 225 + xie/xc/programs/Xserver/XIE/include/lut.h | 110 + xie/xc/programs/Xserver/XIE/include/macro.h | 208 + xie/xc/programs/Xserver/XIE/include/memory.h | 86 + .../programs/Xserver/XIE/include/photomap.h | 105 + .../programs/Xserver/XIE/include/photospc.h | 87 + xie/xc/programs/Xserver/XIE/include/roi.h | 89 + xie/xc/programs/Xserver/XIE/include/tables.h | 202 + xie/xc/programs/Xserver/XIE/include/technq.h | 1241 ++ xie/xc/programs/Xserver/XIE/mixie/Imakefile | 26 + .../Xserver/XIE/mixie/control/Imakefile | 32 + .../Xserver/XIE/mixie/control/analyze.c | 189 + .../Xserver/XIE/mixie/control/domain.c | 503 + .../Xserver/XIE/mixie/control/floman.c | 547 + .../Xserver/XIE/mixie/control/sched.c | 264 + .../Xserver/XIE/mixie/control/strip.c | 1197 ++ .../Xserver/XIE/mixie/export/Imakefile | 33 + .../Xserver/XIE/mixie/export/mechist.c | 373 + .../Xserver/XIE/mixie/export/meclut.c | 250 + .../Xserver/XIE/mixie/export/mecphoto.c | 853 + .../Xserver/XIE/mixie/export/mecroi.c | 264 + .../Xserver/XIE/mixie/export/medraw.c | 385 + .../Xserver/XIE/mixie/export/medrawp.c | 431 + .../programs/Xserver/XIE/mixie/export/mefax.c | 614 + .../Xserver/XIE/mixie/export/mejpeg.c | 641 + .../programs/Xserver/XIE/mixie/export/melut.c | 237 + .../Xserver/XIE/mixie/export/mephoto.c | 805 + .../programs/Xserver/XIE/mixie/export/meroi.c | 201 + .../Xserver/XIE/mixie/export/meuncomp.c | 1368 ++ .../Xserver/XIE/mixie/export/schoice.c | 357 + .../programs/Xserver/XIE/mixie/fax/Imakefile | 44 + xie/xc/programs/Xserver/XIE/mixie/fax/bits.h | 466 + xie/xc/programs/Xserver/XIE/mixie/fax/dg31d.c | 393 + xie/xc/programs/Xserver/XIE/mixie/fax/dg32d.c | 489 + xie/xc/programs/Xserver/XIE/mixie/fax/dg4.c | 288 + .../programs/Xserver/XIE/mixie/fax/dtiff2.c | 286 + .../programs/Xserver/XIE/mixie/fax/dtiffpb.c | 293 + xie/xc/programs/Xserver/XIE/mixie/fax/eg31d.c | 290 + xie/xc/programs/Xserver/XIE/mixie/fax/eg32d.c | 671 + .../programs/Xserver/XIE/mixie/fax/etiff2.c | 408 + .../programs/Xserver/XIE/mixie/fax/etiffpb.c | 382 + .../programs/Xserver/XIE/mixie/fax/faxint.h | 96 + .../programs/Xserver/XIE/mixie/fax/faxtabs.c | 79 + .../programs/Xserver/XIE/mixie/fax/faxtabs.h | 12631 +++++++++++++ .../programs/Xserver/XIE/mixie/fax/fencode.h | 372 + .../programs/Xserver/XIE/mixie/fax/fetabs.h | 330 + xie/xc/programs/Xserver/XIE/mixie/fax/gbits.h | 466 + .../programs/Xserver/XIE/mixie/fax/zeroeven.c | 129 + .../Xserver/XIE/mixie/import/Imakefile | 33 + .../Xserver/XIE/mixie/import/miclut.c | 283 + .../Xserver/XIE/mixie/import/micphoto.c | 814 + .../Xserver/XIE/mixie/import/microi.c | 390 + .../Xserver/XIE/mixie/import/midraw.c | 624 + .../programs/Xserver/XIE/mixie/import/mifax.c | 581 + .../Xserver/XIE/mixie/import/mijpeg.c | 626 + .../programs/Xserver/XIE/mixie/import/milut.c | 231 + .../Xserver/XIE/mixie/import/miphoto.c | 858 + .../Xserver/XIE/mixie/import/miregion.c | 1089 ++ .../programs/Xserver/XIE/mixie/import/miroi.c | 233 + .../Xserver/XIE/mixie/import/miuncomp.c | 943 + .../Xserver/XIE/mixie/include/domain.h | 116 + .../programs/Xserver/XIE/mixie/include/fax.h | 220 + .../Xserver/XIE/mixie/include/floman.h | 85 + .../programs/Xserver/XIE/mixie/include/jpeg.h | 92 + .../Xserver/XIE/mixie/include/jpegd.h | 156 + .../Xserver/XIE/mixie/include/jpege.h | 174 + .../Xserver/XIE/mixie/include/meuncomp.h | 126 + .../Xserver/XIE/mixie/include/microi.h | 120 + .../Xserver/XIE/mixie/include/miphoto.h | 86 + .../Xserver/XIE/mixie/include/miuncomp.h | 145 + .../Xserver/XIE/mixie/include/mpgeom.h | 127 + .../Xserver/XIE/mixie/include/mppoint.h | 86 + .../Xserver/XIE/mixie/include/sched.h | 127 + .../Xserver/XIE/mixie/include/strip.h | 335 + .../programs/Xserver/XIE/mixie/include/tex.h | 161 + .../Xserver/XIE/mixie/include/texstr.h | 151 + .../Xserver/XIE/mixie/include/xiemd.h | 227 + .../programs/Xserver/XIE/mixie/jpeg/Imakefile | 65 + xie/xc/programs/Xserver/XIE/mixie/jpeg/README | 402 + .../Xserver/XIE/mixie/jpeg/jcdeflts.c | 632 + .../Xserver/XIE/mixie/jpeg/jcexpand.c | 175 + .../programs/Xserver/XIE/mixie/jpeg/jchuff.c | 1030 ++ .../programs/Xserver/XIE/mixie/jpeg/jcmcu.c | 395 + .../programs/Xserver/XIE/mixie/jpeg/jconfig.h | 480 + .../Xserver/XIE/mixie/jpeg/jcsample.c | 737 + .../programs/Xserver/XIE/mixie/jpeg/jcxie.c | 689 + .../programs/Xserver/XIE/mixie/jpeg/jcxief.c | 492 + .../Xserver/XIE/mixie/jpeg/jdbuffer.c | 150 + .../Xserver/XIE/mixie/jpeg/jddeflts.c | 295 + .../programs/Xserver/XIE/mixie/jpeg/jdhuff.c | 698 + .../programs/Xserver/XIE/mixie/jpeg/jdlossy.c | 244 + .../programs/Xserver/XIE/mixie/jpeg/jdmcu.c | 433 + .../Xserver/XIE/mixie/jpeg/jdsample.c | 510 + .../programs/Xserver/XIE/mixie/jpeg/jdxie.c | 901 + .../programs/Xserver/XIE/mixie/jpeg/jdxief.c | 162 + .../programs/Xserver/XIE/mixie/jpeg/jelossy.c | 254 + .../programs/Xserver/XIE/mixie/jpeg/jfwddct.c | 381 + .../Xserver/XIE/mixie/jpeg/jinclude.h | 200 + .../programs/Xserver/XIE/mixie/jpeg/jmemmgr.c | 1689 ++ .../programs/Xserver/XIE/mixie/jpeg/jmemsys.c | 232 + .../programs/Xserver/XIE/mixie/jpeg/jmemsys.h | 203 + .../Xserver/XIE/mixie/jpeg/jpegdata.h | 1288 ++ .../programs/Xserver/XIE/mixie/jpeg/jrdjfif.c | 1622 ++ .../programs/Xserver/XIE/mixie/jpeg/jrevdct.c | 452 + .../programs/Xserver/XIE/mixie/jpeg/jutils.c | 238 + .../programs/Xserver/XIE/mixie/jpeg/jwrjfif.c | 986 + .../Xserver/XIE/mixie/process/Imakefile | 34 + .../Xserver/XIE/mixie/process/bitfun.c | 429 + .../Xserver/XIE/mixie/process/mparith.c | 1186 ++ .../Xserver/XIE/mixie/process/mpbandc.c | 234 + .../Xserver/XIE/mixie/process/mpbande.c | 552 + .../Xserver/XIE/mixie/process/mpbands.c | 240 + .../Xserver/XIE/mixie/process/mpblend.c | 908 + .../Xserver/XIE/mixie/process/mpcfromi.c | 479 + .../Xserver/XIE/mixie/process/mpcnst.c | 1037 ++ .../Xserver/XIE/mixie/process/mpcomp.c | 1226 ++ .../Xserver/XIE/mixie/process/mpconv.c | 481 + .../Xserver/XIE/mixie/process/mpctoi.c | 1065 ++ .../Xserver/XIE/mixie/process/mpdither.c | 918 + .../Xserver/XIE/mixie/process/mpgeom.c | 148 + .../Xserver/XIE/mixie/process/mpgeomaa.c | 1434 ++ .../Xserver/XIE/mixie/process/mpgeomnn.c | 1120 ++ .../Xserver/XIE/mixie/process/mphist.c | 568 + .../Xserver/XIE/mixie/process/mplogic.c | 814 + .../Xserver/XIE/mixie/process/mppaste.c | 557 + .../Xserver/XIE/mixie/process/mppoint.c | 1037 ++ .../Xserver/XIE/mixie/process/mprgb.c | 1346 ++ .../Xserver/XIE/mixie/process/mpuncnst.c | 314 + xie/xc/programs/xieperf/Imakefile | 22 + xie/xc/programs/xieperf/abort.c | 209 + xie/xc/programs/xieperf/arith.c | 472 + xie/xc/programs/xieperf/await.c | 424 + xie/xc/programs/xieperf/band.c | 684 + xie/xc/programs/xieperf/blend.c | 389 + xie/xc/programs/xieperf/cache.c | 570 + xie/xc/programs/xieperf/compare.c | 324 + xie/xc/programs/xieperf/complex.c | 883 + xie/xc/programs/xieperf/constrain.c | 334 + xie/xc/programs/xieperf/convolve.c | 492 + xie/xc/programs/xieperf/creatdstry.c | 333 + xie/xc/programs/xieperf/cvttoindex.c | 369 + xie/xc/programs/xieperf/dither.c | 313 + xie/xc/programs/xieperf/encode.c | 653 + xie/xc/programs/xieperf/errors.c | 1611 ++ xie/xc/programs/xieperf/events.c | 815 + xie/xc/programs/xieperf/exportcl.c | 958 + xie/xc/programs/xieperf/funcode.c | 607 + xie/xc/programs/xieperf/geometry.c | 713 + xie/xc/programs/xieperf/getnext.c | 213 + xie/xc/programs/xieperf/images/image.001 | 1 + xie/xc/programs/xieperf/images/image.002 | 1 + xie/xc/programs/xieperf/images/image.003 | 1 + xie/xc/programs/xieperf/images/image.004 | 1 + xie/xc/programs/xieperf/images/image.005 | Bin 0 -> 44494 bytes xie/xc/programs/xieperf/images/image.006 | Bin 0 -> 262144 bytes xie/xc/programs/xieperf/images/image.007 | Bin 0 -> 65536 bytes xie/xc/programs/xieperf/images/image.008 | Bin 0 -> 73728 bytes xie/xc/programs/xieperf/images/image.009 | Bin 0 -> 81920 bytes xie/xc/programs/xieperf/images/image.010 | Bin 0 -> 57344 bytes xie/xc/programs/xieperf/images/image.011 | 12856 +++++++++++++ xie/xc/programs/xieperf/images/image.012 | Bin 0 -> 786432 bytes xie/xc/programs/xieperf/images/image.013 | 1 + xie/xc/programs/xieperf/images/image.014 | Bin 0 -> 54020 bytes xie/xc/programs/xieperf/import.c | 873 + xie/xc/programs/xieperf/importcl.c | 695 + xie/xc/programs/xieperf/logical.c | 366 + xie/xc/programs/xieperf/math.c | 413 + xie/xc/programs/xieperf/modify.c | 1097 ++ xie/xc/programs/xieperf/mtchhist.c | 440 + xie/xc/programs/xieperf/pasteup.c | 525 + xie/xc/programs/xieperf/point.c | 641 + xie/xc/programs/xieperf/purgecolst.c | 116 + xie/xc/programs/xieperf/query.c | 447 + xie/xc/programs/xieperf/redefine.c | 254 + xie/xc/programs/xieperf/rgb.c | 493 + xie/xc/programs/xieperf/tests.c | 3860 ++++ xie/xc/programs/xieperf/uconstrain.c | 290 + xie/xc/programs/xieperf/xieperf.c | 4880 +++++ xie/xc/programs/xieperf/xieperf.h | 572 + xie/xc/programs/xieperf/xieperf.man | 793 + xie/xiectl23.py | 37 + xie/xshow | Bin 0 -> 17304 bytes xie/xshow.c | 166 + 1035 files changed, 385859 insertions(+), 1 deletion(-) create mode 100644 harness/mame/xie_acc.lua create mode 100644 harness/mame/xie_acc2.lua create mode 100644 harness/mame/xie_acc3.lua create mode 100644 harness/mame/xie_acc4.lua create mode 100644 harness/mame/xie_acc5.lua create mode 100644 harness/mame/xie_acct.lua create mode 100644 harness/mame/xie_args.lua create mode 100644 harness/mame/xie_arm2.lua create mode 100644 harness/mame/xie_armchk.lua create mode 100644 harness/mame/xie_b36.lua create mode 100644 harness/mame/xie_b8s.lua create mode 100644 harness/mame/xie_b8t.lua create mode 100644 harness/mame/xie_b8v.lua create mode 100644 harness/mame/xie_b8w.lua create mode 100644 harness/mame/xie_chain.lua create mode 100644 harness/mame/xie_cln.lua create mode 100644 harness/mame/xie_cmp.lua create mode 100644 harness/mame/xie_ctl.lua create mode 100644 harness/mame/xie_cvt.lua create mode 100644 harness/mame/xie_ddx.lua create mode 100644 harness/mame/xie_disp.lua create mode 100644 harness/mame/xie_disp2.lua create mode 100644 harness/mame/xie_dst.lua create mode 100644 harness/mame/xie_eb4.lua create mode 100644 harness/mame/xie_elem.lua create mode 100644 harness/mame/xie_elw.lua create mode 100644 harness/mame/xie_elw2.lua create mode 100644 harness/mame/xie_ex1.lua create mode 100644 harness/mame/xie_ex2.lua create mode 100644 harness/mame/xie_ex3.lua create mode 100644 harness/mame/xie_exbr.lua create mode 100644 harness/mame/xie_exec.lua create mode 100644 harness/mame/xie_expdbg.lua create mode 100644 harness/mame/xie_ext.lua create mode 100644 harness/mame/xie_fix.lua create mode 100644 harness/mame/xie_fix2.lua create mode 100644 harness/mame/xie_fix3.lua create mode 100644 harness/mame/xie_gate_only.lua create mode 100644 harness/mame/xie_gateop.lua create mode 100644 harness/mame/xie_handoff.lua create mode 100644 harness/mame/xie_hlp.lua create mode 100644 harness/mame/xie_import.lua create mode 100644 harness/mame/xie_min.lua create mode 100644 harness/mame/xie_min2.lua create mode 100644 harness/mame/xie_min3.lua create mode 100644 harness/mame/xie_min4.lua create mode 100644 harness/mame/xie_min5.lua create mode 100644 harness/mame/xie_min6.lua create mode 100644 harness/mame/xie_min7.lua create mode 100644 harness/mame/xie_min8.lua create mode 100644 harness/mame/xie_min9.lua create mode 100644 harness/mame/xie_outcell.lua create mode 100644 harness/mame/xie_outw.lua create mode 100644 harness/mame/xie_pc.lua create mode 100644 harness/mame/xie_pcfix.lua create mode 100644 harness/mame/xie_pg.lua create mode 100644 harness/mame/xie_pg2.lua create mode 100644 harness/mame/xie_r48.lua create mode 100644 harness/mame/xie_rd.lua create mode 100644 harness/mame/xie_rd200.lua create mode 100644 harness/mame/xie_regs.lua create mode 100644 harness/mame/xie_resource.lua create mode 100644 harness/mame/xie_rp20.lua create mode 100644 harness/mame/xie_s19.lua create mode 100644 harness/mame/xie_s19b.lua create mode 100644 harness/mame/xie_s19p.lua create mode 100644 harness/mame/xie_s19q.lua create mode 100644 harness/mame/xie_s19r.lua create mode 100644 harness/mame/xie_s19x.lua create mode 100644 harness/mame/xie_s43.lua create mode 100644 harness/mame/xie_s43b.lua create mode 100644 harness/mame/xie_s43c.lua create mode 100644 harness/mame/xie_s43d.lua create mode 100644 harness/mame/xie_s43e.lua create mode 100644 harness/mame/xie_s44.lua create mode 100644 harness/mame/xie_s44b.lua create mode 100644 harness/mame/xie_s44c.lua create mode 100644 harness/mame/xie_scl.lua create mode 100644 harness/mame/xie_scl2.lua create mode 100644 harness/mame/xie_sel.lua create mode 100644 harness/mame/xie_src.lua create mode 100644 harness/mame/xie_st.lua create mode 100644 harness/mame/xie_stage.lua create mode 100644 harness/mame/xie_stg2.lua create mode 100644 harness/mame/xie_stg3.lua create mode 100644 harness/mame/xie_stgr.lua create mode 100644 harness/mame/xie_stgrw.lua create mode 100644 harness/mame/xie_store.lua create mode 100644 harness/mame/xie_trace.lua create mode 100644 harness/mame/xie_val.lua create mode 100644 harness/mame/xie_vw.lua create mode 100644 harness/mame/xie_vwr.lua create mode 100644 harness/mame/xie_w198.lua create mode 100644 harness/mame/xie_watch6.lua create mode 100644 harness/mame/xie_watch7.lua create mode 100644 harness/mame/xie_who.lua create mode 100644 harness/mame/xie_who2.lua create mode 100644 harness/mame/xie_wpb8.lua create mode 100644 harness/mame/xie_xfer.lua create mode 100644 xie/.gitignore create mode 100644 xie/GHIDRA_XIE.md create mode 100644 xie/GHIDRA_XIE_HANDLERS.md create mode 100644 xie/GHIDRA_XIE_IMAGE_PATH.md create mode 100644 xie/GHIDRA_XIE_IMPORT.md create mode 100644 xie/GHIDRA_XIE_PIPELINE.md create mode 100644 xie/GHIDRA_XIE_SLOT20.md create mode 100644 xie/MAME_XIE_TRACE.md create mode 100644 xie/README.md create mode 100755 xie/build.sh create mode 100644 xie/build/abort.o create mode 100644 xie/build/await.o create mode 100644 xie/build/clientdata.o create mode 100644 xie/build/colorlist.o create mode 100644 xie/build/conven.o create mode 100644 xie/build/dec/MITMisc.h create mode 100644 xie/build/dec/X.h create mode 100644 xie/build/dec/X11/extensions/XieAppl.h create mode 100644 xie/build/dec/X11/extensions/XieDdx.h create mode 100644 xie/build/dec/X11/extensions/XieFloat.h create mode 100644 xie/build/dec/X11/extensions/XieLib.h create mode 100644 xie/build/dec/X11/extensions/XieProto.h create mode 100644 xie/build/dec/X11/extensions/XieUdpDef.h create mode 100644 xie/build/dec/XI.h create mode 100644 xie/build/dec/XInput.h create mode 100644 xie/build/dec/XIproto.h create mode 100644 xie/build/dec/XShm.h create mode 100644 xie/build/dec/XTest.h create mode 100644 xie/build/dec/Xext.h create mode 100644 xie/build/dec/XieAppl.h create mode 100644 xie/build/dec/XieDdx.h create mode 100644 xie/build/dec/XieFloat.h create mode 100644 xie/build/dec/XieLib.h create mode 100644 xie/build/dec/XieProto.h create mode 100644 xie/build/dec/XieUdpDef.h create mode 100644 xie/build/dec/bits.h create mode 100755 xie/build/dec/decclient create mode 100644 xie/build/dec/extutil.h create mode 100644 xie/build/dec/libXie.a create mode 100644 xie/build/dec/mitmiscstr.h create mode 100644 xie/build/dec/multibuf.h create mode 100644 xie/build/dec/multibufst.h create mode 100644 xie/build/dec/obj/XieConvert.o create mode 100644 xie/build/dec/obj/XieFloat.o create mode 100644 xie/build/dec/obj/XieLibEvents.o create mode 100644 xie/build/dec/obj/XieLibImage.o create mode 100644 xie/build/dec/obj/XieLibProcess.o create mode 100644 xie/build/dec/obj/XieLibResource.o create mode 100644 xie/build/dec/obj/XieLibSession.o create mode 100644 xie/build/dec/obj/XieLibTransport.o create mode 100644 xie/build/dec/obj/XieLibUtils.o create mode 100644 xie/build/dec/shape.h create mode 100644 xie/build/dec/shapestr.h create mode 100644 xie/build/dec/shmstr.h create mode 100644 xie/build/dec/smt.h create mode 100644 xie/build/dec/smtstr.h create mode 100644 xie/build/dec/xemacros.h create mode 100644 xie/build/dec/xestream.h create mode 100644 xie/build/dec/xkmeproto_include.h create mode 100644 xie/build/dec/xtestext1.h create mode 100644 xie/build/dec/xteststr.h create mode 100644 xie/build/dec/xtrapddmi.h create mode 100644 xie/build/dec/xtrapdi.h create mode 100644 xie/build/dec/xtraplib.h create mode 100644 xie/build/dec/xtraplibp.h create mode 100644 xie/build/dec/xtrapproto.h create mode 100644 xie/build/elements.o create mode 100644 xie/build/errors.o create mode 100644 xie/build/events.o create mode 100644 xie/build/free.o create mode 100644 xie/build/ieee.o create mode 100644 xie/build/include/X11/extensions/XIE.h create mode 100644 xie/build/include/X11/extensions/XIElib.h create mode 100644 xie/build/include/X11/extensions/XIEproto.h create mode 100644 xie/build/include/X11/extensions/XIEprotost.h create mode 100644 xie/build/init.o create mode 100644 xie/build/libXIE.a create mode 100644 xie/build/lut.o create mode 100644 xie/build/photoflo.o create mode 100644 xie/build/photomap.o create mode 100644 xie/build/photospace.o create mode 100644 xie/build/roi.o create mode 100644 xie/build/technique.o create mode 100644 xie/build/utils.o create mode 100644 xie/build/xieperf/abort.o create mode 100644 xie/build/xieperf/arith.o create mode 100644 xie/build/xieperf/await.o create mode 100644 xie/build/xieperf/band.o create mode 100644 xie/build/xieperf/blend.o create mode 100644 xie/build/xieperf/cache.o create mode 100644 xie/build/xieperf/compare.o create mode 100644 xie/build/xieperf/complex.o create mode 100644 xie/build/xieperf/constrain.o create mode 100644 xie/build/xieperf/convolve.o create mode 100644 xie/build/xieperf/creatdstry.o create mode 100644 xie/build/xieperf/cvttoindex.o create mode 100644 xie/build/xieperf/dither.o create mode 100644 xie/build/xieperf/encode.o create mode 100644 xie/build/xieperf/errors.o create mode 100644 xie/build/xieperf/events.o create mode 100644 xie/build/xieperf/exportcl.o create mode 100644 xie/build/xieperf/funcode.o create mode 100644 xie/build/xieperf/geometry.o create mode 100644 xie/build/xieperf/getnext.o create mode 100644 xie/build/xieperf/import.o create mode 100644 xie/build/xieperf/importcl.o create mode 100644 xie/build/xieperf/logical.o create mode 100644 xie/build/xieperf/math.o create mode 100644 xie/build/xieperf/modify.o create mode 100644 xie/build/xieperf/mtchhist.o create mode 100644 xie/build/xieperf/pasteup.o create mode 100644 xie/build/xieperf/point.o create mode 100644 xie/build/xieperf/purgecolst.o create mode 100644 xie/build/xieperf/query.o create mode 100644 xie/build/xieperf/redefine.o create mode 100644 xie/build/xieperf/rgb.o create mode 100644 xie/build/xieperf/tests.o create mode 100644 xie/build/xieperf/uconstrain.o create mode 100755 xie/build/xieperf/xieperf create mode 100644 xie/build/xieperf/xieperf.o create mode 100644 xie/decclient.c create mode 100644 xie/docs/dec/DECimage-1200-install-use-EK-V120I-IN-001.pdf create mode 100644 xie/docs/dec/DECimage-1200-install-use-EK-V120I-IN-001.txt create mode 100644 xie/docs/dec/DECwindows-Motif-OpenVMS-XIE-support.pdf create mode 100644 xie/docs/dec/DECwindows-Motif-OpenVMS-XIE-support.txt create mode 100644 xie/docs/dec/DTJ-1991-v03-04-bitonal-image-accelerators.pdf create mode 100644 xie/docs/dec/DTJ-1991-v03-04-bitonal-image-accelerators.txt create mode 100644 xie/docs/dec/README.md create mode 100644 xie/docs/dec/VT1200-release-notes-V2.0-EK-V1200-RN-001.pdf create mode 100644 xie/docs/dec/VT1200-release-notes-V2.0-EK-V1200-RN-001.txt create mode 100644 xie/docs/dec/VT1200-user-guide-EK-V1200-UG-001.pdf create mode 100644 xie/docs/dec/VT1200-user-guide-EK-V1200-UG-001.txt create mode 100644 xie/docs/dec/VXT2000-user-information-XIE3.0.pdf create mode 100644 xie/docs/dec/VXT2000-user-information-XIE3.0.txt create mode 100644 xie/docs/dec/XIEProto.TXT create mode 100644 xie/docs/dec/overview_xie.TXT create mode 100644 xie/docs/dec/xie23-src/include/Imakefile create mode 100644 xie/docs/dec/xie23-src/include/MITMisc.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/Imakefile create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEX.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEXErr.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEXOCs.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEXfuncs.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEXmacs.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEXproto.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/PEXprotost.h create mode 100644 xie/docs/dec/xie23-src/include/PEX/pexSwap.h create mode 100644 xie/docs/dec/xie23-src/include/XI.h create mode 100644 xie/docs/dec/xie23-src/include/XInput.h create mode 100644 xie/docs/dec/xie23-src/include/XIproto.h create mode 100644 xie/docs/dec/xie23-src/include/XShm.h create mode 100644 xie/docs/dec/xie23-src/include/XTest.h create mode 100644 xie/docs/dec/xie23-src/include/Xext.h create mode 100644 xie/docs/dec/xie23-src/include/XieAppl.h create mode 100644 xie/docs/dec/xie23-src/include/XieDdx.h create mode 100644 xie/docs/dec/xie23-src/include/XieFloat.h create mode 100644 xie/docs/dec/xie23-src/include/XieLib.h create mode 100644 xie/docs/dec/xie23-src/include/XieProto.h create mode 100644 xie/docs/dec/xie23-src/include/XieUdpDef.h create mode 100644 xie/docs/dec/xie23-src/include/bits.h create mode 100644 xie/docs/dec/xie23-src/include/extutil.h create mode 100644 xie/docs/dec/xie23-src/include/mitmiscstr.h create mode 100644 xie/docs/dec/xie23-src/include/multibuf.h create mode 100644 xie/docs/dec/xie23-src/include/multibufst.h create mode 100644 xie/docs/dec/xie23-src/include/shape.h create mode 100644 xie/docs/dec/xie23-src/include/shapestr.h create mode 100644 xie/docs/dec/xie23-src/include/shmstr.h create mode 100644 xie/docs/dec/xie23-src/include/smt.h create mode 100644 xie/docs/dec/xie23-src/include/smtstr.h create mode 100644 xie/docs/dec/xie23-src/include/xemacros.h create mode 100644 xie/docs/dec/xie23-src/include/xestream.h create mode 100644 xie/docs/dec/xie23-src/include/xkmeproto_include.h create mode 100644 xie/docs/dec/xie23-src/include/xtestext1.h create mode 100644 xie/docs/dec/xie23-src/include/xteststr.h create mode 100644 xie/docs/dec/xie23-src/include/xtrapddmi.h create mode 100644 xie/docs/dec/xie23-src/include/xtrapdi.h create mode 100644 xie/docs/dec/xie23-src/include/xtraplib.h create mode 100644 xie/docs/dec/xie23-src/include/xtraplibp.h create mode 100644 xie/docs/dec/xie23-src/include/xtrapproto.h create mode 100644 xie/docs/dec/xie23-src/lib/xie/Imakefile create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieConvert.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieFloat.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibEvents.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibImage.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibProcess.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibResource.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibSession.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibTransport.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibUtils.c create mode 100644 xie/docs/dec/xie23-src/lib/xie/XieLibint.h create mode 100644 xie/docs/dec/xie23-src/server/xie/Imakefile create mode 100644 xie/docs/dec/xie23-src/server/xie/XieDisplay.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieDisplay.h create mode 100644 xie/docs/dec/xie23-src/server/xie/XieEvents.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieMacros.h create mode 100644 xie/docs/dec/xie23-src/server/xie/XieMain.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XiePipeInterface.h create mode 100644 xie/docs/dec/xie23-src/server/xie/XieProcess.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieResource.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieServer.h create mode 100644 xie/docs/dec/xie23-src/server/xie/XieSession.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieSwapRep.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieSwapReq.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieTables.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieTransport.c create mode 100644 xie/docs/dec/xie23-src/server/xie/XieTransport.h create mode 100644 xie/docs/dec/xie23-src/server/xie/XieUtils.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiChangeList.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiChangeList.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiConvert.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiConvert.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiDdx.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiDecodeG4.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiDecodeG4.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiExtendInstruct.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiFill.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiFill.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiMi.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiPoint.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiPoint.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiScale.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiScale.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiUtil.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/DmiUtil.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/Imakefile create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiArea.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiArea.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiArithmetic.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiArithmetic.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiBitMasks.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiChangeList.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiChangeList.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiChromeCom.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiChromeCom.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiChromeSep.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiChromeSep.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiCompare.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiCompare.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiConstrain.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiConstrain.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiConvert.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiConvert.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiCrop.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiCrop.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDctDef.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDctMacros.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDctTables.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDdx.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDecodeDct.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDecodeDct.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDecodeG4.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDecodeG4.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDither.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiDither.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiEncodeDct.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiEncodeDct.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiEncodeG4.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiEncodeG4.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiFaxTables.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiFfx.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiFfx.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiFill.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiFill.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiFloat.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiHistogram.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiHistogram.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiLogical.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiLogical.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiLuminance.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiLuminance.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMatchHistogram.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMatchHistogram.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMath.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMath.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMemMgt.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMemMgt.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMi.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMirror.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiMirror.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPipe.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPipe.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPipeRsm.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPipeRsm.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPipeSched.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPipeSched.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPoint.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiPoint.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiRotate.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiRotate.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiScale.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiScale.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiStats.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiStats.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiTranslate.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiTranslate.h create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiUtil.c create mode 100644 xie/docs/dec/xie23-src/server/xie/smi/SmiUtil.h create mode 100644 xie/docs/dec/xie23/README.md create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XieAppl.h create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XieDdx.h create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XieFloat.h create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XieLib.h create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XiePipeInterface.h create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XieProto.h create mode 100644 xie/docs/dec/xie23/include/dec/extensions/XieUdpDef.h create mode 100644 xie/docs/dec/xie23/man/XieAbortFlo.3X create mode 100644 xie/docs/dec/xie23/man/XieAbortStream.3X create mode 100644 xie/docs/dec/xie23/man/XieArea.3X create mode 100644 xie/docs/dec/xie23/man/XieAreaStats.3X create mode 100644 xie/docs/dec/xie23/man/XieArithmetic.3X create mode 100644 xie/docs/dec/xie23/man/XieBindMapToFlo.3X create mode 100644 xie/docs/dec/xie23/man/XieCalloc.3X create mode 100644 xie/docs/dec/xie23/man/XieCallocBits.3X create mode 100644 xie/docs/dec/xie23/man/XieCfree.3X create mode 100644 xie/docs/dec/xie23/man/XieCheckFunction.3X create mode 100644 xie/docs/dec/xie23/man/XieChromeCom.3X create mode 100644 xie/docs/dec/xie23/man/XieChromeSep.3X create mode 100644 xie/docs/dec/xie23/man/XieClonePhoto.3X create mode 100644 xie/docs/dec/xie23/man/XieCompare.3X create mode 100644 xie/docs/dec/xie23/man/XieConstrain.3X create mode 100644 xie/docs/dec/xie23/man/XieCopyImage.3X create mode 100644 xie/docs/dec/xie23/man/XieCreateCpp.3X create mode 100644 xie/docs/dec/xie23/man/XieCreateImage.3X create mode 100644 xie/docs/dec/xie23/man/XieCreatePhoto.3X create mode 100644 xie/docs/dec/xie23/man/XieCreateRoi.3X create mode 100644 xie/docs/dec/xie23/man/XieCreateTmp.3X create mode 100644 xie/docs/dec/xie23/man/XieCrop.3X create mode 100644 xie/docs/dec/xie23/man/XieDither.3X create mode 100644 xie/docs/dec/xie23/man/XieExecuteFlo.3X create mode 100644 xie/docs/dec/xie23/man/XieExport.3X create mode 100644 xie/docs/dec/xie23/man/XieFill.3X create mode 100644 xie/docs/dec/xie23/man/XieFindResource.3X create mode 100644 xie/docs/dec/xie23/man/XieFree.3X create mode 100644 xie/docs/dec/xie23/man/XieFreeBits.3X create mode 100644 xie/docs/dec/xie23/man/XieFreeExport.3X create mode 100644 xie/docs/dec/xie23/man/XieFreeImage.3X create mode 100644 xie/docs/dec/xie23/man/XieFreeResource.3X create mode 100644 xie/docs/dec/xie23/man/XieGetImage.3X create mode 100644 xie/docs/dec/xie23/man/XieGetImageData.3X create mode 100644 xie/docs/dec/xie23/man/XieGetStream.3X create mode 100644 xie/docs/dec/xie23/man/XieGetTile.3X create mode 100644 xie/docs/dec/xie23/man/XieHistogram.3X create mode 100644 xie/docs/dec/xie23/man/XieImport.3X create mode 100644 xie/docs/dec/xie23/man/XieIsBitonal.3X create mode 100644 xie/docs/dec/xie23/man/XieIsCpp.3X create mode 100644 xie/docs/dec/xie23/man/XieIsGrayScale.3X create mode 100644 xie/docs/dec/xie23/man/XieIsIdc.3X create mode 100644 xie/docs/dec/xie23/man/XieIsPhoto.3X create mode 100644 xie/docs/dec/xie23/man/XieIsPhotoFlo.3X create mode 100644 xie/docs/dec/xie23/man/XieIsPhotoMap.3X create mode 100644 xie/docs/dec/xie23/man/XieIsPhotoTap.3X create mode 100644 xie/docs/dec/xie23/man/XieIsRGB.3X create mode 100644 xie/docs/dec/xie23/man/XieIsRoi.3X create mode 100644 xie/docs/dec/xie23/man/XieIsTmp.3X create mode 100644 xie/docs/dec/xie23/man/XieListFunctions.3X create mode 100644 xie/docs/dec/xie23/man/XieLogical.3X create mode 100644 xie/docs/dec/xie23/man/XieLuminance.3X create mode 100644 xie/docs/dec/xie23/man/XieMalloc.3X create mode 100644 xie/docs/dec/xie23/man/XieMallocBits.3X create mode 100644 xie/docs/dec/xie23/man/XieMatchHistogram.3X create mode 100644 xie/docs/dec/xie23/man/XieMath.3X create mode 100644 xie/docs/dec/xie23/man/XieMirror.3X create mode 100644 xie/docs/dec/xie23/man/XiePhotoCount.3X create mode 100644 xie/docs/dec/xie23/man/XiePlaneCount.3X create mode 100644 xie/docs/dec/xie23/man/XiePoint.3X create mode 100644 xie/docs/dec/xie23/man/XiePointStats.3X create mode 100644 xie/docs/dec/xie23/man/XiePutImage.3X create mode 100644 xie/docs/dec/xie23/man/XiePutImageData.3X create mode 100644 xie/docs/dec/xie23/man/XiePutStream.3X create mode 100644 xie/docs/dec/xie23/man/XiePutTile.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryCpp.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryEvents.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryExport.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryFlo.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryMap.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryOpDefaults.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryRoi.3X create mode 100644 xie/docs/dec/xie23/man/XieQueryTmp.3X create mode 100644 xie/docs/dec/xie23/man/XieRealloc.3X create mode 100644 xie/docs/dec/xie23/man/XieReallocBits.3X create mode 100644 xie/docs/dec/xie23/man/XieRotate.3X create mode 100644 xie/docs/dec/xie23/man/XieScale.3X create mode 100644 xie/docs/dec/xie23/man/XieSelectEvents.3X create mode 100644 xie/docs/dec/xie23/man/XieSetOpDefaults.3X create mode 100644 xie/docs/dec/xie23/man/XieSetStream.3X create mode 100644 xie/docs/dec/xie23/man/XieTapFlo.3X create mode 100644 xie/docs/dec/xie23/man/XieTranslate.3X create mode 100644 xie/docs/dec/xie23/man/XieXid.3X create mode 100644 xie/docs/dec/xie23/man/Xie_intro.3X create mode 100644 xie/docs/dec/xieSIarch.txt create mode 100644 xie/docs/dec/xielib.TXT create mode 100644 xie/docs/x11r4/README.md create mode 100644 xie/docs/x11r4/concepts.pdf create mode 100644 xie/docs/x11r4/concepts.ps create mode 100644 xie/docs/x11r4/concepts.txt create mode 100644 xie/docs/x11r4/protocol.pdf create mode 100644 xie/docs/x11r4/protocol.ps create mode 100644 xie/docs/x11r4/protocol.txt create mode 100644 xie/docs/x11r4/server.pdf create mode 100644 xie/docs/x11r4/server.ps create mode 100644 xie/docs/x11r4/server.txt create mode 100644 xie/evidence/ACCELERATOR_NOT_MODELLED.txt create mode 100644 xie/evidence/ACCEL_IS_DMA_NOT_CPU_FED.txt create mode 100644 xie/evidence/ACCEL_ITERATION_2.txt create mode 100644 xie/evidence/ACCEL_MODEL_FIRST_CUT.txt create mode 100644 xie/evidence/ACCEL_REGISTER_MAP_WITH_PCS.txt create mode 100644 xie/evidence/ACCEL_TRACE_DIFF.txt create mode 100644 xie/evidence/CLIENT_DATA_IN_SERVER.txt create mode 100644 xie/evidence/CONTROL_REGS_NOT_STAGING.txt create mode 100644 xie/evidence/CORRECTION_TILE_NOT_IN_VRAM.txt create mode 100644 xie/evidence/DDX_MODULE_INSTRUMENTED.txt create mode 100644 xie/evidence/DDX_progress_with_compression_fixed.txt create mode 100644 xie/evidence/DEC_23_SOURCE_AND_CREATE_FIXED.txt create mode 100644 xie/evidence/DEC_IDS_SEQUENCE_PIXMAP.txt create mode 100644 xie/evidence/DESTINATION_IS_MAIN_RAM.txt create mode 100644 xie/evidence/EXPORT_COMPLETES.txt create mode 100644 xie/evidence/EXPORT_NOW_WRITES_VRAM.txt create mode 100644 xie/evidence/FILL_DATA_REACHES_CPU_ONLY.txt create mode 100644 xie/evidence/IDS_LAYER_NOT_BUILDABLE.txt create mode 100644 xie/evidence/MiEncodeDouble_and_create_layout.txt create mode 100644 xie/evidence/PIPELINE_CRASH_DIAGNOSED.txt create mode 100644 xie/evidence/PIPELINE_PATH_CRASHES.txt create mode 100644 xie/evidence/PIXEL_DATA_REACHES_ACCELERATOR.txt create mode 100644 xie/evidence/ROOT_CAUSE_element_byte4.txt create mode 100644 xie/evidence/STAGING_FINAL.txt create mode 100644 xie/evidence/STAGING_NOT_FILL_DEPENDENT.txt create mode 100644 xie/evidence/STAGING_WRITER_PCS.txt create mode 100644 xie/evidence/STORE_IS_FILL_DEPENDENT.txt create mode 100644 xie/evidence/TILE_IS_IN_VRAM_NOT_ON_SCREEN.txt create mode 100644 xie/evidence/VRAM_IDENTICAL_FOR_BOTH_FILLS.txt create mode 100644 xie/evidence/VRAM_WRITE_ATTRIBUTION.txt create mode 100644 xie/evidence/XFER_ARGUMENTS.txt create mode 100644 xie/evidence/XFER_SIX_ARGUMENTS.txt create mode 100644 xie/evidence/XIE_IMAGE_DISPLAYED.md create mode 100644 xie/evidence/armF_lookup_codes.txt create mode 100644 xie/evidence/arm_check_trace.txt create mode 100644 xie/evidence/arm_does_not_set_byte8.txt create mode 100644 xie/evidence/arm_lookup_byte13.txt create mode 100644 xie/evidence/arm_requires_byte8_eq1.txt create mode 100644 xie/evidence/arm_sets_byte8.txt create mode 100644 xie/evidence/arm_vs_put_branch_divergence.txt create mode 100644 xie/evidence/badmatch_gate_located.txt create mode 100644 xie/evidence/band_d8_zero.txt create mode 100644 xie/evidence/band_element_dump.txt create mode 100644 xie/evidence/baseline_and_arm_failure_after_lookup.txt create mode 100644 xie/evidence/bind_672a4.txt create mode 100644 xie/evidence/byte40_and_outcell.txt create mode 100644 xie/evidence/byte8_no_writer_final.txt create mode 100644 xie/evidence/byte8_slot_sweep.txt create mode 100644 xie/evidence/byte8_watch_validated.txt create mode 100644 xie/evidence/byte8_write_watch_closure.txt create mode 100644 xie/evidence/chain_arm_import_export_ok.txt create mode 100644 xie/evidence/class3_b40_patch.txt create mode 100644 xie/evidence/class3_id_not_stored.txt create mode 100644 xie/evidence/class3_registration_impossible.txt create mode 100644 xie/evidence/class_skip_false_success.txt create mode 100644 xie/evidence/conversion_helpers_probed.txt create mode 100644 xie/evidence/create_by_reference_and_arm_loop.txt create mode 100644 xie/evidence/create_is_fixed_and_puttile_not_reproducible.txt create mode 100644 xie/evidence/create_opcode_sweep.txt create mode 100644 xie/evidence/dec_23_client_built.txt create mode 100644 xie/evidence/dispatch_entry19.txt create mode 100644 xie/evidence/element_byte4_never_written.txt create mode 100644 xie/evidence/element_list_handler_hunt.txt create mode 100644 xie/evidence/element_pointer_timing.txt create mode 100644 xie/evidence/element_poke_no_effect.txt create mode 100644 xie/evidence/element_types_and_render_gate.txt create mode 100644 xie/evidence/element_writes_and_dec_doc.txt create mode 100644 xie/evidence/err2_is_the_render_driver.txt create mode 100644 xie/evidence/events_and_bind_attempt.txt create mode 100644 xie/evidence/export_badvalue_geometry_ruled_out.txt create mode 100644 xie/evidence/export_badvalue_is_in_firmware_ddx.txt create mode 100644 xie/evidence/export_badvalue_sites.txt create mode 100644 xie/evidence/export_before_put.txt create mode 100644 xie/evidence/export_chain_trace.log create mode 100644 xie/evidence/export_fourth_badvalue.txt create mode 100644 xie/evidence/export_half_still_fails.txt create mode 100644 xie/evidence/export_paints_nothing.txt create mode 100644 xie/evidence/export_query_copyarea.txt create mode 100644 xie/evidence/export_renderparams_map.txt create mode 100644 xie/evidence/export_reports_badvalue_unconditionally.txt create mode 100644 xie/evidence/export_request_is_correct.txt create mode 100644 xie/evidence/export_side_state.txt create mode 100644 xie/evidence/export_variants_exhausted.txt create mode 100644 xie/evidence/finalize_returns_zero.txt create mode 100644 xie/evidence/gate_model_reconfirmed.txt create mode 100644 xie/evidence/gate_reached_with_byte8_3.txt create mode 100644 xie/evidence/handler_propagates_render_code.txt create mode 100644 xie/evidence/handoff_dispatch_and_create_shape.txt create mode 100644 xie/evidence/handoff_never_runs.txt create mode 100644 xie/evidence/handoff_runs_now.txt create mode 100644 xie/evidence/import_guard_word5.txt create mode 100644 xie/evidence/import_revalidated.txt create mode 100644 xie/evidence/levels_type_bug_fixed.txt create mode 100644 xie/evidence/lookup_is_6B966.txt create mode 100644 xie/evidence/mame_band_arm2.log create mode 100644 xie/evidence/mame_bind_slot7.txt create mode 100644 xie/evidence/mame_look_dump.log create mode 100644 xie/evidence/mame_look_not_resource.txt create mode 100644 xie/evidence/mame_put_gate.txt create mode 100644 xie/evidence/mame_put_watchpoints.log create mode 100644 xie/evidence/mame_state_diff.txt create mode 100644 xie/evidence/mame_xie_resource.log create mode 100644 xie/evidence/multi_operand_shapes.txt create mode 100644 xie/evidence/no_dd_worker.txt create mode 100644 xie/evidence/outcell_is_object_byte36.txt create mode 100644 xie/evidence/outcell_writer.txt create mode 100644 xie/evidence/payload_handoff_6b640.txt create mode 100644 xie/evidence/photoflo_chain_no_id.txt create mode 100644 xie/evidence/photomap_query_and_corex_control.txt create mode 100644 xie/evidence/pipeline_3_elements.txt create mode 100644 xie/evidence/png/win_baseline.png create mode 100644 xie/evidence/png/win_black.png create mode 100644 xie/evidence/png/win_fill_0f.png create mode 100644 xie/evidence/png/win_fill_aa.png create mode 100644 xie/evidence/png/win_white.png create mode 100644 xie/evidence/png/xie_baseline_noexport.png create mode 100644 xie/evidence/png/xie_baseline_window.png create mode 100644 xie/evidence/png/xie_black_fb.png create mode 100644 xie/evidence/png/xie_black_real.png create mode 100644 xie/evidence/png/xie_black_window.png create mode 100644 xie/evidence/png/xie_fill_0f.png create mode 100644 xie/evidence/png/xie_fill_0f_window.png create mode 100644 xie/evidence/png/xie_fill_aa.png create mode 100644 xie/evidence/png/xie_fill_aa_window.png create mode 100644 xie/evidence/png/xie_white_fb.png create mode 100644 xie/evidence/png/xie_white_real.png create mode 100644 xie/evidence/png/xie_white_window.png create mode 100644 xie/evidence/png/xie_window_tiles.png create mode 100644 xie/evidence/protocol_model_corrected.txt create mode 100644 xie/evidence/put_tile_succeeds.txt create mode 100644 xie/evidence/raw_packet_parse_and_partial_create.txt create mode 100644 xie/evidence/registration_hits_corrected.txt create mode 100644 xie/evidence/render_driver_callers.txt create mode 100644 xie/evidence/render_driver_returns_2.txt create mode 100644 xie/evidence/render_driver_tail_scan.txt create mode 100644 xie/evidence/residual_items_tested.txt create mode 100644 xie/evidence/resource_scan_fail.txt create mode 100644 xie/evidence/rp48_is_set_and_block_is_shared.txt create mode 100644 xie/evidence/rp48_low_byte_tested.txt create mode 100644 xie/evidence/s19_lookup_retrace.txt create mode 100644 xie/evidence/setopdefaults_and_export_ctx.txt create mode 100644 xie/evidence/slot11_bind_and_second_allocator.txt create mode 100644 xie/evidence/slot33_40_operands.txt create mode 100644 xie/evidence/slot43_compare_operands.txt create mode 100644 xie/evidence/slot43_decoded.txt create mode 100644 xie/evidence/slot43_excluded.txt create mode 100644 xie/evidence/slot43_instrumentation.txt create mode 100644 xie/evidence/slot43_is_a_render_request.txt create mode 100644 xie/evidence/slot43_self.txt create mode 100644 xie/evidence/slot44_accepted_shape.txt create mode 100644 xie/evidence/slot44_operand_requirement.txt create mode 100644 xie/evidence/src_base_chain_found.txt create mode 100644 xie/evidence/src_base_sweep_all_slots.txt create mode 100644 xie/evidence/srcbase_watch_and_slots15_22.txt create mode 100644 xie/evidence/three_wrong_assumptions.txt create mode 100644 xie/evidence/trampoline_unreachable.txt create mode 100644 xie/evidence/transport_component_and_export_state.txt create mode 100644 xie/evidence/verified_slot33_44.txt create mode 100644 xie/evidence/word5_path_diverges.txt create mode 100644 xie/evidence/xie23_headers_and_transport.txt create mode 100644 xie/evidence/xie_create_export_probe.txt create mode 100644 xie/evidence/xie_export_crop.png create mode 100644 xie/evidence/xie_export_window_vt1200.png create mode 100644 xie/evidence/xie_export_window_vt1200.txt create mode 100644 xie/evidence/xie_min_client_vt1200.txt create mode 100644 xie/evidence/xie_protocol_spec_found.txt create mode 100644 xie/evidence/xie_raw.py create mode 100644 xie/evidence/xie_scan.py create mode 100644 xie/evidence/xie_scan2.py create mode 100644 xie/evidence/xie_wire_probe.txt create mode 100644 xie/evidence/xieperf_import1_vt1200.txt create mode 100644 xie/evidence/xieperf_import_vt1200.txt create mode 100644 xie/evidence/xieperf_showtechs_vt1200.txt create mode 100644 xie/evidence/xieprobe_vt1200.txt create mode 100644 xie/evidence/xshow_vt1200.txt create mode 100644 xie/ghidra-evidence/dispatch_table.txt create mode 100644 xie/ghidra-evidence/handlers/client_session.txt create mode 100644 xie/ghidra-evidence/handlers/slot00_064C3C.txt create mode 100644 xie/ghidra-evidence/handlers/slot01_068A4C.txt create mode 100644 xie/ghidra-evidence/handlers/slot02_068DA6.txt create mode 100644 xie/ghidra-evidence/handlers/slot03_03FD78.txt create mode 100644 xie/ghidra-evidence/handlers/slot04_03FE06.txt create mode 100644 xie/ghidra-evidence/handlers/slot05_068DDC.txt create mode 100644 xie/ghidra-evidence/handlers/slot06_068EC6.txt create mode 100644 xie/ghidra-evidence/handlers/slot07_066866.txt create mode 100644 xie/ghidra-evidence/handlers/slot08_0668E4.txt create mode 100644 xie/ghidra-evidence/handlers/slot09_06698E.txt create mode 100644 xie/ghidra-evidence/handlers/slot10_066B64.txt create mode 100644 xie/ghidra-evidence/handlers/slot10_selectors.txt create mode 100644 xie/ghidra-evidence/handlers/slot11_0667B6.txt create mode 100644 xie/ghidra-evidence/handlers/slot12_066738.txt create mode 100644 xie/ghidra-evidence/handlers/slot13_066A8E.txt create mode 100644 xie/ghidra-evidence/handlers/slot14_066C34.txt create mode 100644 xie/ghidra-evidence/handlers/slot15_06A536.txt create mode 100644 xie/ghidra-evidence/handlers/slot18_06A5A4.txt create mode 100644 xie/ghidra-evidence/handlers/slot19_06A76E.txt create mode 100644 xie/ghidra-evidence/handlers/slot20_06AA54.txt create mode 100644 xie/ghidra-evidence/handlers/slot21_062D40.txt create mode 100644 xie/ghidra-evidence/handlers/slot22_0630F4.txt create mode 100644 xie/ghidra-evidence/handlers/slot24_06315E.txt create mode 100644 xie/ghidra-evidence/handlers/slot33_064CC8.txt create mode 100644 xie/ghidra-evidence/handlers/slot40_065262.txt create mode 100644 xie/ghidra-evidence/handlers/slot43_065600.txt create mode 100644 xie/ghidra-evidence/handlers/slot44_065CAA.txt create mode 100644 xie/ghidra-evidence/handlers/slot_probe.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot01_0697B4.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot02_069704.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot03_06980C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot04_069864.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot05_0698BC.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot07_06990C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot08_06999C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot09_069740.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot11_069C04.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot12_069C78.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot13_069CD0.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot14_069D28.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot15_069D9C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot18_069E10.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot19_069E84.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot20_069F68.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot21_06A00C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot22_06A1D0.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot24_06A228.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot33_06A29C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot40_06A32C.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot43_06A3A0.txt create mode 100644 xie/ghidra-evidence/image_path/swapper_slot44_06A48A.txt create mode 100644 xie/ghidra-evidence/import/lookup_6B966.txt create mode 100644 xie/ghidra-evidence/import/resource_init_6CA82.txt create mode 100644 xie/ghidra-evidence/import/slot07_op1_6742C.txt create mode 100644 xie/ghidra-evidence/import/slot07_op2_6759A.txt create mode 100644 xie/ghidra-evidence/length_sweep_wire.txt create mode 100644 xie/ghidra-evidence/listings.txt create mode 100644 xie/ghidra-evidence/mame/run_a_level0_diagnostics.txt create mode 100644 xie/ghidra-evidence/mame/run_b_os_terminal_manager.txt create mode 100644 xie/ghidra-evidence/mame/run_c_scalution_jump.txt create mode 100644 xie/ghidra-evidence/mame/run_d_control.txt create mode 100644 xie/ghidra-evidence/mame/scalution_register_writes.txt create mode 100644 xie/ghidra-evidence/mame/scalution_test_head.txt create mode 100644 xie/ghidra-evidence/pipeline/create_slot8_op12.txt create mode 100644 xie/ghidra-evidence/pipeline/dd_input_6B640.txt create mode 100644 xie/ghidra-evidence/pipeline/export_slot21.txt create mode 100644 xie/ghidra-evidence/pipeline/put_slot19.txt create mode 100644 xie/ghidra-evidence/pipeline/resource_init_6CA82.txt create mode 100644 xie/ghidra-evidence/slot20/band_alloc_6C660.txt create mode 100644 xie/ghidra-evidence/slot20/slot19_payload_handoff.txt create mode 100644 xie/ghidra-evidence/slot20/slot20_6AA54.txt create mode 100644 xie/ghidra-evidence/slot20/slot20_helper_6CD68_tail.txt create mode 100755 xie/probe23.py create mode 100644 xie/probe_verify.py create mode 100644 xie/xc/doc/hardcopy/XIE/SI/xieSIarch.txt create mode 100644 xie/xc/doc/hardcopy/XIE/XIEProto/XIEProto.txt create mode 100644 xie/xc/doc/hardcopy/XIE/XIEProto/cmatch.txt create mode 100644 xie/xc/doc/hardcopy/XIE/XIEProto/overview.txt create mode 100644 xie/xc/doc/hardcopy/XIE/XIElib/xielib.txt create mode 100644 xie/xc/include/extensions/XIE.h create mode 100644 xie/xc/include/extensions/XIEproto.h create mode 100644 xie/xc/include/extensions/XIEprotost.h create mode 100644 xie/xc/lib/XIE/Imakefile create mode 100644 xie/xc/lib/XIE/XIE-def.cpp create mode 100644 xie/xc/lib/XIE/XIElib.h create mode 100644 xie/xc/lib/XIE/XIElibint.h create mode 100644 xie/xc/lib/XIE/abort.c create mode 100644 xie/xc/lib/XIE/await.c create mode 100644 xie/xc/lib/XIE/clientdata.c create mode 100644 xie/xc/lib/XIE/colorlist.c create mode 100644 xie/xc/lib/XIE/conven.c create mode 100644 xie/xc/lib/XIE/elements.c create mode 100644 xie/xc/lib/XIE/elements.h create mode 100644 xie/xc/lib/XIE/errors.c create mode 100644 xie/xc/lib/XIE/events.c create mode 100644 xie/xc/lib/XIE/free.c create mode 100644 xie/xc/lib/XIE/globals.h create mode 100644 xie/xc/lib/XIE/ieee.c create mode 100644 xie/xc/lib/XIE/init.c create mode 100644 xie/xc/lib/XIE/init.h create mode 100644 xie/xc/lib/XIE/jump_funcs create mode 100644 xie/xc/lib/XIE/jump_ignore create mode 100644 xie/xc/lib/XIE/jump_vars create mode 100644 xie/xc/lib/XIE/lut.c create mode 100644 xie/xc/lib/XIE/photoflo.c create mode 100644 xie/xc/lib/XIE/photomap.c create mode 100644 xie/xc/lib/XIE/photospace.c create mode 100644 xie/xc/lib/XIE/roi.c create mode 100644 xie/xc/lib/XIE/technique.c create mode 100644 xie/xc/lib/XIE/technique.h create mode 100644 xie/xc/lib/XIE/utils.c create mode 100644 xie/xc/programs/Xserver/XIE/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/dixie/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/echist.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/eclut.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/ecphoto.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/ecroi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/edraw.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/edrawp.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/elut.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/ephoto.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/export/eroi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/iclut.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/icphoto.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/icroi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/idraw.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/idrawp.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/ilut.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/iphoto.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/import/iroi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/parith.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pbandc.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pbande.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pbands.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pblend.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pcfrgb.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pcfromi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pcnst.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pcomp.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pconv.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pctoi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pctrgb.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pdither.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pgeom.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/phist.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/plogic.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/pmath.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/ppaste.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/ppoint.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/process/puncnst.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/colorlst.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/difloat.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/error.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/event.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/flo.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/lut.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/memory.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/photomap.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/protoflo.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/roi.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/session.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/tables.c create mode 100644 xie/xc/programs/Xserver/XIE/dixie/request/technq.c create mode 100644 xie/xc/programs/Xserver/XIE/include/colorlst.h create mode 100644 xie/xc/programs/Xserver/XIE/include/corex.h create mode 100644 xie/xc/programs/Xserver/XIE/include/difloat.h create mode 100644 xie/xc/programs/Xserver/XIE/include/element.h create mode 100644 xie/xc/programs/Xserver/XIE/include/error.h create mode 100644 xie/xc/programs/Xserver/XIE/include/flo.h create mode 100644 xie/xc/programs/Xserver/XIE/include/flodata.h create mode 100644 xie/xc/programs/Xserver/XIE/include/flostr.h create mode 100644 xie/xc/programs/Xserver/XIE/include/lut.h create mode 100644 xie/xc/programs/Xserver/XIE/include/macro.h create mode 100644 xie/xc/programs/Xserver/XIE/include/memory.h create mode 100644 xie/xc/programs/Xserver/XIE/include/photomap.h create mode 100644 xie/xc/programs/Xserver/XIE/include/photospc.h create mode 100644 xie/xc/programs/Xserver/XIE/include/roi.h create mode 100644 xie/xc/programs/Xserver/XIE/include/tables.h create mode 100644 xie/xc/programs/Xserver/XIE/include/technq.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/control/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/control/analyze.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/control/domain.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/control/floman.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/control/sched.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/control/strip.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/mechist.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/meclut.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/mecphoto.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/mecroi.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/medraw.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/medrawp.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/mefax.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/mejpeg.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/melut.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/mephoto.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/meroi.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/meuncomp.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/export/schoice.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/bits.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/dg31d.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/dg32d.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/dg4.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/dtiff2.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/dtiffpb.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/eg31d.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/eg32d.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/etiff2.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/etiffpb.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/faxint.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/faxtabs.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/faxtabs.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/fencode.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/fetabs.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/gbits.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/fax/zeroeven.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/miclut.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/micphoto.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/microi.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/midraw.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/mifax.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/mijpeg.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/milut.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/miphoto.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/miregion.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/miroi.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/import/miuncomp.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/domain.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/fax.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/floman.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/jpeg.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/jpegd.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/jpege.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/meuncomp.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/microi.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/miphoto.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/miuncomp.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/mpgeom.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/mppoint.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/sched.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/strip.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/tex.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/texstr.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/include/xiemd.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/README create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jcdeflts.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jcexpand.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jchuff.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jcmcu.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jconfig.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jcsample.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jcxie.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jcxief.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdbuffer.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jddeflts.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdhuff.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdlossy.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdmcu.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdsample.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdxie.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jdxief.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jelossy.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jfwddct.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jinclude.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jmemmgr.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jmemsys.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jmemsys.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jpegdata.h create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jrdjfif.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jrevdct.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jutils.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/jpeg/jwrjfif.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/Imakefile create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/bitfun.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mparith.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpbandc.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpbande.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpbands.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpblend.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpcfromi.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpcnst.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpcomp.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpconv.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpctoi.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpdither.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpgeom.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpgeomaa.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpgeomnn.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mphist.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mplogic.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mppaste.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mppoint.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mprgb.c create mode 100644 xie/xc/programs/Xserver/XIE/mixie/process/mpuncnst.c create mode 100644 xie/xc/programs/xieperf/Imakefile create mode 100644 xie/xc/programs/xieperf/abort.c create mode 100644 xie/xc/programs/xieperf/arith.c create mode 100644 xie/xc/programs/xieperf/await.c create mode 100644 xie/xc/programs/xieperf/band.c create mode 100644 xie/xc/programs/xieperf/blend.c create mode 100644 xie/xc/programs/xieperf/cache.c create mode 100644 xie/xc/programs/xieperf/compare.c create mode 100644 xie/xc/programs/xieperf/complex.c create mode 100644 xie/xc/programs/xieperf/constrain.c create mode 100644 xie/xc/programs/xieperf/convolve.c create mode 100644 xie/xc/programs/xieperf/creatdstry.c create mode 100644 xie/xc/programs/xieperf/cvttoindex.c create mode 100644 xie/xc/programs/xieperf/dither.c create mode 100644 xie/xc/programs/xieperf/encode.c create mode 100644 xie/xc/programs/xieperf/errors.c create mode 100644 xie/xc/programs/xieperf/events.c create mode 100644 xie/xc/programs/xieperf/exportcl.c create mode 100644 xie/xc/programs/xieperf/funcode.c create mode 100644 xie/xc/programs/xieperf/geometry.c create mode 100644 xie/xc/programs/xieperf/getnext.c create mode 100644 xie/xc/programs/xieperf/images/image.001 create mode 100644 xie/xc/programs/xieperf/images/image.002 create mode 100644 xie/xc/programs/xieperf/images/image.003 create mode 100644 xie/xc/programs/xieperf/images/image.004 create mode 100644 xie/xc/programs/xieperf/images/image.005 create mode 100644 xie/xc/programs/xieperf/images/image.006 create mode 100644 xie/xc/programs/xieperf/images/image.007 create mode 100644 xie/xc/programs/xieperf/images/image.008 create mode 100644 xie/xc/programs/xieperf/images/image.009 create mode 100644 xie/xc/programs/xieperf/images/image.010 create mode 100644 xie/xc/programs/xieperf/images/image.011 create mode 100644 xie/xc/programs/xieperf/images/image.012 create mode 100644 xie/xc/programs/xieperf/images/image.013 create mode 100644 xie/xc/programs/xieperf/images/image.014 create mode 100644 xie/xc/programs/xieperf/import.c create mode 100644 xie/xc/programs/xieperf/importcl.c create mode 100644 xie/xc/programs/xieperf/logical.c create mode 100644 xie/xc/programs/xieperf/math.c create mode 100644 xie/xc/programs/xieperf/modify.c create mode 100644 xie/xc/programs/xieperf/mtchhist.c create mode 100644 xie/xc/programs/xieperf/pasteup.c create mode 100644 xie/xc/programs/xieperf/point.c create mode 100644 xie/xc/programs/xieperf/purgecolst.c create mode 100644 xie/xc/programs/xieperf/query.c create mode 100644 xie/xc/programs/xieperf/redefine.c create mode 100644 xie/xc/programs/xieperf/rgb.c create mode 100644 xie/xc/programs/xieperf/tests.c create mode 100644 xie/xc/programs/xieperf/uconstrain.c create mode 100644 xie/xc/programs/xieperf/xieperf.c create mode 100644 xie/xc/programs/xieperf/xieperf.h create mode 100644 xie/xc/programs/xieperf/xieperf.man create mode 100755 xie/xiectl23.py create mode 100755 xie/xshow create mode 100644 xie/xshow.c diff --git a/harness/mame/vt1200.cpp b/harness/mame/vt1200.cpp index bdf3324..b204e55 100644 --- a/harness/mame/vt1200.cpp +++ b/harness/mame/vt1200.cpp @@ -642,6 +642,13 @@ static const u32 BOARD_BASE[4] = { VT1200_WIN0, VT1200_WIN1, VT1200_WIN2, VT1200 // 160-byte / 80-word pitch MAME computed from HEBLNK/HSBLNK/HTOTAL the text is // sheared and unreadable. See RENDER_REPORT.md. static const u32 VRAM_BASE_BITS = 0x04000000; // where the framebuffer lives +// The image accelerator ("scalution") register block, at bit 0x05600000. The +// firmware's DDX render path (file 0x122D94) drives it and polls 0x5600010 bit 1 +// for "initialisation done", timing out with +// "ERROR: timeout occurred on initialization of scalution" +// and returning BadValue otherwise. Before this was modelled the whole range +// fell inside the VRAM window above, so the poll read pixel data forever. +static const u32 ACCEL_BASE_BITS = 0x05600000; static const int VMEM_PITCH_BITS = 1024; // 0x40 words = 128 bytes static const int VMEM_HEIGHT = 1024; // rows in the framebuffer @@ -866,6 +873,18 @@ private: void unmapped_w(offs_t off, u16 data); void log_unmapped(const char *kind, u32 addr, const char *pc); + // Image accelerator ("scalution") minimum model. Registers observed: + // +0x00 control, +0x10 status (bit 1 = initialised/done), + // +0x20 timing, +0x30 control, +0x80 command/data FIFO, +0x100 control. + u16 m_accel[0x100]{}; + bool m_accel_rdy = false; // 0x5600010 bit 0 handshake + bool m_accel_done = false; // set once the FIFO has consumed data + u16 m_fifo[0x2000]{}; // pixels pushed into the accelerator + u32 m_fifo_in = 0, m_fifo_out = 0; // reset by a data-register write + u32 m_accel_cnt = 0; // words pushed in the current burst + u16 accel_r(offs_t off); + void accel_w(offs_t off, u16 data); + // VT1200_IRQLOG=: log DUART1's IRQ assertions (ISR/SRA at the // moment of the interrupt). FILE *m_irqlog = nullptr; @@ -1107,6 +1126,66 @@ void vt1200_state::unmapped_w(offs_t off, u16 data) log_unmapped("W", (u32)off, pc); } +// --------------------------------------------------------------------------- +// Image accelerator ("scalution") minimum model. +// +// The firmware's DDX render path drives this block and waits for bit 1 of the +// status register to come up, printing +// "ERROR: timeout occurred on initialization of scalution" +// and returning XIE BadValue if it never does. With the block unmapped (it +// used to fall inside the VRAM window) the poll could never succeed, so XIE +// export could never complete. Reporting the ready bit lets the firmware's own +// render path proceed; the pixel engine itself is still not modelled. +// --------------------------------------------------------------------------- +u16 vt1200_state::accel_r(offs_t off) +{ + if (getenv("VT1200_ACCEL_LOG")) + logerror("accel: r %03X\n", (unsigned)off); + // NOTE: the address map hands us (address - base) >> 4, so the registers + // seen at +0x00/+0x10/+0x20/+0x30/+0x80/+0x100 arrive as 0/1/2/3/8/0x10. + // 0x5600200 is the engine's OUTPUT port: the firmware reads it and writes + // each word to the drawable itself (file 0x125528: MOVE *B6,*B1 ; + // ADDK 0x10,B1). So it must return the pixels that were pushed into the + // FIFO, not a status word. + if ((off & 0xff) == 0x20) { + if (m_fifo_out < m_fifo_in) return m_fifo[m_fifo_out++ & 0x1fff]; + return 0x0000; + } + if ((off & 0xff) == 0x01) + // 0x5600010: bit 1 = initialised (DDX setup poll, file 0x122E54), + // bit 2 = transfer complete, bit 9 = done (file 0x1253FC/0x125448), + // bit 0 = DATA READY -- a handshake, not a constant: file 0x1254F2 takes + // the transfer path while it is set and the transfer loop at 0x125568 + // re-enters forever if it never clears. + return 0x0002 | (m_accel_rdy ? 0x0001 : 0x0000) + | (m_accel_done ? (0x0200 | 0x0004) : 0x0000); + { + u16 v = m_accel[off & 0xff]; + // The transfer loop also tests bit 9 ("done") of whichever control + // register the caller passed in B3; report done on the control cluster. + if (m_accel_done) v |= 0x0200; // "done" on the control registers + return v; + } +} + +void vt1200_state::accel_w(offs_t off, u16 data) +{ + m_accel[off & 0xff] = data; + // Data-request handshake: a FIFO command (0x5600080) raises "data ready"; + // the first write to the FIFO data register (0x5600050) consumes it. + // Handshake, taken from file 0x12538C: the host writes the data register + // (0x5600050), then streams the source pixels into the FIFO (0x5600080) in + // bursts of 0x7FE words, then sets bit 0 of 0x5600030. + if ((off & 0xff) == 0x05) { m_accel_rdy = true; m_accel_done = false; m_accel_cnt = 0; + m_fifo_in = m_fifo_out = 0; } // data register write starts a new transfer + else if ((off & 0xff) == 0x08) { + m_fifo[m_fifo_in++ & 0x1fff] = data; + if (++m_accel_cnt >= 0x7fe) { m_accel_rdy = false; m_accel_done = true; m_accel_cnt = 0; } + } + if (getenv("VT1200_ACCEL_LOG")) + logerror("accel: w %03X = %04X\n", (unsigned)off, data); +} + void vt1200_state::program_map(address_map &map) { // Catch-all for anything we do not model -- registered FIRST so every region @@ -1124,7 +1203,25 @@ void vt1200_state::program_map(address_map &map) // 0x04000000..0x040D7FF0 == bytes 0x800000..0x81AFFE (~110 KB, about one // 1280x1024 1bpp framebuffer). Mapping it is what lets the level-1 VIDEO // MEMORY test's walking-bit read-back pass, so it is unconditional now. - map(VRAM_BASE_BITS, 0x1fffffff).ram().share("vram"); + // Image accelerator ("scalution") register block. OPT-IN via VT1200_ACCEL + // so the verified default configuration stays exactly as it was. + // + // What the model does (XIE_IMAGE_DISPLAYED.md in xie/evidence/): it answers + // the status poll, accepts the pixel stream the firmware pushes into the + // FIFO, and returns those words on the output port, which the FIRMWARE then + // stores into the drawable itself (file 0x125528: MOVE *B6,*B1). With it the + // XIE path runs end to end and a client-chosen image appears on screen. + // + // What it does NOT do: it is not a real accelerator. It performs no + // compositing or scaling, and the destination is the caller's pointer, not a + // register -- so this is a stand-in for the device, not a model of it. + if (getenv("VT1200_ACCEL")) { + map(ACCEL_BASE_BITS, ACCEL_BASE_BITS + 0xfff).rw(FUNC(vt1200_state::accel_r), FUNC(vt1200_state::accel_w)); + map(VRAM_BASE_BITS, ACCEL_BASE_BITS - 1).ram().share("vram"); + map(ACCEL_BASE_BITS + 0x1000, 0x1fffffff).ram(); + } else { + map(VRAM_BASE_BITS, 0x1fffffff).ram().share("vram"); + } // Main RAM: 4 MiB (1 MiB onboard + 3 x 1 MiB SIMMs on the real machine). // The TMS34010 is bit-addressed, so 4 MiB of bytes == 0x2000000 address diff --git a/harness/mame/xie_acc.lua b/harness/mame/xie_acc.lua new file mode 100644 index 0000000..6d2945a --- /dev/null +++ b/harness/mame/xie_acc.lua @@ -0,0 +1,8 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("wpset 05600000,400,rw,1,{ printf \"ACC pc=%08X adr=%08X val=%08X\n\", pc, wpaddr, wpdata ; g }") +print("XIE-ACC armed (0x5600000..0x56001FF)") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "acc") diff --git a/harness/mame/xie_acc2.lua b/harness/mame/xie_acc2.lua new file mode 100644 index 0000000..a53a9bc --- /dev/null +++ b/harness/mame/xie_acc2.lua @@ -0,0 +1,9 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600000,400,rw,1,{ printf \"ACC pc=%08X adr=%08X val=%08X\n\", pc, wpaddr, wpdata ; g }") +print("XIE-ACC2 armed (poke + 0x5600000..0x56001FF)") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "acc2") diff --git a/harness/mame/xie_acc3.lua b/harness/mame/xie_acc3.lua new file mode 100644 index 0000000..b35fab6 --- /dev/null +++ b/harness/mame/xie_acc3.lua @@ -0,0 +1,5 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600080,10,w,1,{ printf \"CMD %04X\n\", wpdata ; g }") +dbg:command("wpset 05600050,10,w,1,{ printf \"DAT %04X\n\", wpdata ; g }") +print("XIE-ACC3 armed") diff --git a/harness/mame/xie_acc4.lua b/harness/mame/xie_acc4.lua new file mode 100644 index 0000000..de422ac --- /dev/null +++ b/harness/mame/xie_acc4.lua @@ -0,0 +1,5 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600000,1000,w,1,{ printf \"ACCW %04X %04X\n\", wpaddr, wpdata ; g }") +dbg:command("wpset 05600000,1000,r,1,{ printf \"ACCR %04X\n\", wpaddr ; g }") +print("XIE-ACC4 armed") diff --git a/harness/mame/xie_acc5.lua b/harness/mame/xie_acc5.lua new file mode 100644 index 0000000..52dcea0 --- /dev/null +++ b/harness/mame/xie_acc5.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600000,1000,w,1,{ printf \"ACCW pc=%08X %04X %04X\n\", pc, wpaddr, wpdata ; g }") +print("XIE-ACC5 armed") diff --git a/harness/mame/xie_acct.lua b/harness/mame/xie_acct.lua new file mode 100644 index 0000000..a15d36c --- /dev/null +++ b/harness/mame/xie_acct.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600000,200,rw,1,{ printf \"ACC %08X %04X %08X\n\", wpaddr, wpdata, pc ; g }") +print("XIE-ACCT armed") diff --git a/harness/mame/xie_args.lua b/harness/mame/xie_args.lua new file mode 100644 index 0000000..cab2a09 --- /dev/null +++ b/harness/mame/xie_args.lua @@ -0,0 +1,9 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3FB29D70,,{ printf \"ARGS a0=%08X a1=%08X a2=%08X a3=%08X a4=%08X a7=%08X\n\", a0, a1, a2, a3, a4, a7 ; g }") +print("XIE-ARGS armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "args") diff --git a/harness/mame/xie_arm2.lua b/harness/mame/xie_arm2.lua new file mode 100644 index 0000000..8de2e90 --- /dev/null +++ b/harness/mame/xie_arm2.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F5565D0,,{ printf \"ACBA a11=%08X b8=%02X b12=%02X\\n\", a11, b@(a11+0x40), b@(a11+0x60) ; g }") +dbg:command("bpset 3F5565F0,,{ printf \"ACBE a7=%08X\\n\", a7 ; g }") +dbg:command("bpset 3F556620,,{ printf \"ACC4 a7=%08X\\n\", a7 ; g }") +dbg:command("bpset 3F556650,,{ printf \"ACCA a7=%08X\\n\", a7 ; g }") +dbg:command("bpset 3F556680,,{ printf \"ACD0 a7=%08X\\n\", a7 ; g }") +dbg:command("bpset 3F5566A0,,{ printf \"ACD4_BADMATCH\\n\" ; g }") +dbg:command("bpset 3F5569A0,,{ printf \"OKPATH_6AD34\\n\" ; g }") +print("XIE-ARM2 armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "arm2") diff --git a/harness/mame/xie_armchk.lua b/harness/mame/xie_armchk.lua new file mode 100644 index 0000000..6c0d2d8 --- /dev/null +++ b/harness/mame/xie_armchk.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55E5D0,,{ printf \"ACBA a11=%08X b8=%02X b12=%02X\n\", a11, b@(a11+0x40), b@(a11+0x60) ; g }") +dbg:command("bpset 3F55E5F0,,{ printf \"ACBE a7=%08X\n\", a7 ; g }") +dbg:command("bpset 3F55E620,,{ printf \"ACC4 a7=%08X\n\", a7 ; g }") +dbg:command("bpset 3F55E650,,{ printf \"ACCA a7=%08X (req byte13)\n\", a7 ; g }") +dbg:command("bpset 3F55E680,,{ printf \"ACD0 a7=%08X\n\", a7 ; g }") +dbg:command("bpset 3F55E6A0,,{ printf \"ACD4_BADMATCH\n\" ; g }") +print("XIE-ARMCHK armed 7 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "armchk") diff --git a/harness/mame/xie_b36.lua b/harness/mame/xie_b36.lua new file mode 100644 index 0000000..641af58 --- /dev/null +++ b/harness/mame/xie_b36.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D560,,{ printf \"STORE src120=%08X\n\", d@(a7+0x120) ; g }") +dbg:command("bpset 3F55D5C0,,{ printf \"OUTCEL a11=%08X star=%08X\n\", a11, d@(a11) ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"T_GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F55DF10,,{ printf \"LK_SUCCESS_6BBE2\n\" ; g }") +print("XIE-B36 armed 6 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "b36") diff --git a/harness/mame/xie_b8s.lua b/harness/mame/xie_b8s.lua new file mode 100644 index 0000000..abef72d --- /dev/null +++ b/harness/mame/xie_b8s.lua @@ -0,0 +1,28 @@ +-- byte8 watch + PROVABLE stack control +local frames = 0 +local lastwp, lastaddr = "", 0 +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +local idstore = 0x3F200000 + 0x67B04*8 +dbg:command(string.format("bpset %08X,,{ printf \"CTRL_IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", idstore)) +print("XIE-B8S armed 1 breakpoint") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp6.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local p = tonumber(txt) + if p and p ~= 0 and p ~= lastaddr then + lastaddr = p + local sp = cpu.state["SP"].value + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"B8 pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", p + 8*8)) + -- stack control: 256 bits just below SP, written by the next push + dbg:command(string.format("wpset %08X,100,w,1,{ printf \"SCTRL pc=%%08X\\n\", pc ; g }", sp - 0x100)) + print(string.format("XIE-B8S installed: byte8 %08X ; stack ctrl at %08X (sp=%08X)", p + 8*8, sp - 0x100, sp)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "b8s") diff --git a/harness/mame/xie_b8t.lua b/harness/mame/xie_b8t.lua new file mode 100644 index 0000000..65ef0fa --- /dev/null +++ b/harness/mame/xie_b8t.lua @@ -0,0 +1,27 @@ +-- byte8 watches on TWO objects + stack positive control +local frames = 0 +local lastwp = "" +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +dbg:command(string.format("bpset %08X,,{ printf \"CTRL_IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", 0x3F200000 + 0x67B04*8)) +print("XIE-B8T armed 1 breakpoint") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp7.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local a, b = txt:match("(%d+),(%d+)") + if a and b then + local pa, pb = tonumber(a), tonumber(b) + local sp = cpu.state["SP"].value + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"B8A pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", pa + 8*8)) + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"B8B pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", pb + 8*8)) + dbg:command(string.format("wpset %08X,100,w,1,{ printf \"SCTRL pc=%%08X\\n\", pc ; g }", sp - 0x100)) + print(string.format("XIE-B8T installed: A byte8 %08X, B byte8 %08X, stack %08X", pa+8*8, pb+8*8, sp-0x100)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "b8t") diff --git a/harness/mame/xie_b8v.lua b/harness/mame/xie_b8v.lua new file mode 100644 index 0000000..7891181 --- /dev/null +++ b/harness/mame/xie_b8v.lua @@ -0,0 +1,27 @@ +-- byte8 write watch + positive-control watch on VRAM (generated addresses) +local frames = 0 +local lastwp, lastaddr = "", 0 +local dbg = manager.machine.debugger +local idstore = 0x3F200000 + 0x67B04*8 +local s19ret = 0x3F200000 + 0x6A7B4*8 +dbg:command(string.format("bpset %08X,,{ printf \"CTRL_IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", idstore)) +dbg:command(string.format("bpset %08X,,{ printf \"CTRL_S19RET a8=%%08X\\n\", a8 ; g }", s19ret)) +print("XIE-B8V armed 2 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp4.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local p = tonumber(txt) + if p and p ~= 0 and p ~= lastaddr then + lastaddr = p + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"B8 pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", p + 8*8)) + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"VCTRL\\n\" ; g }", 0x04000000)) + print(string.format("XIE-B8V installed: byte8 at %08X + VRAM control", p + 8*8)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "b8v") diff --git a/harness/mame/xie_b8w.lua b/harness/mame/xie_b8w.lua new file mode 100644 index 0000000..3c9f8cb --- /dev/null +++ b/harness/mame/xie_b8w.lua @@ -0,0 +1,25 @@ +-- byte8 write watch + WIDE VRAM control (1 KB) to validate the mechanism +local frames = 0 +local lastwp, lastaddr = "", 0 +local dbg = manager.machine.debugger +local idstore = 0x3F200000 + 0x67B04*8 +dbg:command(string.format("bpset %08X,,{ printf \"CTRL_IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", idstore)) +print("XIE-B8W armed 1 breakpoint") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp5.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local p = tonumber(txt) + if p and p ~= 0 and p ~= lastaddr then + lastaddr = p + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"B8 pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", p + 8*8)) + dbg:command("wpset 04000000,2000,w,1,{ printf \"VCTRL pc=%08X\\n\", pc ; g }") + print(string.format("XIE-B8W installed: byte8 %08X + VRAM 1KB control", p + 8*8)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "b8w") diff --git a/harness/mame/xie_chain.lua b/harness/mame/xie_chain.lua new file mode 100644 index 0000000..7796058 --- /dev/null +++ b/harness/mame/xie_chain.lua @@ -0,0 +1,12 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2D94B0,,{ printf \"RP a11=%08X src_base610=%08X\n\", a11, d@(a11+0x610) ; g }") +dbg:command("bpset 3F55DF10,,{ printf \"LK_SUCCESS\n\" ; g }") +print("XIE-CHAIN armed 5 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "chain") diff --git a/harness/mame/xie_cln.lua b/harness/mame/xie_cln.lua new file mode 100644 index 0000000..eebd889 --- /dev/null +++ b/harness/mame/xie_cln.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2DD1B0,,{ printf \"after 7F67F38 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD250,,{ printf \"after 7E75EA8 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD330,,{ printf \"after 7EA45FE a8=%08X a11=%08X\n\", a8, a11 ; g }") +dbg:command("bpset 3F2DD3F0,,{ printf \"after 7E7FE96 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD410,,{ printf \"after store a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DDE00,,{ printf \"RET a8=%08X\n\", a8 ; g }") +print("XIE-CLN armed 6") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "cln") diff --git a/harness/mame/xie_cmp.lua b/harness/mame/xie_cmp.lua new file mode 100644 index 0000000..4fcdf7b --- /dev/null +++ b/harness/mame/xie_cmp.lua @@ -0,0 +1,17 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2DCF90,,{ printf \"r9F2 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD000,,{ printf \"rA00 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD0C0,,{ printf \"rA18 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD150,,{ printf \"rA2A a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD180,,{ printf \"ERRCHAIN_1BA30\n\" ; g }") +dbg:command("bpset 3F2DD530,,{ printf \"ERR_1BAA6\n\" ; g }") +dbg:command("bpset 3F2DD630,,{ printf \"ERR_1BAC6\n\" ; g }") +dbg:command("bpset 3F2DDCB0,,{ printf \"ERR_1BB96\n\" ; g }") +dbg:command("bpset 3F2DDE00,,{ printf \"DRIVER_RET a8=%08X\n\", a8 ; g }") +print("XIE-CMP armed 10") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "cmp") diff --git a/harness/mame/xie_ctl.lua b/harness/mame/xie_ctl.lua new file mode 100644 index 0000000..10564b7 --- /dev/null +++ b/harness/mame/xie_ctl.lua @@ -0,0 +1,5 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600020,10,w,1,{ printf \"R20 %04X %08X\n\", wpdata, pc ; g }") +dbg:command("wpset 05600030,10,w,1,{ printf \"R30 %04X %08X\n\", wpdata, pc ; g }") +print("XIE-CTL armed") diff --git a/harness/mame/xie_cvt.lua b/harness/mame/xie_cvt.lua new file mode 100644 index 0000000..3bbb2df --- /dev/null +++ b/harness/mame/xie_cvt.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3FE114E0,,{ printf \"H229C a0=%08X a1=%08X a8=%08X\n\", a0, a1, a8 ; g }") +dbg:command("bpset 3FE0F590,,{ printf \"H1EB2 a0=%08X a1=%08X a8=%08X\n\", a0, a1, a8 ; g }") +dbg:command("bpset 3FE0FAF0,,{ printf \"H1F5E a0=%08X a1=%08X\n\", a0, a1 ; g }") +dbg:command("bpset 3FE11080,,{ printf \"H2210 a0=%08X a1=%08X\n\", a0, a1 ; g }") +dbg:command("bpset 3F2D9EF0,,{ printf \"after 229C#1 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA030,,{ printf \"after 1EB2#2 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA130,,{ printf \"after 2210 a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA220,,{ printf \"after 2210 b a8=%08X\n\", a8 ; g }") +print("XIE-CVT armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "cvt") diff --git a/harness/mame/xie_ddx.lua b/harness/mame/xie_ddx.lua new file mode 100644 index 0000000..87500dc --- /dev/null +++ b/harness/mame/xie_ddx.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F3AF870,,{ printf \"DDX class=%d\n\", b@(a11+0x630) ; g }") +dbg:command("bpset 3F3AF950,,{ printf \"DDX f610=%08X (BadValue if 0)\n\", d@(a9+0x610) ; g }") +dbg:command("bpset 3F3AF790,,{ printf \"DDX_BADVALUE_class\n\" ; g }") +dbg:command("bpset 3F3AF980,,{ printf \"DDX_BADVALUE_610zero\n\" ; g }") +dbg:command("bpset 3F3AFB10,,{ printf \"DDX_continue_after_610\n\" ; g }") +dbg:command("bpset 3F3B8A60,,{ printf \"DDX_RET a8=%08X\n\", a8 ; g }") +print("XIE-DDX armed 6") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "ddx") diff --git a/harness/mame/xie_disp.lua b/harness/mame/xie_disp.lua new file mode 100644 index 0000000..419bd9f --- /dev/null +++ b/harness/mame/xie_disp.lua @@ -0,0 +1,17 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F55B200,,{ printf \"H_ENTRY\n\" ; g }") +dbg:command("bpset 3F55C1F0,,{ printf \"H_83E ddobj=%08X b1=%02X a8=%08X\n\", a11, b@(a11+0x8), a8 ; g }") +dbg:command("bpset 3F55B270,,{ printf \"H_64E_disp1\n\" ; g }") +dbg:command("bpset 3F55B3A0,,{ printf \"H_674 cnt=%08X\n\", d@(a13+0x1f0) ; g }") +dbg:command("bpset 3F55B420,,{ printf \"H_684 d8=%08X\n\", d@(a9+0xd8) ; g }") +dbg:command("bpset 3F55B440,,{ printf \"H_688\n\" ; g }") +dbg:command("bpset 3F55B500,,{ printf \"H_6A0_call_7EAC356\n\" ; g }") +dbg:command("bpset 3F55B750,,{ printf \"H_6EA_call_7E80008\n\" ; g }") +dbg:command("bpset 3F55BF40,,{ printf \"H_7E8_disp4\n\" ; g }") +dbg:command("bpset 3F55C260,,{ printf \"H_84C_default\n\" ; g }") +print("XIE-DISP armed 10") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "disp") diff --git a/harness/mame/xie_disp2.lua b/harness/mame/xie_disp2.lua new file mode 100644 index 0000000..e2c05b3 --- /dev/null +++ b/harness/mame/xie_disp2.lua @@ -0,0 +1,18 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55B200,,{ printf \"H_ENTRY\n\" ; g }") +dbg:command("bpset 3F55C1F0,,{ printf \"H_83E ddobj=%08X b1=%02X a8=%08X\n\", a11, b@(a11+0x8), a8 ; g }") +dbg:command("bpset 3F55B270,,{ printf \"H_64E_disp1\n\" ; g }") +dbg:command("bpset 3F55B3A0,,{ printf \"H_674 cnt=%08X\n\", d@(a13+0x1f0) ; g }") +dbg:command("bpset 3F55B420,,{ printf \"H_684 d8=%08X\n\", d@(a9+0xd8) ; g }") +dbg:command("bpset 3F55B440,,{ printf \"H_688\n\" ; g }") +dbg:command("bpset 3F55B500,,{ printf \"H_6A0_call_7EAC356\n\" ; g }") +dbg:command("bpset 3F55B750,,{ printf \"H_6EA_call_7E80008\n\" ; g }") +dbg:command("bpset 3F55BF40,,{ printf \"H_7E8_disp4\n\" ; g }") +dbg:command("bpset 3F55C260,,{ printf \"H_84C_default\n\" ; g }") +print("XIE-DISP2 armed 11") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "disp2") diff --git a/harness/mame/xie_dst.lua b/harness/mame/xie_dst.lua new file mode 100644 index 0000000..0d3e411 --- /dev/null +++ b/harness/mame/xie_dst.lua @@ -0,0 +1,9 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3FB2A940,,{ printf \"DST b1=%08X b2=%08X a6=%08X\n\", b1, b2, a6 ; g }") +print("XIE-DST armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "dst") diff --git a/harness/mame/xie_eb4.lua b/harness/mame/xie_eb4.lua new file mode 100644 index 0000000..f7a2e6a --- /dev/null +++ b/harness/mame/xie_eb4.lua @@ -0,0 +1,24 @@ +local frames = 0 +local last = "" +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +print("XIE-EB4 armed") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/eb4.txt", "r") + if f then + local t = f:read("*l"); f:close() + if t and t ~= last then + last = t + local e = tonumber(t) + if e and e ~= 0 then + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"EB4WRITE pc=%%08X val=%%08X\n\", pc, wpdata ; g }", e + 0x20)) + local sp = cpu.state["SP"].value + dbg:command(string.format("wpset %08X,100,w,1,{ printf \"SCTRL\n\" ; g }", (sp - 0x100) & 0x3FFFFFFF)) + print(string.format("XIE-EB4 watching %08X (+ctrl)", e + 0x20)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "eb4") diff --git a/harness/mame/xie_elem.lua b/harness/mame/xie_elem.lua new file mode 100644 index 0000000..a7ad1d6 --- /dev/null +++ b/harness/mame/xie_elem.lua @@ -0,0 +1,10 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2D95C0,,{ printf \"TYPE1 a5=%08X tgt=%08X\\n\", a5, a5+0x58 ; g }") +dbg:command("bpset 3F2D9B10,,{ printf \"TYPE2 a5=%08X tgt=%08X\\n\", a5, a5+0x58 ; g }") +print("XIE-ELEM armed 3") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "elem") diff --git a/harness/mame/xie_elw.lua b/harness/mame/xie_elw.lua new file mode 100644 index 0000000..605304d --- /dev/null +++ b/harness/mame/xie_elw.lua @@ -0,0 +1,26 @@ +local frames = 0 +local lastwp = "" +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +print("XIE-ELW armed 1 breakpoint") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp8.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local a, b = txt:match("(%d+),(%d+)") + if a and b then + local pa, pb = tonumber(a), tonumber(b) + dbg:command(string.format("wpset %08X,800,w,1,{ printf \"ELW pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", pa)) + dbg:command(string.format("wpset %08X,20,w,1,{ printf \"BANDW pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", pb)) + local sp = cpu.state["SP"].value + dbg:command(string.format("wpset %08X,100,w,1,{ printf \"SCTRL\n\" ; g }", (sp - 0x100) & 0x3FFFFFFF)) + print(string.format("XIE-ELW installed elem=%08X(+800) bandslot=%08X ctrl=%08X", pa, pb, sp)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "elw") diff --git a/harness/mame/xie_elw2.lua b/harness/mame/xie_elw2.lua new file mode 100644 index 0000000..f666638 --- /dev/null +++ b/harness/mame/xie_elw2.lua @@ -0,0 +1,27 @@ +local frames = 0 +local lastwp = "" +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2D94B0,,{ printf \"RP a11=%08X src_base610=%08X\n\", a11, d@(a11+0x610) ; g }") +dbg:command("bpset 3F2D95C0,,{ printf \"TYPE1\n\" ; g }") +dbg:command("bpset 3F2D9B10,,{ printf \"TYPE2\n\" ; g }") +print("XIE-ELW2 armed 4") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp9.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local a, b = txt:match("(%d+),(%d+)") + if a and b then + local pa, pb = tonumber(a), tonumber(b) + dbg:command(string.format("wpset %08X,800,w,1,{ printf \"ELW pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", pa)) + dbg:command(string.format("wpset %08X,20,w,1,{ printf \"BANDW pc=%%08X val=%%08X\\n\", pc, wpdata ; g }", pb)) + print(string.format("XIE-ELW2 installed elem=%08X bandslot=%08X", pa, pb)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "elw2") diff --git a/harness/mame/xie_ex1.lua b/harness/mame/xie_ex1.lua new file mode 100644 index 0000000..9ee4da7 --- /dev/null +++ b/harness/mame/xie_ex1.lua @@ -0,0 +1,17 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F516BF0,,{ printf \"EX_LK ret=%08X obj=%08X\n\", a8, d@(a13+0x20) ; g }") +dbg:command("bpset 3F516C70,,{ printf \"EX_F5 obj=%08X f5=%08X\n\", a11, d@(a11+0x28) ; g }") +dbg:command("bpset 3F516DE0,,{ printf \"EX_CK1 req=%08X obj=%08X\n\", d@(a9+0x80), d@(a11+0x80) ; g }") +dbg:command("bpset 3F516FC0,,{ printf \"EX_CK2 req=%08X obj=%08X\n\", d@(a9+0xa0), d@(a11+0xa0) ; g }") +dbg:command("bpset 3F517180,,{ printf \"EX_CK3 c0=%08X e0=%08X\n\", d@(a9+0xc0), d@(a9+0xe0) ; g }") +dbg:command("bpset 3F516CA0,,{ printf \"EX_BADMATCH\n\" ; g }") +dbg:command("bpset 3F516E50,,{ printf \"EX_BADVALUE_1\n\" ; g }") +dbg:command("bpset 3F517030,,{ printf \"EX_BADVALUE_2\n\" ; g }") +dbg:command("bpset 3F5171F0,,{ printf \"EX_BADVALUE_3\n\" ; g }") +print("XIE-EX1 armed 10") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "ex1") diff --git a/harness/mame/xie_ex2.lua b/harness/mame/xie_ex2.lua new file mode 100644 index 0000000..dc9bfe7 --- /dev/null +++ b/harness/mame/xie_ex2.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F517EE0,,{ printf \"EX2_CALL_7EA47B6\n\" ; g }") +dbg:command("bpset 3F517F10,,{ printf \"EX2_RET a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F517F40,,{ printf \"EX2_JREQ a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F5184D0,,{ printf \"RD_RET a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F518750,,{ printf \"EPI_RET a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F517DE0,,{ printf \"EXIT_62FBC\n\" ; g }") +print("XIE-EX2 armed 7") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "ex2") diff --git a/harness/mame/xie_ex3.lua b/harness/mame/xie_ex3.lua new file mode 100644 index 0000000..228019f --- /dev/null +++ b/harness/mame/xie_ex3.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F518150,,{ printf \"ALLOC ret=%08X\n\", a8 ; g }") +dbg:command("bpset 3F518190,,{ printf \"BADALLOC_path\n\" ; g }") +dbg:command("bpset 3F518390,,{ printf \"SETUP_before_render\n\" ; g }") +dbg:command("bpset 3F5184C0,,{ printf \"CALL_RD\n\" ; g }") +dbg:command("bpset 3F5184F0,,{ printf \"AFTER_RD a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F518740,,{ printf \"OK_EXIT\n\" ; g }") +dbg:command("bpset 3F518750,,{ printf \"EPI a8=%08X\n\", a8 ; g }") +print("XIE-EX3 armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "ex3") diff --git a/harness/mame/xie_exbr.lua b/harness/mame/xie_exbr.lua new file mode 100644 index 0000000..6fe83d8 --- /dev/null +++ b/harness/mame/xie_exbr.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2DC420,,{ printf \"J884 b9=%02X (JREQ=error if 0)\n\", b@(d@(0xa6000)+0x48) ; g }") +dbg:command("bpset 3F2DC440,,{ printf \"CONT_1B888\n\" ; g }") +dbg:command("bpset 3F2DCF90,,{ printf \"J9F2 (JR 1BA30) a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DD180,,{ printf \"ERR_1BA30\n\" ; g }") +dbg:command("bpset 3F2DD340,,{ printf \"ERR_1BA68 MOVK2 (reports BadValue)\n\" ; g }") +dbg:command("bpset 3F2DDE00,,{ printf \"DRIVER_RET a8=%08X\n\", a8 ; g }") +print("XIE-EXBR armed 6") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "exbr") diff --git a/harness/mame/xie_exec.lua b/harness/mame/xie_exec.lua new file mode 100644 index 0000000..fb95ec6 --- /dev/null +++ b/harness/mame/xie_exec.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2D95C0,,{ printf \"TYPE1\n\" ; g }") +dbg:command("bpset 3F2D9B10,,{ printf \"TYPE2\n\" ; g }") +dbg:command("bpset 3F2DA350,,{ printf \"TYPE3\n\" ; g }") +dbg:command("bpset 3F2DA7A0,,{ printf \"TYPE4\n\" ; g }") +dbg:command("bpset 3F2DAC10,,{ printf \"TYPE5\n\" ; g }") +dbg:command("bpset 3F2D94B0,,{ printf \"RP a11=%08X src_base610=%08X\n\", a11, d@(a11+0x610) ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +print("XIE-EXEC armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "exec") diff --git a/harness/mame/xie_expdbg.lua b/harness/mame/xie_expdbg.lua new file mode 100644 index 0000000..c54e45a --- /dev/null +++ b/harness/mame/xie_expdbg.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F516BF0,,{ printf \"EX_LK ret=%08X obj=%08X\n\", a8, d@(a13+0x20) ; g }") +dbg:command("bpset 3F516C70,,{ printf \"EX_F5 obj=%08X f5=%08X\n\", a11, d@(a11+0x28) ; g }") +dbg:command("bpset 3F516DE0,,{ printf \"EX_CK1 req80=%08X obj80=%08X\n\", d@(a9+0x80), d@(a11+0x80) ; g }") +dbg:command("bpset 3F516FC0,,{ printf \"EX_CK2 req_a0=%08X obj_a0=%08X\n\", d@(a9+0xa0), d@(a11+0xa0) ; g }") +dbg:command("bpset 3F517180,,{ printf \"EX_CK3 req_c0=%08X req_e0=%08X\n\", d@(a9+0xc0), d@(a9+0xe0) ; g }") +dbg:command("bpset 3F516CA0,,{ printf \"EX_BADMATCH_path\n\" ; g }") +dbg:command("bpset 3F516E50,,{ printf \"EX_BADVALUE_1\n\" ; g }") +print("XIE-EXP armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "exp") diff --git a/harness/mame/xie_ext.lua b/harness/mame/xie_ext.lua new file mode 100644 index 0000000..fdde64c --- /dev/null +++ b/harness/mame/xie_ext.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F5177C0,,{ printf \"EX_EF8 f80=%08X fA0=%08X fC0=%08X a11=%08X\n\", d@(a13+0x80), d@(a13+0xa0), d@(a13+0xc0), a11 ; g }") +dbg:command("bpset 3F5177D0,,{ printf \"EX_EFA objA0=%08X\n\", d@(a11+0xa0) ; g }") +dbg:command("bpset 3F517870,,{ printf \"EX_F0E a7=%08X a5=%08X\n\", a7, a5 ; g }") +dbg:command("bpset 3F517890,,{ printf \"EX_F12 a5=%08X (JRLE if <=0)\n\", a5 ; g }") +dbg:command("bpset 3F5178C0,,{ printf \"EX_REJECT_BADVALUE\n\" ; g }") +dbg:command("bpset 3F517A00,,{ printf \"EX_CONTINUE_TO_RENDER\n\" ; g }") +print("XIE-EXT armed 7") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "ext") diff --git a/harness/mame/xie_fix.lua b/harness/mame/xie_fix.lua new file mode 100644 index 0000000..a47b153 --- /dev/null +++ b/harness/mame/xie_fix.lua @@ -0,0 +1,8 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; printf \"FORCED elem.b4=0 (was %02X) rp=%08X\n\", 0, d@(0xa6000) ; g }") +print("XIE-FIX armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "fix") diff --git a/harness/mame/xie_fix2.lua b/harness/mame/xie_fix2.lua new file mode 100644 index 0000000..29d1b4c --- /dev/null +++ b/harness/mame/xie_fix2.lua @@ -0,0 +1,12 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; printf \"FORCED b4=0 rp=%08X\n\", d@(0xa6000) ; g }") +dbg:command("bpset 3F3AF950,,{ printf \"CHK_610 val=%08X\n\", d@(a9+0x610) ; g }") +dbg:command("bpset 3F3AF980,,{ printf \"ERR_SRCBASE_NULL\n\" ; g }") +dbg:command("bpset 3F3AF790,,{ printf \"ERR_COMPRESSION\n\" ; g }") +dbg:command("bpset 3F3AFB10,,{ printf \"PAST_610_OK\n\" ; g }") +print("XIE-FIX2 armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "fix2") diff --git a/harness/mame/xie_fix3.lua b/harness/mame/xie_fix3.lua new file mode 100644 index 0000000..70aa26d --- /dev/null +++ b/harness/mame/xie_fix3.lua @@ -0,0 +1,10 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3F3B8E10,,{ printf \"E_TMPUDP path\n\" ; g }") +dbg:command("bpset 3F3B8A60,,{ printf \"DDX_RET a8=%08X\n\", a8 ; g }") +print("XIE-FIX3 armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "fix3") diff --git a/harness/mame/xie_gate_only.lua b/harness/mame/xie_gate_only.lua new file mode 100644 index 0000000..fd501b2 --- /dev/null +++ b/harness/mame/xie_gate_only.lua @@ -0,0 +1,12 @@ +-- minimal probe: only the three addresses needed for the BadMatch gate question +local cpu = manager.machine.devices[":maincpu"] +local dbg = manager.machine.debugger +local frames = 0 +dbg:command("bpset 0x3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 0x3F55D7C0,,{ printf \"E8MAIN\n\" ; g }") +dbg:command("bpset 0x3F55CE20,,{ printf \"CLASS1\n\" ; g }") +print("XIE-GATE-ONLY armed 3 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "gate-only") diff --git a/harness/mame/xie_gateop.lua b/harness/mame/xie_gateop.lua new file mode 100644 index 0000000..31c7a76 --- /dev/null +++ b/harness/mame/xie_gateop.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D560,,{ printf \"STORE src120=%08X\n\", d@(a7+0x120) ; g }") +dbg:command("bpset 3F55D750,,{ printf \"EA a11=%08X star11=%08X argA0=%08X arg40=%08X\n\", a11, d@(a11), d@(a13+0xffa0), d@(a13+0xff40) ; g }") +dbg:command("bpset 3F55D790,,{ printf \"F2 a7=%08X star7=%08X\n\", a7, d@(a7) ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\n\", a8 ; g }") +print("XIE-GATEOP armed 6 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "gateop") diff --git a/harness/mame/xie_handoff.lua b/harness/mame/xie_handoff.lua new file mode 100644 index 0000000..651ac58 --- /dev/null +++ b/harness/mame/xie_handoff.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55B200,,{ printf \"HANDOFF_ENTRY\\n\" ; g }") +dbg:command("bpset 3F55B420,,{ printf \"H_684 a9=%08X\\n\", a9 ; g }") +dbg:command("bpset 3F55B440,,{ printf \"H_688 guard a9=%08X\\n\", a9 ; g }") +dbg:command("bpset 3F55B750,,{ printf \"H_6EA dd_call\\n\" ; g }") +dbg:command("bpset 3F55C260,,{ printf \"H_84C_NOOP\\n\" ; g }") +dbg:command("bpset 3F55C6B0,,{ printf \"H_8D6 clear28\\n\" ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\\n\", a8 ; g }") +print("XIE-HANDOFF armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "handoff") diff --git a/harness/mame/xie_hlp.lua b/harness/mame/xie_hlp.lua new file mode 100644 index 0000000..1e9d702 --- /dev/null +++ b/harness/mame/xie_hlp.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2D9EF0,,{ printf \"R_1EB2a a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA030,,{ printf \"R_1EB2b a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA130,,{ printf \"R_2210a a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA1F0,,{ printf \"R_1F5Eb a8=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2DA220,,{ printf \"R_2210b a8=%08X (block end)\n\", a8 ; g }") +dbg:command("bpset 3F2DA240,,{ printf \"BLK_EXIT_to_1B842\n\" ; g }") +dbg:command("bpset 3F2DC210,,{ printf \"TAIL_1B842 a8=%08X\n\", a8 ; g }") +print("XIE-HLP armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "hlp") diff --git a/harness/mame/xie_import.lua b/harness/mame/xie_import.lua new file mode 100644 index 0000000..4f74ccb --- /dev/null +++ b/harness/mame/xie_import.lua @@ -0,0 +1,10 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\\n\", a7, a11 ; g }") +dbg:command("bpset 3F2D94B0,,{ printf \"RP a11=%08X src_base610=%08X\\n\", a11, d@(a11+0x610) ; g }") +print("XIE-IMPORT armed 3") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "import") diff --git a/harness/mame/xie_min.lua b/harness/mame/xie_min.lua new file mode 100644 index 0000000..b523999 --- /dev/null +++ b/harness/mame/xie_min.lua @@ -0,0 +1,9 @@ +-- minimal probe: ONE breakpoint (ID store), so nothing can be silently dropped. +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +print("XIE-MIN armed 1 breakpoint") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min") diff --git a/harness/mame/xie_min2.lua b/harness/mame/xie_min2.lua new file mode 100644 index 0000000..3f18bbf --- /dev/null +++ b/harness/mame/xie_min2.lua @@ -0,0 +1,10 @@ +-- minimal probe #2: ID store + the 0x6B966 gate CMP. Two breakpoints only. +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +print("XIE-MIN2 armed 2 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min2") diff --git a/harness/mame/xie_min3.lua b/harness/mame/xie_min3.lua new file mode 100644 index 0000000..2315132 --- /dev/null +++ b/harness/mame/xie_min3.lua @@ -0,0 +1,12 @@ +-- minimal probe #3: three breakpoints - ID store, class dispatch, gate CMP +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F55D460,,{ printf \"CLASSDISP a11=%08X cls=%02X\n\", a11, b@(a11+0x20) ; g }") +dbg:command("bpset 0x3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 0x3F55CD70,,{ printf \"LOOKUP_NULL\n\" ; g }") +print("XIE-MIN3 armed 4 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min3") diff --git a/harness/mame/xie_min4.lua b/harness/mame/xie_min4.lua new file mode 100644 index 0000000..23c6ea1 --- /dev/null +++ b/harness/mame/xie_min4.lua @@ -0,0 +1,18 @@ +-- bisect file 0x6BA1E..0x6BAC4 on the arm path (10 breakpoints) +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"A_REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F55D0F0,,{ printf \"B_6BA1E cls2entry arg1=%08X\n\", d@(a13+0xffc0) ; g }") +dbg:command("bpset 0x3F55D120,,{ printf \"C_6BA24 copy_byte40_out\n\" ; g }") +dbg:command("bpset 0x3F55D190,,{ printf \"D_6BA32 byte40_zero_check\n\" ; g }") +dbg:command("bpset 0x3F55D1F0,,{ printf \"E_6BA3E err_0E_byte40\n\" ; g }") +dbg:command("bpset 0x3F55D330,,{ printf \"F_6BA66 err_0E_other\n\" ; g }") +dbg:command("bpset 0x3F55D510,,{ printf \"G_6BAA2 merge\n\" ; g }") +dbg:command("bpset 0x3F55D560,,{ printf \"H_6BAAC store_5a8\n\" ; g }") +dbg:command("bpset 0x3F55D5C0,,{ printf \"I_6BAB8 outcell_test a7=%08X\n\", d@(a13+0xff20) ; g }") +dbg:command("bpset 0x3F55D620,,{ printf \"J_6BAC4 err_0A\n\" ; g }") +print("XIE-MIN4 armed 10 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min4") diff --git a/harness/mame/xie_min5.lua b/harness/mame/xie_min5.lua new file mode 100644 index 0000000..0a24669 --- /dev/null +++ b/harness/mame/xie_min5.lua @@ -0,0 +1,16 @@ +-- resolve the 0x6BAAC..0x6BAB8 contradiction (8 breakpoints) +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"A_IDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F55D560,,{ printf \"H_STORE dst=%08X src=%08X\n\", d@(a13+0xff80), a7 ; g }") +dbg:command("bpset 0x3F55D590,,{ printf \"K_6BAB2 arg6=%08X\n\", d@(a13+0xff20) ; g }") +dbg:command("bpset 0x3F55D5B0,,{ printf \"L_6BAB6 a7=%08X\n\", a7 ; g }") +dbg:command("bpset 0x3F55D5C0,,{ printf \"M_6BAB8 a11=%08X outcell=%08X\n\", a11, d@(a11) ; g }") +dbg:command("bpset 0x3F55D5E0,,{ printf \"N_6BABC_jrlt_taken\n\" ; g }") +dbg:command("bpset 0x3F55D750,,{ printf \"O_6BAEA_okpath\n\" ; g }") +dbg:command("bpset 0x3F55DF10,,{ printf \"P_6BBE2_success\n\" ; g }") +print("XIE-MIN5 armed 8 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min5") diff --git a/harness/mame/xie_min6.lua b/harness/mame/xie_min6.lua new file mode 100644 index 0000000..9dd8fce --- /dev/null +++ b/harness/mame/xie_min6.lua @@ -0,0 +1,14 @@ +-- slot 20 body: the four MOVK 0x8 sites (6 breakpoints) +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"A_IDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F55E690,,{ printf \"S1_6ABD2_movk8\n\" ; g }") +dbg:command("bpset 0x3F55E2E0,,{ printf \"S2_6AC5C_movk8\n\" ; g }") +dbg:command("bpset 0x3F55E4B0,,{ printf \"S3_6AC96_movk8\n\" ; g }") +dbg:command("bpset 0x3F55E6A0,,{ printf \"S4_6ACD4_movk8\n\" ; g }") +dbg:command("bpset 0x3F555EE0,,{ printf \"ERR_EXIT_6AFDC\n\" ; g }") +print("XIE-MIN6 armed 6 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min6") diff --git a/harness/mame/xie_min7.lua b/harness/mame/xie_min7.lua new file mode 100644 index 0000000..5300bb0 --- /dev/null +++ b/harness/mame/xie_min7.lua @@ -0,0 +1,14 @@ +-- baseline + DD dispatcher probe (6 breakpoints) +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"A_IDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F400040,,{ printf \"D_ENTRY_0x40008 a0=%08X a1=%08X\n\", d@(a13+0xffe0), d@(a13+0xffc0) ; g }") +dbg:command("bpset 0x3F400430,,{ printf \"D_CALL_worker\n\" ; g }") +dbg:command("bpset 0x3F55DF10,,{ printf \"LK_SUCCESS_6BBE2\n\" ; g }") +dbg:command("bpset 0x3F555EE0,,{ printf \"S20_ERR_EXIT_6AFDC\n\" ; g }") +dbg:command("bpset 0x3F200000,,{ printf \"\" ; g }") +print("XIE-MIN7 armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min7") diff --git a/harness/mame/xie_min8.lua b/harness/mame/xie_min8.lua new file mode 100644 index 0000000..abd4260 --- /dev/null +++ b/harness/mame/xie_min8.lua @@ -0,0 +1,12 @@ +-- DD dispatcher probe only (4 breakpoints, no junk) +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"A_IDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F55DF10,,{ printf \"B_LK_SUCCESS_6BBE2\n\" ; g }") +dbg:command("bpset 0x3F400040,,{ printf \"C_DD_ENTRY\n\" ; g }") +dbg:command("bpset 0x3F400430,,{ printf \"D_DD_WORKER\n\" ; g }") +print("XIE-MIN8 armed 4 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min8") diff --git a/harness/mame/xie_min9.lua b/harness/mame/xie_min9.lua new file mode 100644 index 0000000..423e642 --- /dev/null +++ b/harness/mame/xie_min9.lua @@ -0,0 +1,16 @@ +-- generated: bit = 0x3F200000 + file*8 +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 0x3F53D820,,{ printf \"IDSTORE\\n\" ; g }") +dbg:command("bpset 0x3F555C10,,{ printf \"JREQ_6AB82\\n\" ; g }") +dbg:command("bpset 0x3F555E90,,{ printf \"E8_1_6ABD2\\n\" ; g }") +dbg:command("bpset 0x3F5561A0,,{ printf \"TGT_6AC34\\n\" ; g }") +dbg:command("bpset 0x3F5562E0,,{ printf \"E8_2_6AC5C\\n\" ; g }") +dbg:command("bpset 0x3F5564B0,,{ printf \"E8_3_6AC96\\n\" ; g }") +dbg:command("bpset 0x3F5566A0,,{ printf \"E8_4_6ACD4\\n\" ; g }") +dbg:command("bpset 0x3F557EE0,,{ printf \"EXIT_6AFDC\\n\" ; g }") +print("XIE-MIN9 armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "min9") diff --git a/harness/mame/xie_outcell.lua b/harness/mame/xie_outcell.lua new file mode 100644 index 0000000..619e74d --- /dev/null +++ b/harness/mame/xie_outcell.lua @@ -0,0 +1,16 @@ +-- out-cell test instrumentation + stack positive control +local frames = 0 +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +local sp = cpu.state["SP"].value +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D510,,{ printf \"T_MERGE\n\" ; g }") +dbg:command("bpset 3F55D5C0,,{ printf \"OUTCEL a11=%08X star=%08X a13f80=%08X a13ffa0=%08X\n\", a11, d@(a11), d@(a13+0xff80), d@(a13+0xffa0) ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"T_GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\n\", a8 ; g }") +dbg:command(string.format("wpset %08X,100,w,1,{ printf \"SCTRL\n\" ; g }", sp - 0x100)) +print("XIE-OUTCEL armed 5 breakpoints + stack control at " .. string.format("%08X", sp-0x100)) +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "outcell") diff --git a/harness/mame/xie_outw.lua b/harness/mame/xie_outw.lua new file mode 100644 index 0000000..03b46ea --- /dev/null +++ b/harness/mame/xie_outw.lua @@ -0,0 +1,19 @@ +-- watch writes to the out-cell (caller frame local 0) + stack control +local frames = 0 +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D5C0,,{ printf \"OUTCEL a11=%08X star=%08X\n\", a11, d@(a11) ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"T_GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\n\", a8 ; g }") +dbg:command("wpset 00415720,8,w,1,{ printf \"OUTWRITE pc=%08X val=%08X\n\", pc, wpdata ; g }") +print("XIE-OUTW armed: 4 breakpoints + out-cell write watch at 00415720") +emu.register_frame_done(function() + frames = frames + 1 + local sp = cpu.state["SP"].value + if frames == 600 then + dbg:command(string.format("wpset %08X,100,w,1,{ printf \"SCTRL\n\" ; g }", sp - 0x100)) + print(string.format("stack control installed at %08X (sp=%08X)", sp - 0x100, sp)) + end + if frames >= 2000000 then machine:exit() end +end, "outw") diff --git a/harness/mame/xie_pc.lua b/harness/mame/xie_pc.lua new file mode 100644 index 0000000..7732561 --- /dev/null +++ b/harness/mame/xie_pc.lua @@ -0,0 +1,12 @@ +local cpu = manager.machine.devices[":maincpu"] +local n = 0 +local last = 0 +print("XIE-PC sampler armed") +emu.register_periodic(function() + n = n + 1 + local pc = cpu.state["PC"].value + if n % 40 == 0 and pc ~= last then + last = pc + print(string.format("PCSAMPLE %08X", pc & 0xFFFFFFFF)) + end +end) diff --git a/harness/mame/xie_pcfix.lua b/harness/mame/xie_pcfix.lua new file mode 100644 index 0000000..961168a --- /dev/null +++ b/harness/mame/xie_pcfix.lua @@ -0,0 +1,14 @@ +local cpu = manager.machine.devices[":maincpu"] +local dbg = manager.machine.debugger +local n = 0 +local last = 0 +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +print("XIE-PCFIX armed (poke + sampler)") +emu.register_periodic(function() + n = n + 1 + local pc = cpu.state["PC"].value + if n % 40 == 0 and pc ~= last then + last = pc + print(string.format("PCSAMPLE %08X", pc & 0xFFFFFFFF)) + end +end) diff --git a/harness/mame/xie_pg.lua b/harness/mame/xie_pg.lua new file mode 100644 index 0000000..85e62b1 --- /dev/null +++ b/harness/mame/xie_pg.lua @@ -0,0 +1,12 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3F3B0210,,{ printf \"REJECT_0x36042 (dstdataptr/img_buff/scalution)\n\" ; g }") +dbg:command("bpset 3F3B17B0,,{ printf \"REJECT_0x362F6\n\" ; g }") +dbg:command("bpset 3F3B1990,,{ printf \"REJECT_0x36332\n\" ; g }") +dbg:command("bpset 3F3B8A60,,{ printf \"DDX_RET a8=%08X\n\", a8 ; g }") +print("XIE-PG armed 5") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "pg") diff --git a/harness/mame/xie_pg2.lua b/harness/mame/xie_pg2.lua new file mode 100644 index 0000000..37482b0 --- /dev/null +++ b/harness/mame/xie_pg2.lua @@ -0,0 +1,22 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3F3B05D0,,{ printf \"r60BA a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B06F0,,{ printf \"r60DE a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B11F0,,{ printf \"r623E a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B12B0,,{ printf \"r6256 a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B1370,,{ printf \"r626E a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B1430,,{ printf \"r6286 a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B21E0,,{ printf \"r643C a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B2300,,{ printf \"r6460 a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B2560,,{ printf \"r64AC a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B2700,,{ printf \"r64E0 a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B5BD0,,{ printf \"r6B7A a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B6610,,{ printf \"r6CC2 a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B6670,,{ printf \"r6CCE a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F3B67A0,,{ printf \"r6CF4 a8=%08X\\n\", a8 ; g }") +print("XIE-PG2 armed 15") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "pg2") diff --git a/harness/mame/xie_r48.lua b/harness/mame/xie_r48.lua new file mode 100644 index 0000000..00d24a0 --- /dev/null +++ b/harness/mame/xie_r48.lua @@ -0,0 +1,12 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2DC420,,{ printf \"J884 rp=%08X b9=%02X (JREQ if 0)\n\", d@(0xa6000), b@(d@(0xa6000)+0x48) ; g }") +dbg:command("bpset 3F2DC440,,{ printf \"CONT_1B888 (flag non-zero)\n\" ; g }") +dbg:command("bpset 3F2DD180,,{ printf \"ERRCHAIN_1BA30 (flag was zero)\n\" ; g }") +dbg:command("bpset 3F2DDE00,,{ printf \"DRIVER_RET a8=%08X\n\", a8 ; g }") +print("XIE_R48 armed 5") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "r48") diff --git a/harness/mame/xie_rd.lua b/harness/mame/xie_rd.lua new file mode 100644 index 0000000..caf44e8 --- /dev/null +++ b/harness/mame/xie_rd.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2D8A90,,{ printf \"RD_ENTRY\n\" ; g }") +dbg:command("bpset 3F2D8BC0,,{ printf \"RD_ENAB flag=%08X\n\", d@(0xa6220) ; g }") +dbg:command("bpset 3F2D8C50,,{ printf \"RD_ALLOC rp=%08X\n\", a8 ; g }") +dbg:command("bpset 3F2D8D20,,{ printf \"RD_BADALLOC\n\" ; g }") +dbg:command("bpset 3F2D91C0,,{ printf \"RD_SRCBASE a5=%08X e28=%08X\n\", a5, d@(a5+0x28) ; g }") +dbg:command("bpset 3F2D94B0,,{ printf \"RP a11=%08X src_base610=%08X\n\", a11, d@(a11+0x610) ; g }") +print("XIE-RD armed 7") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "rd") diff --git a/harness/mame/xie_rd200.lua b/harness/mame/xie_rd200.lua new file mode 100644 index 0000000..3c935f9 --- /dev/null +++ b/harness/mame/xie_rd200.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 05600200,10,r,1,{ printf \"R200 pc=%08X val=%04X\n\", pc, wpdata ; g }") +print("XIE-R200 armed") diff --git a/harness/mame/xie_regs.lua b/harness/mame/xie_regs.lua new file mode 100644 index 0000000..5520396 --- /dev/null +++ b/harness/mame/xie_regs.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F5565F0,,{ printf \"REGS pc=%08X a0=%08X a1=%08X a2=%08X a3=%08X a4=%08X a5=%08X a6=%08X a7=%08X a8=%08X a9=%08X a10=%08X a11=%08X a13=%08X a14=%08X sp=%08X\\n\", pc, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a13, a14, sp ; g }") +dbg:command("bpset 3F5565F0,,{ printf \"L20=%08X LCO=%08X\\n\", d@(a13+0x20), d@(a13+0xc0) ; g }") +dbg:command("bpset 3F556610,,{ printf \"REGS pc=%08X a0=%08X a1=%08X a2=%08X a3=%08X a4=%08X a5=%08X a6=%08X a7=%08X a8=%08X a9=%08X a10=%08X a11=%08X a13=%08X a14=%08X sp=%08X\\n\", pc, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a13, a14, sp ; g }") +dbg:command("bpset 3F5566A0,,{ printf \"ACD4_BAD\\n\" ; g }") +dbg:command("bpset 3F5569A0,,{ printf \"OKPATH\\n\" ; g }") +print("XIE-REGS armed 6") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "regs") diff --git a/harness/mame/xie_resource.lua b/harness/mame/xie_resource.lua new file mode 100644 index 0000000..37eec69 --- /dev/null +++ b/harness/mame/xie_resource.lua @@ -0,0 +1,178 @@ +-- xie_resource.lua -- trace XIE requests and dump the created resource. +-- +-- Breakpoint 1: inside XieProc after A9 = client->requestBuffer. +-- Breakpoint 2: 0x6CAC8, just after the create helper has A9 = new resource. +-- +-- Run with -debuglog (printf output is discarded otherwise): +-- VT1200_SKIP_LEVEL1=1 XIE_FRAMES=2000000 \ +-- /home/arti/code/k-space/mame0289/vt1200 vt1200 ... -debug -debugger none \ +-- -debuglog -autoboot_script harness/mame/xie_resource.lua + +local function hex(v, w) return string.format("%0" .. (w or 8) .. "X", v) end +local machine = manager.machine +local cpu = machine.devices[':maincpu'] +local dbg = machine.debugger +if not dbg then print("XIE ERROR: no debugger"); machine:exit(); return end + +local FRAMES = tonumber(os.getenv("XIE_FRAMES") or "2000000") +local WPFILE = "/tmp/opencode/xie_wp.txt" +local lastwp = "" +local last_elem = 0 +local WORDS = tonumber(os.getenv("XIE_WORDS") or "16") +local TRACE = 0x3F525D40 -- XieProc interior, a9 = request buffer +local CREATE = 0x3F565640 -- 0x6CAC8: a9 = new resource pointer + +local args = {} +for i = 0, WORDS - 1 do args[#args + 1] = string.format("w@(a9+%d)", i * 16) end +local fmt = "XIEHIT buf=%08X" +for i = 0, WORDS - 1 do fmt = fmt .. " %04X" end +fmt = fmt .. "\\n" +dbg:command("bpset " .. hex(TRACE) .. ",,{ printf \"" .. fmt .. "\", a9, " .. + table.concat(args, ", ") .. " ; g }") + +dbg:command("bpset " .. hex(CREATE) .. + ",,{ printf \"RES a9=%08X id=%08X class=%02X b8=%02X b36=%02X b40=%08X b44=%08X\\n\", " .. + "a9, d@(a9), b@(a9+32), b@(a9+64), b@(a9+288), d@(a9+320), d@(a9+352) ; g }") + + +local LOOK = 0x3F55D1C0 -- 0x6BA38: a7 = resource +local bytes = {} +for k = 0, 15 do bytes[#bytes+1] = string.format("b@(a7+%d)", k*32) end +local bfmt = string.rep(" %02X", 16) +dbg:command("bpset " .. hex(LOOK) .. + ",,{ printf \"LOOK a7=%08X id=%08X cls=%02X b36=%02X b40=%08X" .. bfmt .. "\\n\", " .. + "a7, d@(a7), b@(a7+32), b@(a7+288), d@(a7+320), " .. table.concat(bytes, ", ") .. " ; g }") + +-- Debug-only nudge: when a class-2 resource reaches the lookup, make it class 3 +-- so PUT_TILE's hard-coded class check passes. Proves the rest of the pixel path. +-- Debug-only: skip the class-compare failure branch (0x6BAF6 -> 0x6BBCE). + + +local BAND = 0x3F555C40 -- 0x6AB88: a11 = band record, a9 = slot20 request +dbg:command("bpset " .. hex(BAND) .. + ",,{ printf \"BAND a11=%08X f1=%02X f2=%02X f4=%08X f8=%08X f12=%08X f16=%08X\\n\", " .. + "a11, b@(a11+8), b@(a11+16), d@(a11+32), d@(a11+64), d@(a11+96), d@(a11+128) ; g }") + + +dbg:command("bpset 0x3F400430,,{ printf \"DDCALL a11=%08X type=%02X idx=%08X\\n\", a11, b@(a13+0xffa0), d@(a13+0x20) ; g }") + + +dbg:command("bpset 0x3F400040,,{ printf \"DE entry a0=%08X a1=%08X type=%02X idx=%08X\\n\", d@(a13+0xffe0), d@(a13+0xffc0), b@(a13+0xffa0), d@(a13+0x20) ; g }") +dbg:command("bpset 0x3F4000F0,,{ printf \"DE chk1 ret=%08X\\n\", a8 ; g }") +dbg:command("bpset 0x3F400210,,{ printf \"DE chk2 ret=%08X\\n\", a8 ; g }") + + +dbg:command("bpset 0x3F55B440,,{ printf \"HANDOFF a9=%08X\\n\", a9 ; g }") +dbg:command("bpset 0x3F55B750,,{ printf \"DEARG a9=%08X a11=%08X\\n\", a9, a11 ; g }") + + +dbg:command("bpset 0x3F553B70,,{ printf \"S19ENTRY\\n\" ; g }") +dbg:command("bpset 0x3F55B440,,{ printf \"H688 a9=%08X\\n\", a9 ; g }") +dbg:command("bpset 0x3F400040,,{ printf \"DEENTRY\\n\" ; g }") + + +dbg:command("bpset 0x3F553DA0,,{ printf \"S19LOOK a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 0x3F554D10,,{ printf \"S19HANDOFF\\n\" ; g }") + + +dbg:command("bpset 0x3F52DE80,,{ printf \"S43OBJ a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 0x3F52E230,,{ printf \"S43ID a5=%08X req8=%08X\\n\", a5, d@(a9+0x40) ; g }") + + +dbg:command("bpset 0x3F566070,,{ printf \"RESPTR a7=%08X a9=%08X\\n\", a7, a9 ; g }") + + +dbg:command("bpset 0x3F2D8A90,,{ printf \"EXPORTENTRY\\n\" ; g }") +dbg:command("bpset 0x3F2D8BC0,,{ printf \"EXPORTFLAG f=%02X\\n\", b@(0xA6220) ; g }") +dbg:command("bpset 0x3F2DC0D0,,{ printf \"EXPORTSKIPPED\\n\" ; g }") + +dbg:command("bpset 0x3F2DF610,,{ printf \"ELTYPE i=%d t=%02X\n\", d@(a13+0x180), b@(a9+0x58) ; g }") +dbg:command("bpset 0x3F2DF530,,{ printf \"BADFUNC i=%d\n\", d@(a13+0x180) ; g }") +dbg:command("bpset 0x3F2DF400,,{ printf \"PIPE_T1\n\" ; g }") +dbg:command("bpset 0x3F2DEA80,,{ printf \"PIPE_T2\n\" ; g }") +dbg:command("bpset 0x3F2DE990,,{ printf \"PIPE_T3\n\" ; g }") +dbg:command("bpset 0x3F2DE3A0,,{ printf \"PIPE_T4\n\" ; g }") +dbg:command("bpset 0x3F2DF850,,{ printf \"PIPE_LOOPEND i=%d\n\", d@(a13+0x180) ; g }") + +dbg:command("bpset 0x3F2D91A0,,{ printf \"EX_BAND a5=%08X elem@d8=%08X\n\", a5, d@(a5+0xd8) ; g }") +dbg:command("bpset 0x3F2D91C0,,{ printf \"EX_ELEM a5=%08X f28=%08X\n\", a5, d@(a5+0x28) ; g }") +dbg:command("bpset 0x3F2DD410,,{ printf \"EX_TIMING\n\" ; g }") + +dbg:command("bpset 0x3F55D950,,{ printf \"PUTCHK n=%d obj=%08X b8=%02X b12=%02X\n\", d@(a13+0xff20), a11, b@(a11+0x40), b@(a11+0x60) ; g }") +dbg:command("bpset 0x3F55DA50,,{ printf \"PUT_BADMATCH_byte12 n=%d\n\", d@(a13+0xff20) ; g }") +dbg:command("bpset 0x3F55DF10,,{ printf \"PUT_OK_byte8 n=%d\n\", d@(a13+0xff20) ; g }") + +dbg:command("bpset 0x3F2D91A0,,{ printf \"BANDFIELDS 48=%08X 80=%08X a0=%08X 160=%08X d8=%08X\n\", d@(a5+0x48), d@(a5+0x80), d@(a5+0xa0), d@(a5+0x160), d@(a5+0xd8) ; g }") +dbg:command("bpset 0x3F2D94B0,,{ printf \"RP 5a8=%08X 5d0=%08X 5f0=%08X 610=%08X 6f8=%08X 718=%08X 738=%08X 758=%08X\n\", d@(a11+0x5a8), d@(a11+0x5d0), d@(a11+0x5f0), d@(a11+0x610), d@(a11+0x6f8), d@(a11+0x718), d@(a11+0x738), d@(a11+0x758) ; g }") + +dbg:command("bpset 0x3F54BFF0,,{ printf \"TRAMP minor=%02X target=%08X req=%08X\n\", b@(a10+0x8), d@(a11), a10 ; g }") +dbg:command("bpset 0x3F54C000,,{ printf \"TRAMPCALL target=%08X\n\", a11 ; g }") + +dbg:command("bpset 0x3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 0x3F53D9A0,,{ printf \"REGISTER id=%08X\n\", d@(a9+0x40) ; g }") + +-- empirical argument/return map of the slot-19 lookup helper (file 0x66FA0) +dbg:command("bpset 0x3F537DA0,,{ printf \"LKARGS a0=%08X a1=%08X a2=%08X a3=%08X a4=%08X\n\", d@(a13+0xffe0), d@(a13+0xffc0), d@(a13+0xffa0), d@(a13+0xff80), d@(a13+0xff60) ; g }") +dbg:command("bpset 0x3F537E70,,{ printf \"LKCALLED a8=%08X\n\", a8 ; g }") +dbg:command("bpset 0x3F537E90,,{ printf \"LKDISPATCH a8=%08X\n\", a8 ; g }") + +dbg:command("bpset 0x3F55D630,,{ printf \"ERR_0A_badaccess\n\" ; g }") +dbg:command("bpset 0x3F55DA60,,{ printf \"ERR_08_badmatch\n\" ; g }") +dbg:command("bpset 0x3F55CD70,,{ printf \"ERR_0E_lookup0\n\" ; g }") +dbg:command("bpset 0x3F55D2C0,,{ printf \"ERR_0E_byte40_nonzero\n\" ; g }") +dbg:command("bpset 0x3F55D400,,{ printf \"ERR_0E_other\n\" ; g }") +dbg:command("bpset 0x3F55D530,,{ printf \"ERR_0E_other2\n\" ; g }") + +dbg:command("bpset 0x3F2FD2F0,,{ printf \"EB -10=%08X -0c=%08X -8=%08X -4=%08X sp=%08X +4=%08X +8=%08X +c=%08X\n\", d@(sp-0x10), d@(sp-0xc), d@(sp-8), d@(sp-4), d@(sp), d@(sp+4), d@(sp+8), d@(sp+0xc) ; g }") + +dbg:command("bpset 0x3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X obj=%08X objb0=%02X\n\", a7, a11, d@(a13+0xffa0), b@(d@(a13+0xffa0)) ; g }") + +dbg:command("bpset 0x3F55D460,,{ printf \"OBJDISP a11=%08X b0=%02X b4=%02X b8=%02X b12=%02X b16=%02X\n\", a11, b@(a11), b@(a11+0x20), b@(a11+0x40), b@(a11+0x60), b@(a11+0x80) ; g }") +dbg:command("bpset 0x3F55D7B0,,{ printf \"GATEPASS\n\" ; g }") + +dbg:command("bpset 0x3F55DA50,,{ printf \"E8_select12\n\" ; g }") +dbg:command("bpset 0x3F55DC30,,{ printf \"E8_maskcheck\n\" ; g }") +dbg:command("bpset 0x3F55D7A0,,{ printf \"GATE2 a7=%08X a11=%08X\n\", a7, a11 ; g }") + +dbg:command("bpset 0x3F55D7C0,,{ printf \"E8_MAIN_0BAF8\n\" ; g }") +dbg:command("bpset 0x3F55CE20,,{ printf \"CLASS1_PATH\n\" ; g }") +dbg:command("bpset 0x3F55D440,,{ printf \"SELECTOR_DISPATCH\n\" ; g }") +local frames = 0 +emu.register_frame_done(function() + frames = frames + 1 + if frames % 1000 == 0 then + print(string.format("XIE: frame %d pc=%s", frames, hex(cpu.state['PC'].value))) + end + local f = io.open(WPFILE, "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local r = tonumber(txt) + if r then + local sp = cpu.spaces['program'] + local band = sp:read_u32(r + 36*8) + local p44 = sp:read_u32(r + 44*8) + local b30 = sp:read_u32(band + 48*8) + local elem = 0 + if p44 ~= 0 then elem = sp:read_u32(p44 + 0xd8) end + if elem ~= 0 and elem ~= last_elem then + last_elem = elem + dbg:command(string.format("wpset %08X,32,w,1,{ printf \"WPELEM addr=%08X data=%08X\\n\", wpaddr, wpdata ; g }", elem + 0x28)) + print(string.format("XIE: elem=%08X wpset elem+0x28", elem)) + end + print(string.format("XIE: watch res=%08X band=%08X p44=%08X b30=%08X", r, band, p44, b30)) + local function wp(a, label) + if a and a ~= 0 then + dbg:command(string.format("wpset %08X,64,w,1,{ printf \"WPHIT %s addr=%%08X data=%%08X\\n\", wpaddr, wpdata ; g }", a, label)) + end + end + wp(r, "res"); wp(band, "band"); wp(p44, "p44"); wp(b30, "b30") + end + end + end + if frames >= FRAMES then machine:exit() end +end, "vt1200-xie-resource") + +dbg.visible_cpu = cpu +dbg.execution_state = 'run' \ No newline at end of file diff --git a/harness/mame/xie_rp20.lua b/harness/mame/xie_rp20.lua new file mode 100644 index 0000000..59640f7 --- /dev/null +++ b/harness/mame/xie_rp20.lua @@ -0,0 +1,12 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F3CFAC0,,{ printf \"RP20 rp=%08X byte4=%02X -> forcing 1\n\", d@(0xa6000), b@(d@(0xa6000)+0x20) ; w@(d@(0xa6000)+0x20)=1 ; g }") +dbg:command("bpset 3F3CFAF0,,{ printf \"RP20_STILL_ZERO\n\" ; g }") +dbg:command("bpset 3F3CFB20,,{ printf \"RP20_OK_CONTINUE\n\" ; g }") +dbg:command("bpset 3F2DC290,,{ printf \"AFTER_FINALIZE a8=%08X\n\", a8 ; g }") +print("XIE-RP20 armed 5") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "rp20") diff --git a/harness/mame/xie_s19.lua b/harness/mame/xie_s19.lua new file mode 100644 index 0000000..4a01322 --- /dev/null +++ b/harness/mame/xie_s19.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F553D70,,{ printf \"S19CALL\\n\" ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F55CB30,,{ printf \"CALLEE_ENTRY\\n\" ; g }") +dbg:command("bpset 3F55D0F0,,{ printf \"CALLEE_C2\\n\" ; g }") +dbg:command("bpset 3F55D460,,{ printf \"CALLEE_DISP cls=%%02X\\n\", b@(a11+0x20) ; g }") +dbg:command("bpset 3F55CCE0,,{ printf \"CALLEE_NULL_0E\\n\" ; g }") +print("XIE-S19 armed 7") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s19") diff --git a/harness/mame/xie_s19b.lua b/harness/mame/xie_s19b.lua new file mode 100644 index 0000000..a18e729 --- /dev/null +++ b/harness/mame/xie_s19b.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55DE70,,{ printf \"SEL_DISP fmt=%%02X\\n\", b@(a13+0xff40) ; g }") +dbg:command("bpset 3F55DA50,,{ printf \"MASK_A_8\\n\" ; g }") +dbg:command("bpset 3F55DC30,,{ printf \"MASK_B_8\\n\" ; g }") +dbg:command("bpset 3F55D620,,{ printf \"ERR_0A\\n\" ; g }") +dbg:command("bpset 3F55DF10,,{ printf \"OK_PATH\\n\" ; g }") +print("XIE-S19B armed 6") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s19b") diff --git a/harness/mame/xie_s19p.lua b/harness/mame/xie_s19p.lua new file mode 100644 index 0000000..eae5b98 --- /dev/null +++ b/harness/mame/xie_s19p.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F553DF0,,{ printf \"S19_7BE\\n\" ; g }") +dbg:command("bpset 3F554280,,{ printf \"S19_850\\n\" ; g }") +dbg:command("bpset 3F554D10,,{ printf \"S19_9A2_handoff_call\\n\" ; g }") +dbg:command("bpset 3F555210,,{ printf \"S19_A42\\n\" ; g }") +dbg:command("bpset 3F555250,,{ printf \"S19_ERR_EXIT\\n\" ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\\n\", a8 ; g }") +print("XIE-S19P armed 7") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s19p") diff --git a/harness/mame/xie_s19q.lua b/harness/mame/xie_s19q.lua new file mode 100644 index 0000000..dca0bf2 --- /dev/null +++ b/harness/mame/xie_s19q.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F554250,,{ printf \"S19_C0 c0=%%08X c0s=%%d\\n\", d@(a13+0xc0), d@(a13+0xc0) ; g }") +dbg:command("bpset 3F554290,,{ printf \"S19_852 a7=%%08X a5=%%08X\\n\", a7, a5 ; g }") +dbg:command("bpset 3F5543E0,,{ printf \"S19_87C_mainpath\\n\" ; g }") +dbg:command("bpset 3F554D10,,{ printf \"S19_9A2_HANDOFF\\n\" ; g }") +dbg:command("bpset 3F555250,,{ printf \"S19_EXIT a8=%%08X\\n\", a8 ; g }") +print("XIE-S19Q armed 6") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s19q") diff --git a/harness/mame/xie_s19r.lua b/harness/mame/xie_s19r.lua new file mode 100644 index 0000000..973b9f4 --- /dev/null +++ b/harness/mame/xie_s19r.lua @@ -0,0 +1,17 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\\n\", a7, a11 ; g }") +dbg:command("bpset 3F554460,,{ printf \"S88C word5=%08X\\n\", d@(a9+0xc0) ; g }") +dbg:command("bpset 3F5544B0,,{ printf \"S896\\n\" ; g }") +dbg:command("bpset 3F5544D0,,{ printf \"S89A bit0test\\n\" ; g }") +dbg:command("bpset 3F554520,,{ printf \"S8A4_importloop\\n\" ; g }") +dbg:command("bpset 3F554D10,,{ printf \"S9A2_HANDOFF_CALL\\n\" ; g }") +dbg:command("bpset 3F555140,,{ printf \"SAA28_skip_exit\\n\" ; g }") +dbg:command("bpset 3F555080,,{ printf \"SAA10_other\\n\" ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\\n\", a8 ; g }") +print("XIE-S19R armed 10") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s19r") diff --git a/harness/mame/xie_s19x.lua b/harness/mame/xie_s19x.lua new file mode 100644 index 0000000..b80771d --- /dev/null +++ b/harness/mame/xie_s19x.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F5544B0,,{ printf \"S896 plane_mask=%08X\n\", d@(a9+0xc0) ; g }") +dbg:command("bpset 3F554500,,{ printf \"S8A0 bit0test\n\" ; g }") +dbg:command("bpset 3F554520,,{ printf \"S8A4_import_loop\n\" ; g }") +dbg:command("bpset 3F554C70,,{ printf \"S98E_ELEM28_STORE val=%08X\n\", d@(a13+0x120) ; g }") +dbg:command("bpset 3F554D10,,{ printf \"S9A2_handoff_call\n\" ; g }") +dbg:command("bpset 3F555140,,{ printf \"SAA28_skip_exit\n\" ; g }") +dbg:command("bpset 3F55B200,,{ printf \"H_ENTRY\n\" ; g }") +print("XIE-S19X armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s19x") diff --git a/harness/mame/xie_s43.lua b/harness/mame/xie_s43.lua new file mode 100644 index 0000000..756991c --- /dev/null +++ b/harness/mame/xie_s43.lua @@ -0,0 +1,13 @@ +-- log slot-43 double comparison operands (generated addresses) +local frames = 0 +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +local cmp1 = 0x3F200000 + 0x658B8*8 +local cmp2 = 0x3F200000 + 0x656B0*8 +dbg:command(string.format("bpset %08X,,{ printf \"CMP900 a0=%%08X a1=%%08X\n\", d@(a13+0x0), d@(a13+0x20) ; g }", cmp1)) +dbg:command(string.format("bpset %08X,,{ printf \"CMP740 a0=%%08X a1=%%08X\n\", d@(a13+0x0), d@(a13+0x20) ; g }", cmp2)) +print("XIE-S43 armed 2 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s43") diff --git a/harness/mame/xie_s43b.lua b/harness/mame/xie_s43b.lua new file mode 100644 index 0000000..33405f3 --- /dev/null +++ b/harness/mame/xie_s43b.lua @@ -0,0 +1,12 @@ +-- slot 43: log the lookup return and the two id words +local frames = 0 +local dbg = manager.machine.debugger +local after = 0x3F200000 + 0x65646*8 +local idstore = 0x3F200000 + 0x67B04*8 +dbg:command(string.format("bpset %08X,,{ printf \"S43AFTERLOOKUP a8=%%08X w0=%%08X w1=%%08X\n\", a8, d@(a9+0x20), d@(a9+0x40) ; g }", after)) +dbg:command(string.format("bpset %08X,,{ printf \"IDSTORE id=%%08X obj=%%08X\n\", d@(a9+0x40), a11 ; g }", idstore)) +print("XIE-S43B armed 2 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s43b") diff --git a/harness/mame/xie_s43c.lua b/harness/mame/xie_s43c.lua new file mode 100644 index 0000000..afac31d --- /dev/null +++ b/harness/mame/xie_s43c.lua @@ -0,0 +1,20 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command(string.format("bpset 3F52B230,,{ printf \"LOOKUP_OK\\n\" ; g }")) +dbg:command(string.format("bpset 3F52B530,,{ printf \"P_A\\n\" ; g }")) +dbg:command(string.format("bpset 3F52B700,,{ printf \"P_B\\n\" ; g }")) +dbg:command(string.format("bpset 3F52BB50,,{ printf \"P_C\\n\" ; g }")) +dbg:command(string.format("bpset 3F52BDC0,,{ printf \"P_D\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C1C0,,{ printf \"P_E\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C280,,{ printf \"P_F\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C3D0,,{ printf \"P_G\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C4A0,,{ printf \"P_H\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C600,,{ printf \"BAD_1\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C650,,{ printf \"OK_1\\n\" ; g }")) +dbg:command(string.format("bpset 3F52CC60,,{ printf \"BAD_2\\n\" ; g }")) +dbg:command(string.format("bpset 3F52CC50,,{ printf \"P_I\\n\" ; g }")) +print("XIE-S43C armed 13") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s43c") diff --git a/harness/mame/xie_s43d.lua b/harness/mame/xie_s43d.lua new file mode 100644 index 0000000..ee98b88 --- /dev/null +++ b/harness/mame/xie_s43d.lua @@ -0,0 +1,16 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command(string.format("bpset 3F52B230,,{ printf \"S43_LOOKUP\\n\" ; g }")) +dbg:command(string.format("bpset 3F52D1D0,,{ printf \"S43_TAIL_A\\n\" ; g }")) +dbg:command(string.format("bpset 3F52DBC0,,{ printf \"S43_TAIL_B\\n\" ; g }")) +dbg:command(string.format("bpset 3F52DE80,,{ printf \"S43_SET3\\n\" ; g }")) +dbg:command(string.format("bpset 3F52DE90,,{ printf \"S43_STORE3\\n\" ; g }")) +dbg:command(string.format("bpset 3F52DFC0,,{ printf \"S43_RENDER\\n\" ; g }")) +dbg:command(string.format("bpset 3F52E4F0,,{ printf \"S43_EXIT0\\n\" ; g }")) +dbg:command(string.format("bpset 3F52C600,,{ printf \"S43_BAD1\\n\" ; g }")) +dbg:command(string.format("bpset 3F52CC60,,{ printf \"S43_BAD2\\n\" ; g }")) +print("XIE-S43D armed 9") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s43d") diff --git a/harness/mame/xie_s43e.lua b/harness/mame/xie_s43e.lua new file mode 100644 index 0000000..6a37629 --- /dev/null +++ b/harness/mame/xie_s43e.lua @@ -0,0 +1,16 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F52DFF0,,{ printf \"T_RENDER_RET a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F52E010,,{ printf \"T_JREQ\\n\" ; g }") +dbg:command("bpset 3F52E030,,{ printf \"T_FREE\\n\" ; g }") +dbg:command("bpset 3F52E230,,{ printf \"T_MERGE\\n\" ; g }") +dbg:command("bpset 3F52E3D0,,{ printf \"T_PREC88\\n\" ; g }") +dbg:command("bpset 3F52E470,,{ printf \"T_RET88 a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F52E490,,{ printf \"T_PREC98\\n\" ; g }") +dbg:command("bpset 3F52E4F0,,{ printf \"T_EXIT0\\n\" ; g }") +dbg:command("bpset 3F52B230,,{ printf \"T_LOOKUP_OK\\n\" ; g }") +print("XIE-S43E armed 9") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s43e") diff --git a/harness/mame/xie_s44.lua b/harness/mame/xie_s44.lua new file mode 100644 index 0000000..a0caea0 --- /dev/null +++ b/harness/mame/xie_s44.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F52DFD0,,{ printf \"S44_RENDER_CALL\\n\" ; g }") +dbg:command("bpset 3F2D95C0,,{ printf \"TYPE1\\n\" ; g }") +dbg:command("bpset 3F2D9B10,,{ printf \"TYPE2\\n\" ; g }") +dbg:command("bpset 3F2D9C50,,{ printf \"TYPE3\\n\" ; g }") +dbg:command("bpset 3F2DA0D0,,{ printf \"TYPE4\\n\" ; g }") +dbg:command("bpset 3F2DBB10,,{ printf \"TYPE5\\n\" ; g }") +print("XIE-S44 armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s44") diff --git a/harness/mame/xie_s44b.lua b/harness/mame/xie_s44b.lua new file mode 100644 index 0000000..a4d92bf --- /dev/null +++ b/harness/mame/xie_s44b.lua @@ -0,0 +1,14 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F52FAA0,,{ printf \"S44_RENDER\\n\" ; g }") +dbg:command("bpset 3F2D95C0,,{ printf \"TYPE1\\n\" ; g }") +dbg:command("bpset 3F2D9B10,,{ printf \"TYPE2\\n\" ; g }") +dbg:command("bpset 3F2DA350,,{ printf \"TYPE3\\n\" ; g }") +dbg:command("bpset 3F2DA7A0,,{ printf \"TYPE4\\n\" ; g }") +dbg:command("bpset 3F2DAC10,,{ printf \"TYPE5\\n\" ; g }") +print("XIE-S44B armed 7") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s44b") diff --git a/harness/mame/xie_s44c.lua b/harness/mame/xie_s44c.lua new file mode 100644 index 0000000..f7a7c7b --- /dev/null +++ b/harness/mame/xie_s44c.lua @@ -0,0 +1,11 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F52EDB0,,{ printf \"S44_CREATE_RET a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F52EF30,,{ printf \"S44_ERRPATH\\n\" ; g }") +dbg:command("bpset 3F2D9B10,,{ printf \"TYPE2\\n\" ; g }") +print("XIE-S44C armed 4") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "s44c") diff --git a/harness/mame/xie_scl.lua b/harness/mame/xie_scl.lua new file mode 100644 index 0000000..9b19505 --- /dev/null +++ b/harness/mame/xie_scl.lua @@ -0,0 +1,11 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3FB172A0,,{ printf \"POLL status=%04X\n\", d@(0x5600010) ; g }") +dbg:command("bpset 3FB173D0,,{ printf \"SCALUTION_TIMEOUT\n\" ; g }") +dbg:command("bpset 3FB17470,,{ printf \"SCALUTION_READY -> continue\n\" ; g }") +print("XIE-SCL armed 4") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "scl") diff --git a/harness/mame/xie_scl2.lua b/harness/mame/xie_scl2.lua new file mode 100644 index 0000000..a79b757 --- /dev/null +++ b/harness/mame/xie_scl2.lua @@ -0,0 +1,11 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3FB172D0,,{ printf \"CPU_READ a9=%04X (bit1=%d)\n\", a9, (a9>>1)&1 ; g }") +dbg:command("bpset 3FB173D0,,{ printf \"TIMEOUT\n\" ; g }") +dbg:command("bpset 3FB17470,,{ printf \"READY\n\" ; g }") +print("XIE-SCL2 armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "scl2") diff --git a/harness/mame/xie_sel.lua b/harness/mame/xie_sel.lua new file mode 100644 index 0000000..8fb1a5b --- /dev/null +++ b/harness/mame/xie_sel.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\\n\", a7, a11 ; g }") +dbg:command("bpset 3F55DE70,,{ printf \"SELD selector=%08X\\n\", d@(a13+0xff40) ; g }") +dbg:command("bpset 3F55D980,,{ printf \"SELA_CMP a7=%08X a11=%08X\\n\", a7, a11 ; g }") +dbg:command("bpset 3F55DA50,,{ printf \"SELA_BAD8\\n\" ; g }") +dbg:command("bpset 3F55DC10,,{ printf \"SELB_CMP a7=%08X a11=%08X\\n\", a7, a11 ; g }") +dbg:command("bpset 3F55DC30,,{ printf \"SELB_BAD8\\n\" ; g }") +dbg:command("bpset 3F55DF10,,{ printf \"OK_6BBE2\\n\" ; g }") +print("XIE-SEL armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "sel") diff --git a/harness/mame/xie_src.lua b/harness/mame/xie_src.lua new file mode 100644 index 0000000..9627b29 --- /dev/null +++ b/harness/mame/xie_src.lua @@ -0,0 +1,10 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F2D91C0,,{ printf \"SRCBASE_ST a5=%08X elem28=%08X rp=%08X\n\", a5, d@(a5+0x28), a11 ; g }") +dbg:command("bpset 3F2D94B0,,{ printf \"RP a11=%08X src_base610=%08X\n\", a11, d@(a11+0x610) ; g }") +print("XIE-SRC armed 3") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "src") diff --git a/harness/mame/xie_st.lua b/harness/mame/xie_st.lua new file mode 100644 index 0000000..fdae8d7 --- /dev/null +++ b/harness/mame/xie_st.lua @@ -0,0 +1,9 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3FB2A950,,{ printf \"ST b1=%08X mem=%04X\n\", b1, d@(b1) ; g }") +print("XIE-ST armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "st") diff --git a/harness/mame/xie_stage.lua b/harness/mame/xie_stage.lua new file mode 100644 index 0000000..a13546f --- /dev/null +++ b/harness/mame/xie_stage.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 004FE780,200,w,1,{ printf \"STG %08X %04X\n\", wpaddr, wpdata ; g }") +print("XIE-STG armed (0x4FE780..0x4FE97F)") diff --git a/harness/mame/xie_stg2.lua b/harness/mame/xie_stg2.lua new file mode 100644 index 0000000..5b40e1d --- /dev/null +++ b/harness/mame/xie_stg2.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 004FE780,400,w,1,{ printf \"SW %08X %04X %08X\n\", wpaddr, wpdata, pc ; g }") +print("XIE-STG2 armed") diff --git a/harness/mame/xie_stg3.lua b/harness/mame/xie_stg3.lua new file mode 100644 index 0000000..8a294ae --- /dev/null +++ b/harness/mame/xie_stg3.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 004FE780,1000,w,1,{ printf \"SW %08X %04X %08X\n\", wpaddr, wpdata, pc ; g }") +print("XIE-STG3 armed (0x4FE780..0x4FE97F, 512 bytes)") diff --git a/harness/mame/xie_stgr.lua b/harness/mame/xie_stgr.lua new file mode 100644 index 0000000..0515672 --- /dev/null +++ b/harness/mame/xie_stgr.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 004FE780,200,r,1,{ printf \"SR %08X pc=%08X\n\", wpaddr, pc ; g }") +print("XIE-STGR armed (reads of the staging buffer)") diff --git a/harness/mame/xie_stgrw.lua b/harness/mame/xie_stgrw.lua new file mode 100644 index 0000000..74ea508 --- /dev/null +++ b/harness/mame/xie_stgrw.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 004FE780,800,rw,1,{ printf \"S%c %08X %04X %08X\n\", (wpaddr>0 and 0 or 0), wpaddr, wpdata, pc ; g }") +print("XIE-STGRW armed") diff --git a/harness/mame/xie_store.lua b/harness/mame/xie_store.lua new file mode 100644 index 0000000..3232fc6 --- /dev/null +++ b/harness/mame/xie_store.lua @@ -0,0 +1,11 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55D560,,{ printf \"STORE a7=%08X src120=%08X a11=%08X dst120=%08X argA0=%08X arg80=%08X\n\", a7, d@(a7+0x120), a11, d@(a11+0x120), d@(a13+0xffa0), d@(a13+0xff80) ; g }") +dbg:command("bpset 3F55D5C0,,{ printf \"OUTCEL a11=%08X star=%08X\n\", a11, d@(a11) ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"S19RET a8=%08X\n\", a8 ; g }") +print("XIE-STORE armed 4 breakpoints") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "store") diff --git a/harness/mame/xie_trace.lua b/harness/mame/xie_trace.lua new file mode 100644 index 0000000..1de35a6 --- /dev/null +++ b/harness/mame/xie_trace.lua @@ -0,0 +1,80 @@ +-- xie_trace.lua -- capture XIE 2.3 request buffers as they reach the server. +-- +-- The breakpoint sits INSIDE XieProc, immediately after it loads +-- A9 = client->requestBuffer (0x64BA2) and before it reads stuff->opcode, +-- i.e. at Ghidra 0x64BA8 = bit 0x3F525D40. At that point A9 is the request +-- buffer pointer, so the whole request can be read with w@ (16-bit words, which +-- is the CPU's native access width on this bit-addressed space). +-- +-- M=/home/arti/code/k-space/mame0289/vt1200 +-- XIE_FRAMES=1500 $M vt1200 -rompath harness/mame/roms -video none -sound none \ +-- -nothrottle -debug -debugger none \ +-- -autoboot_script harness/mame/xie_trace.lua -autoboot_delay 0 +-- +-- Env: +-- XIE_FRAMES frame budget (default 1500) +-- XIE_WORDS request words dumped per hit (default 8 = 16 bytes) +-- XIE_JIT if set, jump to this bit address at XIE_AT (debugger entry) +-- XIE_AT frame at which XIE_JIT is taken (default 400) + +local function hex(v, w) return string.format("%0" .. (w or 8) .. "X", v) end + +local machine = manager.machine +local cpu = machine.devices[':maincpu'] +local dbg = machine.debugger + +if not dbg then + print("XIE ERROR: debugger not enabled; pass -debug") + machine:exit() + return +end + +local FRAMES = tonumber(os.getenv("XIE_FRAMES") or "1500") +local WORDS = tonumber(os.getenv("XIE_WORDS") or "8") +local JIT = os.getenv("XIE_JIT") +local AT = tonumber(os.getenv("XIE_AT") or "400") +local IDLE = 0x3FDCE400 -- level-0 diagnostics menu idle loop + +-- XieProc interior: A9 = request buffer. XIE_TRACE overrides it, which is only +-- useful as a control: point it at a hot PC (e.g. the menu idle 3FDCE400) and +-- confirm the breakpoint+printf machinery actually fires. +local TRACE = tonumber(os.getenv("XIE_TRACE") or "0x3F525D40") +-- XieProc entry (count only) +local ENTRY = 0x3F525CC0 + +local action +if WORDS == 0 then + -- control mode: prove the breakpoint fires at all + action = '{ printf "XIEHIT pc=%08X\\n", pc ; g }' +else + local args = {} + for i = 0, WORDS - 1 do + args[#args + 1] = string.format("w@(a9+%d)", i * 16) + end + local fmt = "XIEHIT buf=%08X" + for i = 0, WORDS - 1 do fmt = fmt .. " %04X" end + fmt = fmt .. "\\n" + action = string.format('{ printf "%s", a9, %s ; g }', fmt, table.concat(args, ", ")) +end +dbg:command("bpset " .. hex(TRACE) .. ",," .. action) +print("XIE: breakpoint at " .. hex(TRACE) .. " -> " .. action) + +if JIT then + dbg:command("bpset " .. hex(IDLE) .. ",,{ pc = " .. JIT .. " ; g }") + print("XIE: entry jump armed at " .. hex(IDLE) .. " -> " .. JIT) +end + +local frames = 0 +emu.register_frame_done(function() + frames = frames + 1 + if frames % 100 == 0 then + print(string.format("XIE: frame %d pc=%s", frames, hex(cpu.state['PC'].value))) + end + if frames >= FRAMES then + print("XIE: done at frame " .. frames) + machine:exit() + end +end, "vt1200-xie-trace") + +dbg.visible_cpu = cpu +dbg.execution_state = 'run' diff --git a/harness/mame/xie_val.lua b/harness/mame/xie_val.lua new file mode 100644 index 0000000..669583f --- /dev/null +++ b/harness/mame/xie_val.lua @@ -0,0 +1,17 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"CTRL_REGIDSTORE id=%08X obj=%08X\\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F553DA0,,{ printf \"CTRL_S19RET a8=%08X\\n\", a8 ; g }") +dbg:command("bpset 3F55CB30,,{ printf \"T_ENTRY\\n\" ; g }") +dbg:command("bpset 3F55D460,,{ printf \"T_DISP\\n\" ; g }") +dbg:command("bpset 3F55D0F0,,{ printf \"T_C2 arg1=%%08X\\n\", d@(a13+0xffc0) ; g }") +dbg:command("bpset 3F55D110,,{ printf \"T_J1\\n\" ; g }") +dbg:command("bpset 3F55D120,,{ printf \"T_B24_copyout\\n\" ; g }") +dbg:command("bpset 3F55D190,,{ printf \"T_B32_zerochk\\n\" ; g }") +dbg:command("bpset 3F55D510,,{ printf \"T_MERGE\\n\" ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"T_GATE a7=%%08X a11=%%08X\\n\", a7, a11 ; g }") +print("XIE-VAL armed 10") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "val") diff --git a/harness/mame/xie_vw.lua b/harness/mame/xie_vw.lua new file mode 100644 index 0000000..da5effc --- /dev/null +++ b/harness/mame/xie_vw.lua @@ -0,0 +1,5 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 04000000,40000,w,1,{ printf \"VRW %08X %04X\n\", wpaddr, wpdata ; g }") +print("XIE-VW armed (VRAM writes 0x04000000..0x0403FFFF)") +emu.register_frame_done(function() end, "vw") diff --git a/harness/mame/xie_vwr.lua b/harness/mame/xie_vwr.lua new file mode 100644 index 0000000..e8a1dba --- /dev/null +++ b/harness/mame/xie_vwr.lua @@ -0,0 +1,4 @@ +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("wpset 04000000,100000,w,1,{ printf \"VW %08X %04X pc=%08X\n\", wpaddr, wpdata, pc ; g }") +print("XIE-VWR armed") diff --git a/harness/mame/xie_w198.lua b/harness/mame/xie_w198.lua new file mode 100644 index 0000000..977c34c --- /dev/null +++ b/harness/mame/xie_w198.lua @@ -0,0 +1,9 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ printf \"W256 a5=%08X val=%02X rp=%08X\n\", a5, b@(a5+0x20), d@(0xa6000) ; g }") +dbg:command("bpset 3F3AF870,,{ printf \"RD198 rp=%08X b198=%02X\n\", d@(a6000), b@(d@(a6000)+0x630) ; g }") +print("XIE-W198 armed 2") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "w198") diff --git a/harness/mame/xie_watch6.lua b/harness/mame/xie_watch6.lua new file mode 100644 index 0000000..6fd9ccd --- /dev/null +++ b/harness/mame/xie_watch6.lua @@ -0,0 +1,24 @@ +-- watch a caller-supplied bit address for writes (generated addresses) +local frames = 0 +local lastwp, lastaddr = "", 0 +local dbg = manager.machine.debugger +local idstore = 0x3F200000 + 0x67B04*8 +dbg:command(string.format("bpset %08X,,{ printf \"IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", idstore)) +print("XIE-WATCH6 armed") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp3.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local a = tonumber(txt) + if a and a ~= 0 and a ~= lastaddr then + lastaddr = a + print(string.format("XIE-WATCH6 installing at %08X", a)) + dbg:command(string.format("wpset %08X,32,w,1,{ printf \"WSRC pc=%%08X addr=%%08X val=%%08X\\n\", pc, wpaddr, wpdata ; g }", a)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "watch6") diff --git a/harness/mame/xie_watch7.lua b/harness/mame/xie_watch7.lua new file mode 100644 index 0000000..25f8870 --- /dev/null +++ b/harness/mame/xie_watch7.lua @@ -0,0 +1,26 @@ +-- capture rp at export, then watch rp+0x610 (generated addresses) +local frames = 0 +local lastwp, lastaddr = "", 0 +local dbg = manager.machine.debugger +local idstore = 0x3F200000 + 0x67B04*8 +local rppt = 0x3F200000 + 0x1B296*8 +dbg:command(string.format("bpset %08X,,{ printf \"IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", idstore)) +dbg:command(string.format("bpset %08X,,{ printf \"RPPTR a11=%%08X 610=%%08X\\n\", a11, d@(a11+0x610) ; g }", rppt)) +print("XIE-WATCH7 armed") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp3.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local a = tonumber(txt) + if a and a ~= 0 and a ~= lastaddr then + lastaddr = a + print(string.format("XIE-WATCH7 installing at %08X", a)) + dbg:command(string.format("wpset %08X,32,w,1,{ printf \"WSRC pc=%%08X addr=%%08X val=%%08X\\n\", pc, wpaddr, wpdata ; g }", a)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "watch7") diff --git a/harness/mame/xie_who.lua b/harness/mame/xie_who.lua new file mode 100644 index 0000000..7e2635c --- /dev/null +++ b/harness/mame/xie_who.lua @@ -0,0 +1,13 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55B200,,{ printf \"H_ENTRY obj=%08X obj_b8=%02X bandarg=%08X\n\", d@(a13+0xffe0), b@(d@(a13+0xffe0)+0x40), d@(a13+0xffa0) ; g }") +dbg:command("bpset 3F55B420,,{ printf \"H_64E_path\n\" ; g }") +dbg:command("bpset 3F55BBF0,,{ printf \"H_75E_path\n\" ; g }") +dbg:command("bpset 3F55C260,,{ printf \"H_84C_default_return\n\" ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +print("XIE-WHO armed 5") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "who") diff --git a/harness/mame/xie_who2.lua b/harness/mame/xie_who2.lua new file mode 100644 index 0000000..55760d9 --- /dev/null +++ b/harness/mame/xie_who2.lua @@ -0,0 +1,15 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F53D820,,{ printf \"REGIDSTORE id=%08X obj=%08X\n\", d@(a9+0x40), a11 ; g }") +dbg:command("bpset 3F55B200,,{ printf \"H_ENTRY obj=%08X obj_b8=%02X bandarg=%08X\n\", d@(a13+0xffe0), b@(d@(a13+0xffe0)+0x40), d@(a13+0xffa0) ; g }") +dbg:command("bpset 3F55C1D0,,{ printf \"H_DISP obj=%08X b8=%02X\n\", a11, a8 ; g }") +dbg:command("bpset 3F55B270,,{ printf \"H_64E_byte8_1_path\n\" ; g }") +dbg:command("bpset 3F55BAF0,,{ printf \"H_75E_byte8_3_path\n\" ; g }") +dbg:command("bpset 3F55BF40,,{ printf \"H_7E8_byte8_4_path\n\" ; g }") +dbg:command("bpset 3F55C260,,{ printf \"H_84C_default\n\" ; g }") +dbg:command("bpset 3F55D7A0,,{ printf \"GATE a7=%08X a11=%08X\n\", a7, a11 ; g }") +print("XIE-WHO2 armed 8") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "who2") diff --git a/harness/mame/xie_wpb8.lua b/harness/mame/xie_wpb8.lua new file mode 100644 index 0000000..00abf83 --- /dev/null +++ b/harness/mame/xie_wpb8.lua @@ -0,0 +1,27 @@ +-- watch every writer of the created resource's byte8 (generated addresses) +local frames = 0 +local lastwp, lastptr = "", 0 +local dbg = manager.machine.debugger +local cpu = manager.machine.devices[":maincpu"] +local idstore = 0x3F200000 + 0x67B04*8 +dbg:command(string.format("bpset %08X,,{ printf \"IDSTORE id=%%08X obj=%%08X\\n\", d@(a9+0x40), a11 ; g }", idstore)) +print("XIE-WPB8 armed 1 breakpoint") +emu.register_frame_done(function() + frames = frames + 1 + local f = io.open("/tmp/opencode/xie_wp2.txt", "r") + if f then + local txt = f:read("*l"); f:close() + if txt and txt ~= lastwp then + lastwp = txt + local p = tonumber(txt) + if p and p ~= 0 and p ~= lastptr then + lastptr = p + local sp = cpu.spaces['program'] + local b8 = sp:read_u8(p + 8*8) + print(string.format("XIE-WPB8 installing at %08X (byte8 now %d)", p + 8*8, b8)) + dbg:command(string.format("wpset %08X,8,w,1,{ printf \"WPB8 pc=%%08X addr=%%08X val=%%08X\\n\", pc, wpaddr, wpdata ; g }", p + 8*8)) + end + end + end + if frames >= 2000000 then machine:exit() end +end, "wpb8") diff --git a/harness/mame/xie_xfer.lua b/harness/mame/xie_xfer.lua new file mode 100644 index 0000000..48b64b4 --- /dev/null +++ b/harness/mame/xie_xfer.lua @@ -0,0 +1,10 @@ +local frames = 0 +local dbg = manager.machine.debugger +dbg:command("bpset 3F2D92B0,,{ b@(a5+0x20)=0 ; g }") +dbg:command("bpset 3FB29FD0,,{ printf \"XFER a0(src)=%08X a7=%08X a5=%08X a6=%08X b3=%08X b4=%08X b5=%08X b6=%08X\n\", a0, a7, a5, a6, b3, b4, b5, b6 ; g }") +dbg:command("bpset 3FB2A0B0,,{ printf \"COPY a0=%08X a5=%08X\n\", a0, a5 ; g }") +print("XIE-XFER armed") +emu.register_frame_done(function() + frames = frames + 1 + if frames >= 2000000 then machine:exit() end +end, "xfer") diff --git a/xie/.gitignore b/xie/.gitignore new file mode 100644 index 0000000..9e1edf1 --- /dev/null +++ b/xie/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +*.pyc +core +core.* diff --git a/xie/GHIDRA_XIE.md b/xie/GHIDRA_XIE.md new file mode 100644 index 0000000..e306734 --- /dev/null +++ b/xie/GHIDRA_XIE.md @@ -0,0 +1,583 @@ +# XIE (X Image Extension) in the VT1200 firmware — ROM analysis + +Static analysis of `vt1200_v22.bin` (1 835 008 bytes, md5 `b46a3e442ccb86134d2356bd70d22fd2`) +under Ghidra, cross-checked against a live wire probe of `192.168.99.2:0` and +against the vendored XIE 5.0 server source in `xie/xc/`. + +Nothing in the ROM was modified. Everything here is reproducible from +`xie/ghidra-evidence/` plus the steps in §12. + +--- + +## 1. Executive summary + +* The VT1200 X server contains a **complete, older XIE server** — DEC's + `XieExtensionInit` / `XieProc` / `ProcQueryImageExtension` family — built on the + same AGE-Logic/X-Consortium code that survives at 5.0 in `xie/xc/programs/Xserver/XIE/`. + It is **XIE 2.3**, `serviceClass = xieValFull`, 8 constraint levels. +* It registers itself with `AddExtension("Xie", NumEvents = 3, NumErrors = 0, + XieProc, XieSProc, XieCloseDown)` — a **six-argument** `AddExtension` with no + `MinorOpcodeProc`, which is the root of the `minor_op = 0` artefact (§7). +* Its request space is **46 slots (minor 0…45)**, not 26. Slot 0 and 21 slots beyond + it are a shared "not implemented" stub; **25 slots are implemented**. The table is + a 46-entry array of function pointers, in ROM at `0x18D8E8` (main) and `0x18D9A6` + (swapped), and it is installed into main RAM at bit `0xD3F90` / `0xD4550`. +* **Why a 5.0 client dies:** the 2.3 request *lengths* and the request *set* differ. + Every handler length-checks `stuff->length` in its first six instructions and + returns `BadLength` (16) on mismatch — and that returned error is emitted by dix's + generic path **with minor 0**, so the client is told only "opcode 129, minor 0, + BadLength". `xieperf -showtechs` dies because it asks for `QueryTechniques` + (5.0 minor 2) in a 2-word request: in 2.3 slot 2 accepts **exactly one word** and + produces **no reply at all**, so at two words it gets `BadLength`/minor 0 and at + one word it hangs waiting for a reply that is never sent. +* There is **no `QueryTechniques` and no technique-capability reply** anywhere in the + 2.3 table. `xieperf -showtechs` cannot be made to work against this server without + a client that speaks 2.3. + +Confidence markers: **[C]** confirmed by two independent angles (ROM code plus wire +or source), **[I]** inferred from one angle, **[U]** unknown. + +--- + +## 2. Address model used throughout + +``` +ghidra_byte = (mame_bit - 0x3F200000) / 8 (ROM is mapped at bit 0x3F200000) +mame_bit = 0x3F200000 + ghidra_byte * 8 +``` + +Instructions are 16-bit little-endian words. A 32-bit immediate in the code stream +is the **bit address** of its target (`MOVI 0x3F5263B0` → file offset `0x64C76`). +`CALLA` prints a *byte* address in the CPU's byte space, whose base is `0x7E40000`: +`file_offset = operand - 0x7E40000` (e.g. `CALLA 0x07eff36e` → `0xBF36E`). + +--- + +## 3. Address table + +| Ghidra | MAME bit | name | what it does | +|---|---|---|---| +| `0x64A9C` | `0x3F5254E0` | `XieExtensionInit` | calls `AddExtension("Xie",…)`, caches the `ExtensionEntry`, then runs device init | +| `0x64B98` | `0x3F525CC0` | `XieProc` | **request dispatcher** for major opcode 129 (unswapped clients) | +| `0x64BE0` | `0x3F525F00` | `XieSProc` | same for byte-swapped clients; indexes the *swapped* table | +| `0x64C28` | `0x3F526140` | `XieCloseDown` | `CloseDownProc` passed to `AddExtension` | +| `0x64C3C` | `0x3F5261E0` | `ProcNotImplemented` | shared stub in 21 slots; sends `BadRequest` itself | +| `0x68A4C` | `0x3F545260` | slot 1 handler | `QueryImageExtension` (2-word request, 8-word reply) | +| `0x18D8E8` | `0x3FE6C740` | `ProcTable[]` image | 46 × CARD32 bit address, installed at RAM bit `0xD3F90` | +| `0x18D9A6` | `0x3FE6CD30` | `SProcTable[]` image | 46 × CARD32, installed at RAM bit `0xD4550` | +| `0x18DA66` | `0x3FE6D330` | third 46-entry table image | installed at RAM bit `0xD4B10`; used from inside slot 1 | +| `0x0BF36E` | `0x3F7F9B70` | `AddExtension` | validates 3 proc pointers and the two counts | +| `0x0BFA5E` | `0x3F7FD2F0` | `SendErrorToClient`-like | builds a 32-byte core error from (client, major, minor, badValue, code) | +| `0x66FA0` | `0x3F533D00` | `LookupPhotos` | generic photo-resource lookup; emits `BadIDChoice` (14) | + +The table images are preceded in ROM by their own init records +(`dispatch_table.txt`): + +``` +0x18D8E2: CARD16 0x005C CARD32 0x000D3F90 <- main table destination +0x18D9A0: CARD16 0x005C CARD32 0x000D4550 <- swapped table destination +0x18DA60: CARD16 0x005C CARD32 0x000D4B10 <- third table destination +``` + +which is what makes the `ADDI 0xd3f90` / `ADDI 0xd4550` in the dispatcher resolvable +to concrete ROM data. + +--- + +## 4. Registration **[C]** + +`XieExtensionInit` at `0x64A9C`. Arguments are pushed onto the callee's argument +block and consumed right-to-left, so the pushed order (closeDown, swapped, main, +0, 3, "Xie") is the C order `(name, NumEvents, NumErrors, main, swapped, closeDown)`: + +``` +rom:00064aa8 MOVI 0x3f526140,A11 ; closeDownProc = 0x64C28 +rom:00064ab0 MOVI 0x3f525f00,A9 ; swappedMainProc= 0x64BE0 +rom:00064ab8 MOVI 0x3f525cc0,A9 ; mainProc = 0x64B98 +rom:00064ac0 SUB A9,A9 ; NumErrors = 0 +rom:00064ac4 MOVK 0x3,A9 ; NumEvents = 3 +rom:00064ac8 MOVI 0x3f5263b0,A8 ; "Xie" (file 0x64C76) +rom:00064ad0 CALLA 0x07eff36e ; AddExtension (file 0x0BF36E) +``` + +Independent check — `AddExtension` itself (`0xBF36E`) requires three non-NULL proc +pointers and bounds the two counts against the event window (128) and error window +(255): + +``` +rom:000bf374 MOVE *A13(0xff80),A11,0x1 ; arg3 mainProc -> JREQ fail if NULL +rom:000bf37a MOVE *A13(0xff60),A11,0x1 ; arg4 swapped -> JREQ fail if NULL +rom:000bf380 MOVE *A13(0xff40),A11,0x1 ; arg5 closeDown -> must be non-NULL +rom:000bf38e MOVE @0x21a620,A11,0x1 ; running event base +rom:000bf394 MOVE *A13(0xffc0),A9,0x1 ; arg1 = NumEvents +rom:000bf39a CMPI 0x80,A9 ; 128 +rom:000bf3a0 MOVE @0x21a640,A9,0x1 ; running error base +rom:000bf3a6 MOVE *A13(0xffa0),A11,0x1 ; arg2 = NumErrors +rom:000bf3ac CMPI 0xff,A11 ; 255 +``` + +**Numbers.** `NumEvents = 3`, `NumErrors = 0`. + +* The wire agrees on the events: `XQueryExtension("Xie")` returns *present, + opcode 129, first_event 64*, which is what dix assigns when it hands out a + three-event block at that point in `InitExtensions` **[C]** (same registration, + different dynamic base is possible on a differently-populated server — the + *count* is what the ROM proves). +* `NumErrors = 0` is consistent with the wire: the only XIE failures seen are the + **core** errors `BadRequest` (1), `BadIDChoice` (14) and `BadLength` (16). No + extension-private error code is ever produced **[C]**. +* The reproduction of *opcode 129* is not decidable from the ROM — dix assigns + `major_opcode` dynamically from `last_opcode`. What the ROM does prove is that + XIE is the *only* extension registered besides `ServerManagementExtension`, and + that it is registered with the standard dix `AddExtension` path, so 129 is simply + "second extension registered on this server" **[I]**. + +`XieExtensionInit` then caches fields of the returned `ExtensionEntry`: + +``` +rom:00064b30 MOVE *A11(0x60),A11,0x1 +rom:00064b34 MOVE A11,@0x1ad960,0x1 ; XIE major opcode, used in every error +``` + +`0x1AD960` is the value later fed to `SendErrorToClient` as the major opcode — the +wire's `major_op=129` for every error confirms the field **[C]**. + +Finally it calls a device-init routine at `0x3F944` (`CALLA 0x07e7f944` at `0x64B64`) +and prints `"XieExtensionInit: Device Init failed\n"` if it returns non-zero. That is +the only "Device Init" in the ROM; its body was not analysed **[U]**. + +--- + +## 5. The dispatcher **[C]** + +`XieProc`, `0x64B98` / bit `0x3F525CC0`: + +``` +rom:00064b9e MOVE *A13(0xffe0),A11,0x1 ; arg0 = ClientPtr +rom:00064ba2 MOVE *A11(0x40),A9,0x1 ; A9 = client->requestBuffer +rom:00064ba8 MOVE *A9(0x8),A11,0x0 ; stuff->opcode = request byte 1 +rom:00064bac CMPI 0x2e,A11 ; 46 +rom:00064bb0 JRNC 0x00064bca ; >= 46 -> dix protocol error +rom:00064bbc SLL 0x5,A11 ; * 32 bits = 4-byte stride +rom:00064bbe ADDI 0xd3f90,A11 ; proc_table at RAM bit 0xD3F90 +rom:00064bc4 MOVE *A11,A11,0x1 +rom:00064bc6 CALL A11 +rom:00064bd6 MOVE *SP(0x80),A14,0x1 +rom:00064bda MMFM SP,0x2a00 ; handler's A8 (an X error code) -> dix +``` + +`XieSProc` (`0x64BE0`) is byte-for-byte the same with `ADDI 0xd4550` — the swapped +table. This is exactly the 5.0 macro + +```c +#define ExecProc(client,opcode) ((client_table[client->index].proc_table[opcode])(client)) +#define CallProc(client) (ExecProc(client,stuff->opcode)) +``` +(`xie/xc/programs/Xserver/XIE/include/macro.h`), except that 2.3 indexes a **RAM** +copy installed from the ROM image at `0x18D8E8`. + +There is **no per-request work in the dispatcher** other than the `< 46` bound — +so any per-request length check happens inside the handler, which is what the wire +shows (§7). + +--- + +## 6. The request table **[C]** + +> **See `GHIDRA_XIE_HANDLERS.md`** (second pass) for what each slot *does*, the +> corrected reading of the third pointer table, and a verified session-level +> client. Two corrections to what follows: +> +> * The array at `0x18DA64` (RAM bit `0xD4B10`) is the **reply-swap table**, not +> the swapped-proc table, and only slots 1, 3, 6, 10 and 24 have an entry — +> those are the slots that produce a reply at all. The real swapped-proc table +> is at `0x18D9A6` (RAM bit `0xD4550`), as stated in §3. (The dump in +> `ghidra-evidence/dispatch_table.txt` labels the `0x18DA64` columns +> "swapped"; they are reply-swap entries.) +> * Slots 1–4 are DEC's four **Session Services** (`INIT_SESSION`, +> `TERM_SESSION`, `QUERY_OP_DEFAULTS`, `SET_OP_DEFAULTS`); slot 1's name in +> §6.1/§7 stands (`QueryImageExtension` equivalent), slots 2–4 were unnamed +> there. Slots 7, 8 and 10 turn out to be multi-operation classes, not single +> requests. + +46 slots; `0x64C3C` (`ProcNotImplemented`) fills 21 of them. Length column is +`stuff->length` in 4-byte words, read from the code (see +`xie/ghidra-evidence/listings.txt` for the instruction addresses). The last column +is what the live server did when sent a **1-word** request for that minor (my own +sweep, `xie/ghidra-evidence/length_sweep_wire.txt`): `BadLength` means "slot is +implemented and rejects 1 word". + +| minor | handler (Ghidra) | MAME bit | length check in ROM | 1-word wire result | +|---|---|---|---|---| +| 0 | `0x64C3C` | `0x3F5261E0` | none (NotImplemented) | BadRequest, minor_op 0 | +| 1 | `0x68A4C` | `0x3F545260` | `length == 2` | BadLength | +| 2 | `0x68DA6` | `0x3F546D30` | `length == 1` | **TIMEOUT** (success, no reply) | +| 3 | `0x3FD78` | `0x3F3FEBC0` | `length == 2` | BadLength | +| 4 | `0x3FE06` | `0x3F3FF030` | `length == 2` | BadLength | +| 5 | `0x68DDC` | `0x3F546EE0` | `length == 5`, then `byte[4] == 2` | BadLength | +| 6 | `0x68EC6` | `0x3F547630` | `length == 1` | **REPLY len 0** | +| 7 | `0x66866` | `0x3F534330` | `length == 4` | BadLength | +| 8 | `0x668E4` | `0x3F534720` | `length >= 3` | BadLength | +| 9 | `0x6698E` | `0x3F534C70` | `length == 3` | BadLength | +| 10 | `0x66B64` | `0x3F535B20` | `length == 3` | BadLength | +| 11 | `0x667B6` | `0x3F533DB0` | `length == 3` | BadLength | +| 12 | `0x66738` | `0x3F5339C0` | `length == 2` | BadLength | +| 13 | `0x66A8E` | `0x3F535470` | `length == 2` | BadLength | +| 14 | `0x66C34` | `0x3F5361A0` | `length == 4` | BadLength | +| 15 | `0x6A536` | `0x3F5529B0` | `length == 3` | BadLength | +| 16 | `0x64C3C` | `0x3F5261E0` | none (NotImplemented) | BadRequest, minor_op 16 | +| 17 | `0x64C3C` | `0x3F5261E0` | none | BadRequest, minor_op 17 | +| 18 | `0x6A5A4` | `0x3F552D20` | `length >= 4` | BadLength | +| 19 | `0x6A76E` | `0x3F553B70` | `length >= 8` | BadLength | +| 20 | `0x6AA54` | `0x3F5552A0` | `length == 0x23` (35 words) | BadLength | +| 21 | `0x62D40` | `0x3F516A00` | `length == 16` | BadLength | +| 22 | `0x630F4` | `0x3F5187A0` | `length == 2` | BadLength | +| 23 | `0x64C3C` | `0x3F5261E0` | none | BadRequest, minor_op 23 | +| 24 | `0x6315E` | `0x3F518AF0` | `length == 4` | BadLength | +| 25–32 | `0x64C3C` | `0x3F5261E0` | none | BadRequest, minor_op = N | +| 33 | `0x64CC8` | `0x3F526640` | `length == 4` | BadLength | +| 34–39 | `0x64C3C` | `0x3F5261E0` | none | BadRequest, minor_op = N | +| 40 | `0x65262` | `0x3F529310` | `length == 4` | BadLength | +| 41,42 | `0x64C3C` | `0x3F5261E0` | none | BadRequest, minor_op = N | +| 43 | `0x65600` | `0x3F52B000` | `length == 10` | BadLength | +| 44 | `0x65CAA` | `0x3F52E550` | `length == 5` | BadLength | +| 45 | `0x64C3C` | `0x3F5261E0` | none | BadRequest, minor_op 45 | + +**The 46-request sweep matches the table exactly**: every slot the ROM maps to +`0x64C3C` answers `BadRequest` and every other slot answers `BadLength` (or, for 2 +and 6, runs). That is a complete, independent confirmation of the table contents — +25 implemented slots at 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,24,33,40,43,44. + +### 6.1 What can and cannot be named **[I]/[U]** + +Only **slot 1 is identified with certainty** (see §7.1). The rest cannot be given +5.0 names by number, because the numbering demonstrably is not 5.0's. Hard +counter-examples: + +* slot 22 takes **2 words**; 5.0's smallest slot-22 candidate (`PutClientData`, + `sz_xiePutClientDataReq = 20`) is 5 words. +* slot 2 takes one word and **returns no reply**; no 5.0 query behaves that way. +* slot 23 (`GetClientData` in 5.0) is `ProcNotImplemented` here. +* slot 6 takes **no argument** where 5.0's `QueryColorList` carries a `colorList` id. + +Structural facts that *are* established for the unnamed slots: + +* **Photo-resource requests** — slots 11, 12, 13, 14, 21, 22, 24, 33, 40, 43, 44 all + call `LookupPhotos` (`0x66FA0`), the same helper that emits `BadIDChoice` (14). + That is why the wire shows `BadIDChoice` for minor 11 at 3 words and minor 24 at + 4 words: they were dispatched and their id argument did not resolve. +* **Id field position** — in both slot 11 and slot 24 the id is the CARD32 at + request **byte offset 4** (`MOVE *A9(0x20),…`), i.e. word 1, same offset as 5.0, + but the request is longer overall (extra words follow the id). +* **Element-list requests** — slots 19 (≥8 words), 20 (35 words) and 43 (10 words) + are the only large ones; they are the closest thing to photoflo/element-list + requests. Slot 20 additionally seeds a local with `MOVK 0x19` (25) before the + length test, i.e. it has a 25-element notion of its own **[I]**. +* **The restart/teardown pair** — slot 1 *increments* the global at `0x1AD920` when + it initialises client state; slot 2 *decrements* it and returns `Success` with no + reply. So slot 2 behaves like a per-client teardown/reset request **[I]**. + (`0x1AD920` is also zeroed by `XieExtensionInit` at `0x64B18`.) + +--- + +## 7. QueryImageExtension and the `BadLength` / minor-0 mechanism + +### 7.1 Slot 1 = QueryImageExtension **[C]** + +Handler `0x68A4C`, `length == 2` (`0x68A60`/`0x68A64`/`0x68A66`). It builds an +8-word reply in its frame and hands it to the generic reply writer +`CALLA 0x07e6a422` (`0x68D62`). The load-bearing stores: + +``` +rom:00068c88 MOVE *A13(0xffe0),A5,0x1 ; client +rom:00068c8c MOVE *A5(0xe0),*A13(0x130),0x0 ; serviceClass <- client field +rom:00068c92 MOVK 0x8,A5 +rom:00068c94 MOVE A5,*A13(0x140),0x1 ; reply.length = 8 +rom:00068c98 MOVK 0x2,A7 +rom:00068c9a MOVE A7,*A13(0x160),0x0 ; majorVersion = 2 +rom:00068c9e MOVK 0x3,A5 +rom:00068ca0 MOVE A5,*A13(0x170),0x0 ; minorVersion = 3 +``` + +and the live reply confirms every field: + +``` +bytes 8.. of the reply: 02 00 | 03 00 | 20 00 | 00 00 | e0 56 41 00 ... + major minor class align first levels +reply length field = 8 +``` + +`reply.length = 8` matches the 5.0 source exactly — `reply.length = +sizeof(Preferred_levels)>>2` and `sz_xieQueryImageExtensionReply = 32` +(`xie/xc/.../dixie/request/session.c`, `XIEproto.h`), and `serviceClass 0x20` is +`xieValFull` under `XIE_FULL`. **The 2.3 request is 8 bytes, identical to 5.0's**, +which is why `xieperf` gets this far. + +One 2.3-only detail: the handler also reads the request's second word and compares +its halves with 2 and 3 — + +``` +rom:00068c6e MOVE *A9(0x20),A5,0x0 ; request word 1, low half +rom:00068c72 SUBK 0x2,A5 ; == 2 ? +rom:00068c76 MOVE *A9(0x30),A5,0x0 ; request word 1, high half +rom:00068c7a SUBK 0x3,A5 ; == 3 ? +rom:00068c84 MOVB *A5,*A13(0x128) ; -> per-client "declared 2.3" flag +``` + +That flag gates the per-client state initialisation at `0x68CAC…0x68D16` +(it is **not** used to build the reply — a client that sends zeros still receives +major 2 / minor 3). Interpreted as a client-declared version pair `{2,3}`; **[I]**, +the exact consequence of the flag is not traced. + +### 7.2 Why `BadLength` reports minor 0 **[C] for the behaviour, [I] for the dix side** + +Two different error paths exist, and only one of them carries a minor opcode. + +**(a) Errors the XIE code *sends itself* carry the real minor.** `LookupPhotos` +(`0x66FA0`) on a failed resource lookup: + +``` +rom:00066fd8 MOVK 0xe,A11 ; arg = 14 = BadIDChoice +rom:00066fda MOVE A11,*A14+,0x1 +rom:00066fdc MOVE *A13(0xff80),*A14+,0x1 ; the offending id +rom:00067110 MOVE A8,*A14+,0x1 ; stuff->opcode (the real minor) +rom:00067112 MOVE 0x1ad960,*A14+,0x1 ; XIE major opcode +rom:00067118 MOVE *A13(0xffe0),*A14+,0x1 ; client +rom:0006711c CALLA 0x07effa5e ; SendErrorToClient(...) +``` + +and `ProcNotImplemented` (`0x64C3C`) does the same with code 1: + +``` +rom:00064c4c MOVK 0x1,A7 ; arg = 1 = BadRequest +rom:00064c56 MOVE *A9(0x8),A8,0x0 ; stuff->opcode +rom:00064c5c MOVE 0x1ad960,*A14+,0x1 ; major opcode +rom:00064c64 CALLA 0x07effa5e ; SendErrorToClient(...) +``` + +Wire: `minor 23 → code 1, minor_op 23, major_op 129`; `minor 16,17,25…45` likewise +report their own number. **The real minor is transmitted.** + +**(b) The length check does not send anything — it *returns* 16.** Every handler's +prologue is: + +``` +rom:00068eda MOVE *A9(0x10),A11,0x0 ; stuff->length +rom:00068ede DEC A11 +rom:00068ee0 JREQ ok +rom:00068ee2 MOVK 0x10,A8 ; 16 = BadLength +rom:00068ee4 JR epilogue ; A8 is the function's return value +``` + +`XieProc` returns that A8 to dix (`0x64BDA MMFM` restores and returns). dix's +generic "extension returned an error" path then emits the error — and it has no +minor opcode to put in it: the extension was registered by a **six-argument** +`AddExtension` with no `MinorOpcodeProc` argument (§4), and `XieProc` keeps no +minor in any client field. Result: **`BadLength` always arrives with +`minor_op = 0`**, while errors sent by the XIE code itself carry the true minor. + +This is exactly the split the wire shows, for every implemented slot: + +``` +minor=1 words=1: ERROR code=16 ... minor_op=0 major_op=129 +minor=23 words=1: ERROR code= 1 ... minor_op=23 major_op=129 +``` + +**Consequence for `xieperf`.** Its failing request is one whose 5.0 length does not +match the 2.3 expectation, so the client learns only "major 129, minor 0, +BadLength" — the minor is structurally unavailable. The only robust fix on the +client side is to send 2.3 lengths; the server cannot be made to name the failing +request without patching dix's error path. + +### 7.3 The observed sizes for minors 6, 11 and 24 **[C]** + +| minor | 2.3 length | 5.0 length (`sz_*Req`) | consequence | +|---|---|---|---| +| 6 | **1 word** (bare header) | 2 words (`colorList` id) | 5.0's 2-word request → `BadLength`; 1 word → reply with `length = 0` (an empty list) | +| 11 | **3 words** | 2 words (`photomap` id) | id at byte 4 resolves through `LookupPhotos`; a 5.0 2-word request is rejected before the lookup | +| 24 | **4 words** | 3 words (`nameSpace` + `floID`) | id at byte 4; a 5.0 3-word request is rejected | + +So the 2.3 requests are consistently *longer* than 5.0's for id-carrying requests, +and *shorter* (argless) for the list query at minor 6. Both directions break a 5.0 +client. + +--- + +## 8. 2.3 vs 5.0 — concrete wire differences + +| aspect | XIE 5.0 (`xie/xc/...`) | ROM 2.3 | +|---|---|---| +| request space | 26 (`xieNumProtoReq 26`, `ProcTable5_00[27]`) | **46** (`CMPI 0x2e`, 46-entry table) | +| implemented requests | 25 in `XIE_FULL` | **25 of 46**; 21 slots are `ProcNotImplemented` | +| dispatch | `client_table[].proc_table[opcode]` | same, but table lives in RAM at bit `0xD3F90` / `0xD4550`, loaded from ROM `0x18D8E8` / `0x18D9A6` | +| `minorOpcodeProc` | separate `AddExtension` argument | **absent** — 6-argument `AddExtension`; `BadLength` loses its minor | +| `QueryTechniques` | `ProcQueryTechniques`, 2-word request, 32-byte reply | **does not exist**: slot 2 is a 1-word, reply-less request | +| `GetClientData` | implemented (slot 23, 5 words) | `ProcNotImplemented` → `BadRequest` | +| `QueryColorList` | 2 words, carries a `colorList` id | 1 word, no argument | +| `QueryPhotomap` | 2 words | 3 words | +| `QueryPhotoflo` | 3 words | 4 words | +| events | 6+ event types in `XIEproto.h` (`PhotofloDone`, `Flo`, `ColorAlloc`, `DecodeNotify`, `ExportAvailable`, `ImportObscured`) | **3** registered events | +| error codes | XIE-private error classes in `xieFlo*Err` | none: only core 1 / 14 / 16 are produced (`NumErrors = 0`) | +| version reply | major 5, minor 00 | major 2, minor 3, `serviceClass = 0x20` (`xieValFull`), 8 levels | + +--- + +## 9. Techniques and elements **[C] for the absence, [U] for a capability list** + +* There is **no QueryTechniques handler and no technique-capability reply** in the + 2.3 table. Slot 2 — 5.0's `QueryTechniques` — accepts exactly one word, decrements + `0x1AD920`, returns `Success`, and **writes nothing to the client**: + + ``` + rom:00068dc2 MOVE @0x1ad920,A11,0x1 + rom:00068dc8 DEC A11 + rom:00068dca MOVE A11,@0x1ad920,0x1 + rom:00068dcc SUB A8,A8 ; Success, no WriteToClient + ``` + + That is why the wire shows `TIMEOUT` at one word (the client waits for a reply + that never comes) and `BadLength` at every other length. + +* Consequently the answer to "what would `xieperf -showtechs` legitimately list" + is: **nothing, from this server.** There is no table it can ask for. + +* The *element* side does exist — the ROM contains the AGE-Logic element machinery + (`"error allocating export function block"`, `"error allocating export context"`, + `"error allocating export histogram space"`, `"error allocating export pixel + list"`, `"error allocating export RGB list"`, `"error allocating export map + list"` at `0x649B0…0x64A80`, plus `"error allocating photoflo"` `0x68962`, + `"error allocating Roi"` `0x689BC`, `"error allocating photomap"` `0x6D0B0`, + `"unsupported pipe element"` `0x1C71D`). But I did **not** locate a + `MakeTable`-equivalent array: a scan for runs of ≥18 consecutive ROM pointers + found nothing of 5.0's 38-entry `MakeTable` shape (largest runs: 192, 144, 128, + 120, 70, 64, 63, 63 entries, all in the ordinary-data region). + **Which techniques 2.3 implements is therefore UNKNOWN** — the code is present, + the enumeration is not identified. + +--- + +## 10. Other XIE entry points + +| Ghidra | name/role | evidence | +|---|---|---| +| `0x66FA0` | `LookupPhotos` — generic photo-resource lookup, emits `BadIDChoice` | string `"LookupPhotos: BadIDChoice coming!"` @`0x68910` referenced at `0x67128`; id comes from request byte 4 | +| `0x0BFA5E` | error sender used by all XIE code that reports a *named* minor | argument order (client, major@`0x1AD960`, minor=`stuff->opcode`, badValue, code) matches the wire | +| `0x64C28` | `CloseDownProc`, passed to `AddExtension` | 6th argument; small wrapper that calls `0x3F99E` | +| `0x3F944` | "Device Init" hook called at the end of `XieExtensionInit` | `CALLA 0x07e7f944` at `0x64B64`; `JREQ` + the `"Device Init failed"` string @`0x64CA1` | +| `0x67490`, `0x67A44` | xref `"error allocating photoflo"` — photoflo allocation | string refs | +| `0x67C50` | xref `"error allocating Roi"` | string ref | +| `0x6C820`, `0x6CAA8` | xref `"error allocating photomap"` | string refs | +| `0x68F38` | helper called from slot 1 after the version check; walks a per-client table at `0x1ADA70` | `ADDI 0x1ada70` at `0x68F4E` | +| `0x1AD920`, `0x1AD940`, `0x1AD960`, `0x1AD980`, `0x1AD990`, `0x1AD9A0` | XIE globals: client counter, two cached `ExtensionEntry` fields, three cached lookup/queue proc pointers, major opcode | `XieExtensionInit` `0x64B18…0x64B5E` | + +A *third* 46-entry table is installed at RAM bit `0xD4B10` and indexed the same way +from inside slot 1 (`0x68D44 SLL 0x5` / `0x68D46 ADDI 0xd4b10` / `0x68D4E CALL A5`). +Its contents were not dumped; it is presumably the per-request "device dependent" +override **[I]**. + +--- + +## 11. Confirmed / Inferred / Unknown + +**Confirmed (ROM code + wire, or ROM code + 5.0 source)** + +1. `AddExtension("Xie", 3, 0, XieProc@0x64B98, XieSProc@0x64BE0, XieCloseDown@0x64C28)`. +2. Dispatcher indexes a 46-entry pointer table at RAM bit `0xD3F90` with + `stuff->opcode`, rejecting `>= 46`; the ROM images of that table and the swapped + one are at `0x18D8E8` / `0x18D9A6` (46 entries each). +3. The 25 implemented slots and the exact per-slot length check in the table of §6. + Verified end-to-end by the 46-request wire sweep. +4. Slot 1 is `QueryImageExtension`: 2-word request, 8-word reply, major 2, minor 3, + `serviceClass` from the client record, `reply.length = 8`. +5. `BadLength` is *returned* as A8 = 16 and arrives at the client with `minor_op = 0`; + `BadRequest` from `ProcNotImplemented` and `BadIDChoice` from `LookupPhotos` are + *sent* by XIE with `stuff->opcode` as the minor and arrive with the true minor. +6. Slots 11 and 24 take 3 and 4 words and read their id from request byte 4; slot 6 + takes 1 word. +7. There is no `QueryTechniques` in 2.3. + +**Inferred** + +1. Opcode 129 is just "second extension registered"; the ROM fixes the *counts* + (3 events, 0 errors), not the dynamic base. +2. dix's generic error path cannot name a minor because no `MinorOpcodeProc` was + supplied (6-argument `AddExtension`) — the outcome is proven, the dix internals + were not decompiled. +3. Slot 2 is a per-client teardown/reset request (decrements the counter slot 1 + increments; no reply). +4. The `{2,3}` comparison in slot 1 is a client-declared protocol version that gates + per-client state initialisation. +5. Slots 19/20/43 are photoflo/element-list requests (only large ones; slot 20 has a + 25-element notion). + +**Unknown** + +1. Names of slots 3–5, 7–15, 18–22, 24, 33, 40, 43, 44 — the numbering is not 5.0's, + and only the *shape* (length, id offset, `LookupPhotos` use) was recovered. +2. Which techniques/elements 2.3 can execute, and whether a `MakeTable` equivalent + exists (no 38-entry pointer array was found). +3. The contents/role of the third 46-entry table at RAM bit `0xD4B10`. +4. What `Device Init` (`0xE7F944`) validates. +5. Why slot 20 wants exactly 35 words. + +--- + +## 12. Reproduction + +Everything below assumes the Ghidra session from the task +(`program_list_open` → session id), language `tms34010:LE:32:default`, program +`/home/arti/code/k-space/vt1200/vt1200_v22.bin`, base `rom:00000000`. + +1. **Make the session writable and analyse the reset path.** + `program_mode_set(read_only=false)`; `analysis_update_and_wait`. + *Note:* auto-analysis finds 0 functions on this raw image (no entry point). + Add the reset vector as an entry point and re-run: + `program.getSymbolTable().addExternalEntryPoint(addr(0x8))` — the reset PC + `0x3F200040` maps to Ghidra `0x8`. Ghidra still does not follow `CALL`s, so the + listings in `xie/ghidra-evidence/` were produced with explicit + `DisassembleCommand(AddressSet(start, start+0x5ff), wholeROM, followFlow=true)`. + +2. **Find `XieExtensionInit`.** Search the 32-bit immediates for the bit address of + the string `Xie` (`0x3F5263B0` = file `0x64C76`) or of + `"XieExtensionInit: AddExtension failed"` (`0x3F5263D0` = file `0x64C7A`): + + ```python + import jpype, struct + mem = program.getMemory() + a = jpype.JArray(jpype.JByte)(0x1c0000); mem.getBytes(program.getMinAddress(), a) + data = bytes((b & 0xff) for b in a) + data.find(struct.pack(" 0x64ae2 + ``` + (`mem.getBytes(addr, bytearray)` silently does nothing in this PyGhidra build — + use a `jpype.JArray`.) + +3. **Dump the tables** + + ```python + for base in (0x18d8e8, 0x18d9a6): + for i in range(46): + v = struct.unpack_from("> 3)) + ``` + +4. **Dump a handler prologue** — `DisassembleCommand` from the handler address for + 0x60 bytes and walk `getInstructionAt()`; the length check is always within the + first six instructions. + +5. **Re-check the wire side** (read-only probes, 46 connections): + + ```sh + cd /tmp/opencode && python3 xie_len_sweep.py # uses xie/evidence/xie_raw.py + ``` + + Expected: the 25 implemented minors answer `BadLength` (or, for 2 and 6, run), + the 21 `ProcNotImplemented` slots answer `BadRequest` with their own minor. + +6. **Re-check the error-path split**: `probe(23, 1)` → `code=1, minor_op=23`; + `probe(1, 1)` → `code=16, minor_op=0`. + +--- + +*Evidence files: `xie/ghidra-evidence/dispatch_table.txt` (the 46×2 table with raw +bit addresses), `xie/ghidra-evidence/listings.txt` (every quoted instruction), +`xie/ghidra-evidence/length_sweep_wire.txt` (the 46-request probe transcript).* diff --git a/xie/GHIDRA_XIE_HANDLERS.md b/xie/GHIDRA_XIE_HANDLERS.md new file mode 100644 index 0000000..74cd6bc --- /dev/null +++ b/xie/GHIDRA_XIE_HANDLERS.md @@ -0,0 +1,610 @@ +# XIE 2.3 handlers — naming pass + +Second pass over `vt1200_v22.bin` (md5 `b46a3e442ccb86134d2356bd70d22fd2`). +Read `GHIDRA_XIE.md` first; this file only adds to it. + +Raw material: `xie/ghidra-evidence/handlers/slotNN_HHHHHH.txt` (one file per +implemented slot, instructions taken from each handler's Ghidra function body), +`xie/ghidra-evidence/dispatch_table.txt`, and the wire transcripts quoted below. + +Confidence tags: **[C]** = two independent signals (code + wire, or code + 5.0 +source + wire), **[I]** = one signal plus a consistent story, **[U]** = unknown. +Where the evidence only supports a shape ("two sub-operations selected by a +32-bit word at byte 4"), the shape is reported and no name is invented. + +--- + +## 1. Executive summary + +**Named with real evidence (6 of 25):** + +| slot | name | confidence | +|---|---|---| +| 1 | **INIT_SESSION** — same job as XIE 5.0 `QueryImageExtension` (replies with version 2.3 + levels) | [C] | +| 2 | **TERM_SESSION** — argless, decrements the session counter, **no reply** | [C] | +| 3 | **QUERY_OP_DEFAULTS** — argless query with a fixed 32-byte reply | [I] | +| 4 | **SET_OP_DEFAULTS** — argless setter, stores the request word into the per-client record | [I] | +| 5 | **SET_* with a mode byte** — 5 words, byte 4 must be `2`, else `BadValue`; transport-shaped | [I] | +| 6 | **QUERY_EVENTS** — argless query, reply describes event selection | [I] | + +The six come from one coherent structure: a **per-client session record** at +`0x1ADA70 + clientIndex*20` plus a **session counter** at `0x1AD920`. Slot 1 +initialises and increments, slot 2 decrements, slot 3 reads the record back, +slot 4 writes it. That quartet is exactly DEC's *Session Services* group +(`XIEP_INIT_SESSION`, `XIEP_SET_OP_DEFAULTS`, `XIEP_QUERY_OP_DEFAULTS`, +`XIEP_TERM_SESSION` — `xie/docs/dec/…EK-V120I-IN-001.txt`, Table C-1), and the +wire behaviour of all four matches. + +**Not named, but structurally classified (19):** slots 7, 8 and 10 are +**multi-operation request classes** (a 32-bit operation selector at request +byte 4: slot 7 takes ops 1-2, slot 8 takes 1,2,4,5,6 (3 is rejected) over 4 +sub-handlers, slot 10 takes ops 1-5); slots 11–15, 18, 22, 24, +33, 40, 43, 44 are **photo-resource operations** that all go through +`LookupPhotos` (`0x66FA0`) and answer `BadIDChoice` for an unknown id; slots 19, +20 and 21 are the **large data/list requests** (≥8, exactly 35, and 16 words). +Naming those needs the experiments in §11. + +**A usable 2.3 client exists for the session layer only**, and it is verified end +to end (§10): connect → minor 1 → minor 3 → minor 6 → minor 2. The +resource/transport/pipeline half cannot yet be written from static evidence; §11 +gives the exact next probes. + +**Correction to the first report.** §3/§6.1 of `GHIDRA_XIE.md` mislabels one of +the three pointer tables. The array at `0x18DA64` is **not** the swapped-proc +table — it is the **reply-swap table**, installed at RAM bit `0xD4B10`, and only +five slots have an entry (1, 3, 6, 10, 24 — exactly the slots that produce a +reply). The real swapped-proc table is at `0x18D9A6` → RAM `0xD4550`, and its +entries are the `0x697xx` swap-and-redispatch stubs. Details in §2. + +--- + +## 2. The three tables (corrected) + +| ROM image | RAM destination | used by | entries | +|---|---|---|---| +| `0x18D8E8` | bit `0xD3F90` | `XieProc` (`0x64B98`), major-opcode 129, unswapped clients | 46 procs (25 real) | +| `0x18D9A6` | bit `0xD4550` | `XieSProc` (`0x64BE0`), byte-swapped clients | 46 swap-and-redispatch stubs | +| `0x18DA64` | bit `0xD4B10` | reply writer inside the five query handlers | 46, **only 1/3/6/10/24 non-stub** | + +The reply-swap table is what tells us which requests answer with a reply at all: +its non-stub entries are exactly `{1, 3, 6, 10, 24}`. Every handler that has no +entry there either returns `Success` silently or sends an error. + +The five entries: + +``` +[ 1] 0x3F5491E0 -> 0x6923C +[ 3] 0x3F549620 -> 0x692C4 +[ 6] 0x3F549980 -> 0x69330 +[10] 0x3F549CA0 -> 0x69394 +[24] 0x3F54AFC0 -> 0x695F8 +``` + +and the dispatch itself, from slot 1 (identical in 3, 6, 10, 24): + +``` +rom:00068d24 MOVE *A11(0x80),A7,0x1 ; client->swapped ? +rom:00068d2c JREQ 0x00068d52 ; no -> straight WriteToClient +rom:00068d40 MOVE *A9(0x8),A5,0x0 ; stuff->opcode +rom:00068d44 SLL 0x5,A5 +rom:00068d46 ADDI 0xd4b10,A5 ; reply-swap table +rom:00068d4c MOVE *A5,A5,0x1 +rom:00068d4e CALL A5 +rom:00068d52 ... CALLA 0x07e6a422 ; WriteToClient @0x2A422 +``` + +--- + +## 3. Slot table + +Request fields are byte offsets inside the request (the handler reads +`*A9(bit_offset)`, so `*A9(0x20)` = byte 4). "reply" means the slot has an entry +in the reply-swap table. + +| slot | handler | words | request fields read | reply | class / best name | conf | 5.0 counterpart | +|---|---|---|---|---|---|---|---| +| 1 | `0x68A4C` | 2 | 4 (2×u16), 6 | yes | **INIT_SESSION** ≡ QueryImageExtension | [C] | `X_ieQueryImageExtension` | +| 2 | `0x68DA6` | 1 | — | no | **TERM_SESSION** | [C] | (none) | +| 3 | `0x3FD78` | 2 | — (payload ignored) | yes | **QUERY_OP_DEFAULTS** | [I] | (none) | +| 4 | `0x3FE06` | 2 | 4 (u32 → per-client rec) | no | **SET_OP_DEFAULTS** | [I] | (none) | +| 5 | `0x68DDC` | 5 | 4 (u8, must be 2), 8 | no | **SET_* mode-selecting** (transport-shaped) | [I] | `X_ieSetTransport`? | +| 6 | `0x68EC6` | 1 | — | yes | **QUERY_EVENTS** | [I] | (none) | +| 7 | `0x66866` | 4 | 4 (u32 selector 1–2), 8 | no | 2-operation class mux | [C] | — | +| 8 | `0x668E4` | ≥3 | 4, 8 | no | 4 sub-handlers, selector 1,2,4,5,6 (3 → BadRequest) | [C] | — | +| 9 | `0x6698E` | 3 | 4, 8 | no | resource op | [I] | — | +| 10 | `0x66B64` | 3 | 4 (u32 selector 1–5), 8 | yes | 5-operation class mux, replies | [C] | — | +| 11 | `0x667B6` | 3 | 4 (id), 8 | no | photo-resource op (`LookupPhotos` type `0xFFFF`) | [C] | — | +| 12 | `0x66738` | 2 | 4 (id) | no | photo-resource op (`LookupPhotos` type `0`) | [C] | — | +| 13 | `0x66A8E` | 2 | 4 (read twice) | no | photo-resource op (type `0xFFFF`) | [C] | — | +| 14 | `0x66C34` | 4 | 4, 8, 12 | no | photo-resource op (type `0xFFFF`) | [C] | — | +| 15 | `0x6A536` | 3 | 4, 8 | no | pipeline-side resource op | [I] | — | +| 18 | `0x6A5A4` | ≥4 | 4, 12, 13 | no | pipeline setup | [I] | `ExecutePhotoflo`? | +| 19 | `0x6A76E` | ≥8 | 4, 8, 12, 16, 20, 24, 28 | no | data-carrying (list) | [I] | `PutTile`/`PutStream`? | +| 20 | `0x6AA54` | 35 | 4, 8, 12, 13, 14, 16 | no | photoflo definition (element list) | [I] | `CreatePhotoflo`? | +| 21 | `0x62D40` | 16 | 4, 16, 20, 24, 28, 32, 36 | no | photo-resource op (big) | [I] | — | +| 22 | `0x630F4` | 2 | 4 (id) | no | photo-resource op | [C] | — | +| 24 | `0x6315E` | 4 | 4 (id), 8, 12 | yes | **photo-resource QUERY** | [C] | `X_ieQueryPhotomap`/`QueryPhotoflo` | +| 33 | `0x64CC8` | 4 | 4, 8 (type comes from the request) | no | generic photo handle op | [C] | — | +| 40 | `0x65262` | 4 | 4, 8 | no | generic photo handle op | [C] | — | +| 43 | `0x65600` | 10 | 4, 8, 20, 24 | no | big photo op | [I] | — | +| 44 | `0x65CAA` | 5 | 4, 8, 12, 16 | no | photo op | [C] | — | + +Slots 0, 16, 17, 23, 25–32, 34–39, 41, 42, 45 are the shared +`ProcNotImplemented` stub (`0x64C3C`), unchanged from pass 1. + +--- + +## 4. The session quartet (slots 1–4) [C]/[I] + +Everything hangs off two globals: + +* `0x1AD920` — a session counter. `XieExtensionInit` zeroes it + (`rom:00064b18 MOVE A9,@0x1ad920`), slot 1 increments it, slot 2 decrements it. +* `0x1ADA70 + clientIndex*20` — a per-client record, `{u32 f0, u32 f1, u32 f2, …}`, + addressed as `idx*160 bits` (`SLL 0x7` + `SLL 0x5` + `ADD`). + +### slot 1 — INIT_SESSION (0x68A4C) + +``` +rom:00068a60 MOVE *A9(0x10),A11,0x0 ; stuff->length +rom:00068a64 SUBK 0x2,A11 +rom:00068a66 JREQ 0x00068a6e ; must be 2 words +rom:00068a68 MOVK 0x10,A8 ; else BadLength +... +rom:00068c6e MOVE *A9(0x20),A5,0x0 ; request word 1, low u16 +rom:00068c72 SUBK 0x2,A5 ; == 2 ? +rom:00068c76 MOVE *A9(0x30),A5,0x0 ; request word 1, high u16 +rom:00068c7a SUBK 0x3,A5 ; == 3 ? +rom:00068c84 MOVB *A5,*A13(0x128) ; per-client "client speaks 2.3" flag +rom:00068c94 MOVE A5,*A13(0x140),0x1 ; reply.length = 8 +rom:00068c9a MOVE A7,*A13(0x160),0x0 ; majorVersion = 2 +rom:00068ca0 MOVE A5,*A13(0x170),0x0 ; minorVersion = 3 +rom:00068d16 MOVE @0x1ad920,A7,0x1 +rom:00068d1c INC A7 +rom:00068d1e MOVE A7,@0x1ad920,0x1 ; session count++ +``` + +The per-client initialisation (gated by the `{2,3}` compare) writes +`rec.f0 = 0`, `rec.f1 = 2`, `rec.f2 = 0x100` (`rom:00068cc2`/`0x68cda`/`0x68d04`). + +### slot 2 — TERM_SESSION (0x68DA6), the whole body + +``` +rom:00068da6 MMTM SP,0x154 +rom:00068daa MOVE A14,A13 +rom:00068dac MOVE *A13(0xffe0),A11,0x1 +rom:00068db0 MOVE *A11(0x40),A9,0x1 ; stuff +rom:00068db4 SETF 0x10,0x0,0x0 +rom:00068db6 MOVE *A9(0x10),A11,0x0 ; stuff->length +rom:00068dba DEC A11 +rom:00068dbc JREQ 0x00068dc2 ; must be 1 word +rom:00068dbe MOVK 0x10,A8 +rom:00068dc0 JR 0x00068dd2 +rom:00068dc2 MOVE @0x1ad920,A11,0x1 +rom:00068dc8 DEC A11 +rom:00068dca MOVE A11,@0x1ad920,0x1 ; session count-- +rom:00068dcc SUB A8,A8 ; Success, and nothing is written back +``` + +That is the entire function: no reply, no resource work. The wire agrees — +`minor 2, 1 word` produces **no packet at all** (§10). + +### slot 3 — QUERY_OP_DEFAULTS (0x3FD78) + +``` +rom:0003fd90 SUBK 0x2,A11 / JREQ ; 2 words +rom:0003fd98 MOVK 0x1,A11 +rom:0003fd9a MOVB A11,*A13 ; reply.type = 1 +rom:0003fd9e MOVE A7,*A13(0x20),0x1 ; reply word 1 = 0 +rom:0003fda6 MOVE *A5(0xe0),*A13(0x10),0x0 ; reply word 0 low half <- client->0xe0 +rom:0003fdb6 ADDI 0x1ada70,A5 ; per-client record +rom:0003fdbc MOVE *A5(0x0),*A13(0x40),0x1 ; reply word 2 <- rec.f0 +rom:0003fdf4 CALLA 0x07e6a422 ; WriteToClient (or the 0xD4B10 swapper) +``` + +The request's second word is never read — only `length` is. Live reply: + +``` +minor 3, 2 words: 01 41 03 00 | 00 00 00 00 | 00000000 00000000 14000000 +``` + +i.e. `type=1, data=0x41, length=0`, then three fixed words with the third = `0x14` +(20). It is a small "what are the defaults" answer: 0, 0, 20 — 20 is a plausible +default bits/pixel or tile row count for a 1-bit terminal. + +### slot 4 — SET_OP_DEFAULTS (0x3FE06), the whole body + +``` +rom:0003fe16 MOVE *A9(0x10),A11,0x0 / SUBK 0x2 / JREQ ; 2 words +rom:0003fe26 MOVE *A11,A7,0x1 ; client +rom:0003fe2a SLL 0x7,A7 / SLL 0x5,A5 ; idx*160 bits = 20 bytes +rom:0003fe30 ADDI 0x1ada70,A7 +rom:0003fe36 MOVE *A9(0x20),*A7(0x0),0x1 ; rec.f0 <- request word 1 +rom:0003fe3c SUB A8,A8 ; Success +``` + +Write-only, no reply, sets exactly the field that slot 3 reads back. Live: no +packet (wire shows TIMEOUT because there is nothing to read), and the server +stays healthy. + +**Verdict on the pass-1 hypothesis**: slot 2 *is* a session teardown and slot 1 +*is* a session init/query — but they are not "init/query" in the 5.0 sense of a +pure query; slot 1 owns per-client state and a counter, and slot 2 releases it. +Confirmed. + +--- + +## 5. Slots 5 and 6 + +### slot 5 — a mode-selecting setter (0x68DDC) + +``` +rom:00068ddc ... SUBK 0x5,A11 / JREQ ; exactly 5 words +rom:00068de? SETF 0x8,0x0,0x0 +rom:00068de? MOVE *A9(0x20),A11,0x0 ; request byte 4 (8-bit) +rom:00068de? SUBK 0x2,A11 +``` + +Byte 4 must be `2`; anything else falls through to the error path. Live, with +byte 4 = 2 and the rest zero: + +``` +minor 5, 5 words (byte4=2): ERROR code=2 (BadValue) bad=0x0 minor_op=5 +minor 5, 1 word : BadLength +``` + +So slot 5 both *validates* a mode byte and then refuses the (zero) parameters +with `BadValue`. Its length (5 words = 20 bytes) and a mode selector is a good +fit for `XIEP_SET_TRANSPORT` ("Establishes the required transport context +information", with the "does not support a DCT compression scheme" restriction +explaining the mode check). Marked [I]. + +### slot 6 — an argless query with a reply (0x68EC6) + +``` +rom:00068eda MOVE *A9(0x10),A11,0x0 / DEC / JREQ ; exactly 1 word +rom:00068ee6 MOVK 0x1,A11 / MOVB A11,*A13 ; reply.type = 1 +rom:00068ef4 MOVE *A5(0xe0),*A13(0x10),0x0 ; <- client->0xe0 +rom:00068f14 CALLA 0x07ea8f38 ; fill +rom:00068f26 CALLA 0x07e6a422 ; write reply +``` + +Live (1 word): + +``` +minor 6: 01 00 04 00 | 00000000 | 02000000 01000000 01000000 01000000 +``` + +Four small words after the header — `2, 1, 1, 1`. With three events registered +(§9) this reads as "event selection state". DEC's Table C-1 has exactly one +argless query in Process Control (`XIEP_QUERY_EVENTS`, "Queries which events the +client will be notified of"). Marked [I] — a colour-list-style query would fit +the shape too, but the reply `2,1,1,1` is event-like, not a list of resource ids. + +--- + +## 6. The multi-operation classes: slots 7, 8, 10 [C] + +These three do not implement one operation — they **switch on a 32-bit operation +code at request byte 4** and tail-call a sub-handler. This is the single most +important structural finding of this pass: several "requests" in the 2.3 table +are whole classes. + +### slot 7 — two operations (0x66866) + +``` +rom:00066878 MOVE *A9(0x10),A11,0x0 / SUBK 0x4 / JREQ ; 4 words +rom:000668ca MOVE *A9(0x20),A8,0x1 ; A8 = request byte 4 (32-bit read) +rom:000668ce DEC A8 +rom:000668d0 JREQ 0x00066884 ; op == 1 -> CALLA 0x07ea742c +rom:000668d2 DEC A8 +rom:000668d4 JREQ 0x00066894 ; op == 2 -> CALLA 0x07ea759a +rom:000668d6 JR 0x000668a4 ; else -> SendError(BadRequest, stuff->8) +``` + +`0x6742C` (op 1) re-checks `length == 4`, then resolves a photo resource: + +``` +rom:0006744e MOVE A14,-*SP,0x1 +rom:00067450 MOVE *A9(0x40),*A14+,0x1 ; arg = request byte 8 +rom:00067454 MOVE *A9(0x60),*A14+,0x1 ; arg = request byte 12 +rom:0006745c MOVE A11,*A14+,0x1 +rom:00067460 MOVE A7,*A14+,0x1 +rom:00067462 MOVE *A13(0xffe0),*A14+,0x1 +rom:00067466 CALLA 0x07ea6fa0 ; LookupPhotos(...) +rom:00067472 JRNE 0x00067590 ; error -> return it +``` + +So: **{byte 4 = operation 1|2, byte 8 = id, byte 12 = type/class}**, then the +sub-handler acts. A two-way split with an id and a class word is very naturally +the `CREATE_BY_VALUE` / `CREATE_BY_REFERENCE` pair from DEC's Resource Services. + +### slot 8 — four sub-handlers, selector 1/2/4/5/6 (0x668E4) + +`SUBK 0x3 / JRNC` (≥3 words), then a decrement chain on the byte-4 word: + +``` +rom:00066968 MOVE *A9(0x20),A8,0x1 ; operation word +rom:0006696c DEC A8 / JREQ 0x00066912 ; op 1 +rom:00066970 DEC A8 / JREQ 0x00066912 ; op 2 (same handler as 1) +rom:00066974 SUBK 0x2,A8 / JREQ 0x00066902 ; op 4 +rom:00066978 DEC A8 / JREQ 0x00066922 ; op 5 +rom:0006697c DEC A8 / JREQ 0x00066932 ; op 6 +rom:00066980 JR 0x00066942 ; anything else -> BadRequest +``` + +Four distinct `CALLA` targets (`0x676CA`, `0x677DA`, `0x67B46`, `0x67DA8`), +all in the same `0x67xxx` resource-management block as slot 7's sub-handlers. +Op 3 is not accepted — an opcode hole worth remembering when probing. + +### slot 10 — five operations **and** a reply (0x66B64) + +``` +rom:00066b76 MOVE *A9(0x10),A11,0x0 / SUBK 0x3 / JREQ ; 3 words +rom:00066bf8 MOVE *A9(0x20),A8,0x1 ; operation word +rom:00066bfc DEC A8 +rom:00066bfe CMPI 0x5,A8 +rom:00066c02 JRHI 0x00066bd2 ; op > 5 -> SendError(BadRequest) +rom:00066c04 SLL 0x5,A8 ; *32 bits = 4-byte stride +rom:00066c06 ADDI 0x3f536080,A8 ; jump table at file 0x66C10 +rom:00066c0c MOVE *A8,A8,0x1 +rom:00066c0e JUMP A8 +``` + +Sub-handlers: `0x683A4`, `0x68462`, `0x68516`, `0x68660`, `0x6872A`. Op 1 +(`0x683A4`) calls the resource helper `0x66E70` with `(client, &local, +request byte 8, 4)` and then builds a reply: + +``` +rom:000683b8 MOVK 0x4,A7 +rom:000683ba MOVE A7,*A14+,0x1 ; arg = 4 +rom:000683bc MOVE *A9(0x40),*A14+,0x1 ; arg = request byte 8 +rom:000683c2 MOVE A11,*A14+,0x1 +rom:000683c4 CALLA 0x07ea6e70 ; resource create/lookup +rom:000683d2 MOVK 0x1,A7 / MOVB *A7,*A13(0x20) ; reply.type = 1 +rom:000683e4 MOVE *A5(0xe0),*A13(0x30),0x0 ; <- client->0xe0 +``` + +Live, with byte 8 = `0x2222` and op 1…5: **`BadRequest` for every op** — the +third word is rejected whatever it is, so `0x2222` is not a valid id/flag there. +That is the experiment to redo with a real id (§11). + +Because only slots 1, 3, 6, 10 and 24 can reply, and slot 10 is the only +multi-operation one among them, slot 10 is the most likely home of the +**resource query** family (one operation per resource class) — marked [I]. + +--- + +## 7. The photo-resource family (11–15, 18, 22, 24, 33, 40, 43, 44) [C] + +All of these reach the same lookup helper `LookupPhotos` (`0x66FA0`), which +emits `BadIDChoice` (14) when the id is not found, and the wire confirms it: an +id of `0xffffffff` produces `code=14, bad=0xffffffff, minor_op=`. + +The call shape is uniform — the caller pushes five values and the last one is the +resource **type/class**: + +``` +slot 11 0x667d8 MOVI 0xffff ; type = 0xFFFF + 0x667de MOVE *A9(0x20) ; id = request byte 4 +slot 12 0x6675a SUB A11,A11 ; type = 0 + 0x6675e MOVE *A9(0x20) ; id +slot 13 0x66ab0 MOVI 0xffff ; type = 0xFFFF +slot 14 0x66c58 MOVI 0xffff ; type = 0xFFFF +slot 21 0x62d64 SUB A11,A11 ; type = 0 +slot 22 0x63116 SUB A11,A11 ; type = 0 +slot 24 0x63182 SUB A11,A11 ; type = 0 +slot 33/40/44 MOVE *A9(0x40) first ; type = request byte 8 (client-chosen) +slot 43 MOVE *A9(0x40) first ; type = request byte 8 +``` + +So 2.3 has a *generic photo handle*: `{id at byte 4, class at byte 8}`. Slots +33/40/43/44 let the client name the class explicitly; slots 11–15/21/22/24 have +it hard-coded (`0xFFFF` = any). That is why they all answer `BadIDChoice` +identically: they are all "operate on photo resource ". + +Which operation each one performs is still open. The discriminators that survive: + +* **24** is the only one of the family with a reply → it is the **query** + (`QueryPhotomap`/`QueryPhotoflo` analogue) [C]. +* **12** and **22** are the smallest (2 words, id only) → the **delete** family + (`DeleteResource` / `FreeExport`) [I]. +* **14** (4 words, id + two more fields) and **11** (3 words) take extra + parameters → mutating operations [I]. + +The 2.3 lengths are consistently longer than 5.0's for the same operations +(11: 3 vs 2, 24: 4 vs 3), matching the pass-1 finding. + +--- + +## 8. Large / data-carrying requests: 19, 20, 21, 43 + +| slot | words | read fields (bytes) | what the shape says | +|---|---|---|---| +| 19 | ≥8 | 4, 8, 12, 16, 20, 24, 28 | a fixed header followed by a counted list — `PUT_TILE` / `PUT_STREAM` (transport) or a photoflo element list | +| 20 | **exactly 35** | 4, 8, 12, 13, 14, 16 | fixed-size definition: 35 words is too rigid for a data stream, so it is a *definition* record (`CREATE_PHOTOFLO` or `EXECUTE_PHOTOFLO` with a fixed element block) | +| 21 | 16 | 4, 16, 20, 24, 28, 32, 36 | resource op with a parameters block | +| 43 | 10 | 4, 8, 20, 24 | photo op with two ids and trailing words | + +Slot 20's `MOVK 0x19` (25) written into a local before the length check +(`rom:0006aa5e`) gives it a 25-element notion; combined with 35 words = +4 header + 31 payload words it looks like "one fixed-size element descriptor". +Marked [I]. + +**Slot 19 is the best `PUT_STREAM`/`PUT_TILE` candidate** (≥8 words, a counted +list, and it is one of only three slots with an "at least" length check, which +is what a data-carrying request needs). Not confirmed. + +--- + +## 9. The export path and the three events + +**Export.** DEC's Table C-1 says `XIEP_EXPORT` "Creates a new server PIXMAP +resource object" and `XIEP_QUERY_EXPORT` "Queries the export context". In the +ROM, the only slots that can both take an id and reply are 10 and 24, and slot 10 +is the five-operation class. So the export path is almost certainly **slot 10 +(one of its five operations), with the reply carrying the export context**, but +I could not pin which operation [U]. No slot was found that reads a `Drawable` +or `Pixmap` XID directly at a fixed offset; the drawable is most likely inside +the parameter block of slot 10 or 21 (both read a run of 32-bit words at +bytes 16..40) [U]. + +**Events.** `NumEvents = 3` (pass 1, `0x64AC4`). The three event numbers are +`first_event .. first_event+2` = 64, 65, 66 on the live server. Slot 6's reply +(`2, 1, 1, 1`) is the only event-shaped data in the table, and DEC's Process +Control group has `SELECT_EVENTS` (setter) and `QUERY_EVENTS` (argless query). +The natural pairing is slot 6 = QUERY_EVENTS and a setter elsewhere — the best +setter candidate is **slot 5** (mode byte + parameters, BadValue on bad values) +[I]. No slot was found that reads an event *mask of three bits* explicitly [U]. + +--- + +## 10. Minimal 2.3 client — the part that is verified [C] + +Everything below was executed against the live server in one connection +(`/tmp/opencode/xie_min_client.py`; transcript in the evidence folder). It is +a complete, working session lifecycle. + +``` +1. XConnSetup l 11.0 +2. QueryExtension "Xie" -> present=1 opcode=129 first_event=64 +3. minor 1, length 2, payload 02 00 03 00 (declare "I speak 2.3") + -> REPLY len=8 + 01 01 08 00 00 00 | 02 00 | 03 00 | <4 words> | ... + ^type ^data ^length=8 ^major ^minor +4. minor 3, length 2, payload 00 00 00 00 (QueryOpDefaults) + -> REPLY len=0 + 01 41 00 00 00 00 | 00000000 | 00000000 | 14000000 +5. minor 6, length 1 (QueryEvents) + -> REPLY len=0 + 01 00 00 00 00 00 | 00000000 | 02000000 | 01000000 | 01000000 | 01000000 +6. minor 2, length 1 (TermSession) + -> no packet at all; close the connection +``` + +Notes that matter for a client author: + +* The request header is the normal X11 one: `reqType=129, opcode=minor, + length=, LE`. `length` is checked by every handler. +* **Every reply carries `length` in words after the 32-byte header**, and for + minor 1 that is 8 — i.e. the reply is 64 bytes; the eight "levels" words are + the tail. Only `major = 2` and `minor = 3` (reply bytes 8..11) were stable + across every run. The words after them were **not**: three separate runs gave + `20 00 00 00 / e0 56 41 00 …`, the same, and `f0 9b 7c 00 / 70 db 20 00 / + 05 00 00 00 …`. So a 5.0 client that parses the tail as + `xieQueryImageExtensionReply` is reading per-connection values, not a stable + capability record. (Transcripts: `handlers/client_session.txt`.) +* A client that speaks 5.0 must **not** expect a reply to minor 2; the server + returns `Success` and sends nothing. + +The verification transcript is `xie/ghidra-evidence/handlers/client_session.txt`. + +--- + +## 11. What is still missing, and the exact probes that would settle it + +> **See `GHIDRA_XIE_IMAGE_PATH.md`** (third pass) for the request field maps +> recovered from the byte-swap stubs, slot 19 identified as the tile-put +> (`{id,x,y,w,h,count}` + payload), and the ranked create→put→export sequence. + + +Static analysis is exhausted for the resource/transport/process half: the +handlers delegate to a shared resource manager whose class codes are passed as +arguments, and those arguments are client data. The following matrix is +ordered so that each step's result disambiguates the next. + +| # | probe | what a positive result means | +|---|---|---| +| 1 | slot **4**, 2 words, word1 = `0x00000010`; then slot **3** | if slot 3's reply word 2 becomes `0x10`, slot 4 is confirmed as SET_OP_DEFAULTS and slot 3 as QUERY_OP_DEFAULTS | +| 2 | slot **6** after step 1 | if the reply changes with slot 4/5 parameters, slot 6 is QUERY_EVENTS tied to those defaults | +| 3 | slot **7**, 4 words: `op=1, id=0x00AAAAAA, class=0xFFFF` | Success ⇒ slot 7 op 1 *creates* a photo resource (CREATE_BY_VALUE); then step 4 | +| 4 | slots **11,12,13,15,22,24,33** with id `0x00AAAAAA` | the one that stops answering `BadIDChoice` and answers something else is that resource's query/delete — this maps the family in one sweep | +| 5 | slot **24**, 4 words, `id=0x00AAAAAA, 0, 0` | if it replies now, slot 24 is QUERY_RESOURCE and the reply bytes give the 2.3 resource record layout | +| 6 | slot **10**, 3 words, `op=1..5, word2 = ` | the op that replies is the export/query op; the reply bytes give the export context | +| 7 | slot **19**, 8 words, zeros except a small count at byte 4 | if it accepts, it is the data-transport request; vary byte 4 to find the count field | +| 8 | slot **20**, 35 words, zeros | if it accepts, it is the fixed-size photoflo definition; the error value on failure names the offending field | + +Each probe is a single request on its own connection, preceded by minor 1 +(otherwise the per-client record is not initialised). Anything that creates a +resource must be followed by the delete candidate from step 4 on the same +connection. + +Two cheap cross-checks that would also help: + +* `strings` in the sibling ROMs / DEC client kits for `XIEP_` orderings — the + manual's Table C-1 groups functions but does not prove opcode order. +* A byte-swapped (big-endian) connection: `XieSProc` indexes the `0x18D9A6` + table, whose stubs swap a *fixed* set of words per request. Reading stub + `0x697xx` for a slot enumerates exactly which request words the server treats + as 32-bit values — a ready-made field map for every slot. That is the single + highest-value follow-up and it is pure ROM reading. + +--- + +## 12. Confirmed / Inferred / Unknown + +**Confirmed** + +1. Three pointer tables (proc / swapped-proc / reply-swap) at RAM `0xD3F90`, + `0xD4550`, `0xD4B10`; the reply-swap table has entries only for slots + 1, 3, 6, 10, 24. *(Corrects GHIDRA_XIE.md §3/§6.1.)* +2. Slot 1 = INIT_SESSION ≡ QueryImageExtension (2 words, 64-byte reply, + major 2 / minor 3, increments `0x1AD920`), slot 2 = TERM_SESSION (1 word, + decrements it, no reply). +3. Slot 3 reads the per-client record and replies; slot 4 writes the same field. + Together with 1/2 they form DEC's four Session Services. +4. Slots 7, 8, 10 switch on a 32-bit operation word at request byte 4 + (2, 4 and 5 sub-handlers; jump table at file `0x66C10` for slot 10). +5. Slots 11, 12, 13, 14, 15, 22, 24, 33, 40, 44 all resolve a photo resource + through `LookupPhotos` and answer `BadIDChoice` for a bad id; slots + 33/40/43/44 take the class from the request (byte 8), the others hard-code it. +6. Slot 5 requires byte 4 = 2 and then answers `BadValue` for zeroed parameters; + slot 6 is argless and replies with `2,1,1,1`. + +**Inferred** + +1. Names QUERY_OP_DEFAULTS (3), SET_OP_DEFAULTS (4), QUERY_EVENTS (6), + SET_TRANSPORT (5). +2. Slot 7 = create-by-value / create-by-reference pair. +3. Slot 10 hosts the resource-query/export family (5 classes). +4. Slot 12 and 22 are the delete family. +5. Slot 19 is a transport data request, slot 20 a fixed-size photoflo definition. + +**Unknown** + +1. Which of slots 11/13/14/15/18/21/24/33/40/43/44 does which resource + operation, and which resource class each hard-coded type code means. +2. The 2.3 request layouts for the create/delete/query parameter blocks beyond + the id/class words. +3. How the export path names its drawable/pixmap. +4. Whether slot 6 is QUERY_EVENTS or a colour-list query (the reply is + event-shaped, but no slot was found that sets an event mask). +5. What the 8 trailing words of the minor-1 reply mean. +6. Slot 20's 35-word layout. + +--- + +## 13. Reproduction + +1. `program_list_open` → session `afdab6e16b8240f294d45a5309f7caa3` + (already writable; no re-import needed). +2. Per-slot listings are pre-extracted in `xie/ghidra-evidence/handlers/` + (`slotNN_HHHHHH.txt`, from each handler's Ghidra *function body*). + To regenerate: + + ```python + f = program.getFunctionManager().getFunctionAt(addr(0x68A4C)) + [print(i.getAddress(), i) for i in program.getListing().getInstructions(f.getBody(), True)] + ``` + +3. Reply-swap table: + + ```python + import jpype, struct + a = jpype.JArray(jpype.JByte)(0x1c0000); program.getMemory().getBytes(program.getMinAddress(), a) + d = bytes((b & 0xff) for b in a) + [hex(struct.unpack_from(" **See `GHIDRA_XIE_PIPELINE.md`** (final pass): the BadMatch gate is +> resource byte 5 bit 0, set from the create request's level word at byte 28; +> with a non-zero level entry the create (slot 8 op 2) produces an exportable +> class-2 resource. Exact 12/8/16-word payloads are there. + + +Third pass. Program `vt1200_v22.bin` (md5 `b46a3e442ccb86134d2356bd70d22fd2`). +**The Ghidra session from passes 1–2 is gone**; I re-opened the ROM and this +report's addresses come from the new session +`a03f3d788b874b1a976a55417ab9f2d3` (same program, same base `rom:00000000`, +same language `tms34010:LE:32:default`). All addresses are file/byte offsets, so +they are identical to the earlier reports; `mame_bit = 0x3F200000 + off*8`. + +New raw material: `xie/ghidra-evidence/image_path/swapper_slotNN_HHHHHH.txt` — +the 24 request byte-swappers, one per implemented slot. **These give the exact +32-bit field map of every request**, which is the main new evidence here. + +Read with passes 1 and 2 (`GHIDRA_XIE.md`, `GHIDRA_XIE_HANDLERS.md`). + +--- + +## 1. Executive summary + +**Nothing in the ROM creates an image resource through a plain single-id +request.** Every 2-word and 3-word resource slot (11, 12, 13, 15, 22, 24, 33, +40, 44) begins with `LookupPhotos` and answers `BadIDChoice` for an unused id — +that was measured on the wire in pass 2 and it is confirmed structurally here. +Creation must therefore live inside the **multi-operation classes 7, 8, 10**, and +those are the only slots whose selector semantics are still open. + +What *is* now nailed down: + +* **Request field maps for all 25 slots**, from the byte-swappers (§3). Slots + 7, 9 and 10 carry nothing but 32-bit words; slots 12 and 22 are literally + `{header, id}`. +* **Slot 19 is the tile-put request.** It clamps (x, y), adds (w, h) to get the + right/bottom edges, rejects a fully clipped rectangle with `BadValue`, + iterates `count` elements writing x and y into per-element records, and uses + the request tail as pixel data. Layout: `{id@4, x@8, y@12, w@16, h@20, + count@24}` + payload (§4). This is DEC's `XIEP_PUT_TILE` + ("Transports random tiles of uncompressed image data from the client to the + server") — confidence **high** on structure, **medium** on the name. +* **Slot 21 is the export candidate**: 16 words, `{id@4, then ten 32-bit words at + 8…44, two 16-bit sub-words}`, and it starts by resolving the id through + `LookupPhotos` — i.e. "take this image resource and produce something from + it". DEC: `XIEP_EXPORT` "Creates a new server PIXMAP resource object". +* **Slots 20 and 43** are the only ones shaped like a *fixed* descriptor + (35 words / 10 words); slot 20 additionally seeds a 25-element notion. + +**The biggest blocker** is a single missing fact: **which request creates the +image resource, and what class code it wants.** Without it nothing can be put or +exported. Second blocker: whether the export targets a client-created Pixmap +(5.0 model) or creates one itself (DEC wording). §7 gives the exact probes that +settle both in four requests. + +--- + +## 2. Slot table — resource / transport / export family + +"fields" is the set of 32-bit request words proven by the byte-swapper (`w` = +word index, byte offset = 4×w), so it is the *wire* layout, not an inference. + +| slot | best name | conf | 5.0 / DEC counterpart | words | 32-bit fields (byte off) | reply | +|---|---|---|---|---|---|---| +| 7 | **resource create class** — op 1/2 = create-by-value / by-reference | [I] | `XIEP_CREATE_BY_VALUE`, `XIEP_CREATE_BY_REFERENCE` | 4 | 4 (op), 8 (id), 12 (class) | no | +| 8 | resource class, 4 sub-handlers (ops 1,2,4,5,6) | [I] | resource services | ≥3 | 4, 8, 12, 16, 20 | no | +| 9 | 3-word op on a resource | [U] | — | 3 | 4, 8 | no | +| 10 | 5-operation class (query/export shaped) | [I] | `XIEP_QUERY_RESOURCE` / `XIEP_QUERY_EXPORT` / `XIEP_EXPORT` | 3 | 4 (op), 8 | **yes** | +| 11 | resource op with a second parameter | [U] | — | 3 | 4, 8 | no | +| 12 | **delete / free** (id only) | [I] | `XIEP_DELETE_RESOURCE`, `XIEP_FREE_EXPORT` | 2 | 4 | no | +| 13 | delete / free (id only) | [I] | as above | 2 | 4 | no | +| 14 | resource op, id + one long + two half-words | [U] | — | 4 | 4, 8 | no | +| 15 | pipeline op (photoflo family) | [U] | `XIEP_BIND_PHOTOFLO`? | 3 | 4, 8 | no | +| 18 | pipeline op | [U] | `XIEP_EXECUTE_PHOTOFLO`? | ≥4 | 4, 8 | no | +| 19 | **PUT_TILE** — x/y/w/h + counted payload | [C] structure | `XIEP_PUT_TILE` | ≥8 + data | 4, 8, 12, 16, 20, 24 | no | +| 20 | fixed descriptor (photoflo definition) | [I] | `XIEP_EXECUTE_PHOTOFLO` / `CREATE_PHOTOFLO` | 35 | 4, 8, 16 (+16-bit at 12) | no | +| 21 | **EXPORT** — id + big parameter block | [I] | `XIEP_EXPORT` | 16 | 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44 | no | +| 22 | **delete / free** (id only) | [I] | `XIEP_DELETE_RESOURCE` | 2 | 4 | no | +| 24 | **QUERY_RESOURCE** (only photo slot with a reply) | [C] | `XIEP_QUERY_RESOURCE` | 4 | 4, 8 (+16-bit at 12) | **yes** | +| 33 | generic photo op, class from the request | [I] | `XIEP_QUERY_EXPORT`? | 4 | 4 (id), 8 (class), 12 | no | +| 40 | generic photo op, class from the request | [I] | — | 4 | 4, 8 | no | +| 43 | large photo op (10 words) | [U] | `XIEP_PUT_STREAM`? | 10 | 4, 8, 16, 20, 24 (+ one 16-bit field near 14) | no | +| 44 | generic photo op, class from the request | [I] | — | 5 | 4, 8, 12, 16 | no | + +Session slots (1–6) are unchanged from pass 2: 1 `INIT_SESSION`, 2 +`TERM_SESSION`, 3 `QUERY_OP_DEFAULTS`, 4 `SET_OP_DEFAULTS`, 5 mode-selecting +setter, 6 `QUERY_EVENTS`. + +--- + +## 3. How the field maps were recovered [C] + +For a byte-swapped client, `XieSProc` calls the per-slot stub; each stub +byte-swaps `stuff->length` and then every 32-bit request word in place, then +re-dispatches into `XieProc`. One 32-bit word at byte *B* produces three `MOVB` +instructions: + +``` +rom:00069c04 MMTM SP,0x74 ; slot 11's swapper +rom:00069c0a MOVE *A13(0xffe0),A11,0x1 +rom:00069c0e MOVE *A11(0x40),A10,0x1 ; stuff +rom:00069c12 MOVB *A10(0x10),*A9 ; ---- swap stuff->length +rom:00069c16 MOVB *A10(0x18),*A10(0x10) +rom:00069c1c MOVB *A9,*A10(0x18) +rom:00069c20 MOVB *A10(0x20),*A9 ; ---- word at byte 4 +rom:00069c24 MOVB *A10(0x38),*A10(0x20) +rom:00069c2a MOVB *A9,*A10(0x38) +rom:00069c2e MOVB *A10(0x28),*A9 ; (bytes 5/6 of the same word) +rom:00069c32 MOVB *A10(0x30),*A10(0x28) +rom:00069c38 MOVB *A9,*A10(0x30) +rom:00069c3c MOVB *A10(0x40),*A9 ; ---- word at byte 8 +... +rom:00069c5e MOVE *A10(0x8),A11,0x0 ; minor opcode +rom:00069c64 ADDI 0xd3f90,A11 ; -> XieProc's proc table +``` + +Applied to all 24 stubs, the swapped-word sets are: + +| slot | 32-bit words at byte | reading | +|---|---|---| +| 1 | — (16-bit at 4 and 6 only) | version pair `{major, minor}` | +| 2 | — | no arguments at all | +| 3 | 4 | one 32-bit argument (the 2.3 handler ignores it) | +| 4 | 4 | one 32-bit value → per-client record | +| 5 | — | every argument is ≤16 bits | +| 7 | 4, 8, 12 | `{op, id, class}` | +| 8 | 4, 8, 12, 16, 20 | parameter run | +| 9, 10 | 4, 8 | `{op, value}` | +| 11 | 4, 8 | `{id, param}` | +| 12, 13, 22 | 4 | `{id}` | +| 14 | 4, 8 | `{id, param}` + half-words | +| 15 | 4, 8 | `{a, b}` | +| 18 | 4, 8 | `{a, b}` | +| 19 | 4, 8, 12, 16, 20, 24 | `{id, x, y, w, h, count}` | +| 20 | 4, 8, 16 | plus 16-bit fields at 12 | +| 21 | 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44 | id + ten parameters | +| 24 | 4, 8 | `{id, param}` | +| 33 | 4, 8, 12 | `{id, class, param}` | +| 40 | 4, 8 | `{id, class}` | +| 43 | 4, 8, 16, 20, 24 (+16-bit at 14) | | +| 44 | 4, 8, 12, 16 | | + +This is why slots 12/13/22 are "delete shaped" and 33/40/44 are "generic photo +handle" slots: 33 passes `stuff->class` (byte 8) as the last argument to +`LookupPhotos`, so the *client* names the resource class, while 11/12/13/14/15/ +21/22/24 hard-code it (`0xFFFF` = any, or `0`). + +--- + +## 4. Slot 19 = the tile-put path [C for structure] + +Length check and the identification call: + +``` +rom:0006a782 MOVE *A9(0x10),A11,0x0 ; stuff->length +rom:0006a786 SUBK 0x8,A11 +rom:0006a788 JRNC 0x0006a790 ; length >= 8 words +rom:0006a78a MOVK 0x10,A8 ; else BadLength +rom:0006a790 MOVE A14,-*SP,0x1 +rom:0006a792 MOVE *A9(0xc0),*A14+,0x1 ; arg = stuff word @ byte 24 +rom:0006a796 MOVK 0x3,A11 +rom:0006a798 MOVE A11,*A14+,0x1 ; arg = 3 +rom:0006a79a MOVE *A9(0x20),*A14+,0x1 ; arg = id @ byte 4 +rom:0006a7a2 MOVE A7,*A14+,0x1 +rom:0006a7aa MOVE *A13(0xffe0),*A14+,0x1 +rom:0006a7ae CALLA 0x07eab966 ; 0x6B966 (pipeline attach, arg 3) +``` + +Then the rectangle algebra, which is what makes this the put path: + +``` +rom:0006a7be MOVE *A9(0x40),A11,0x1 ; w1 = x (byte 8) +rom:0006a7c2 JRLE 0x0006a7ca ; clamp to 0 +rom:0006a7cc MOVE A11,*A13(0x80) ; local x +rom:0006a7d0 MOVE *A9(0x60),A7,0x1 ; w2 = y (byte 12) +rom:0006a7de MOVE A7,*A13(0xa0) ; local y +rom:0006a7e2 MOVE *A9(0x80),A7,0x1 ; w3 = width (byte 16) +rom:0006a7e6 MOVE *A9(0x40),A5,0x1 ; + x +rom:0006a7ea ADD A5,A7 +rom:0006a7ee MOVE *A5(0x80),A5,0x1 ; compare with dst width -> clip +... +rom:0006a812 MOVE *A9(0xa0),A7,0x1 ; w4 = height (byte 20) +rom:0006a816 MOVE *A9(0x60),A5,0x1 ; + y -> clip +... +rom:0006a84e JRLE 0x0006a854 +rom:0006a850 MOVE A5,A8 +rom:0006a852 JRGT 0x0006a87c ; rectangle non-empty -> go on +rom:0006a856 MOVK 0x2,A5 ; else error 2 = BadValue +rom:0006a85a MOVE *A9(0x20),*A14+,0x1 ; (client, major, minor, id, 2) +rom:0006a870 CALLA 0x07effa5e ; SendErrorToClient +``` + +and the payload loop: + +``` +rom:0006a88c MOVE *A9(0xc0),*A13(0x40) ; loop counter = word @ byte 24 +rom:0006a896 JREQ 0x0006aa28 ; zero elements -> skip +rom:0006a89e BTST 0x0,A11 ; bit 0 of that word = direction/flag +rom:0006a8ac SLL 0x5,A5 ; element stride 32 bits +rom:0006a8b0 MOVE *A5(0x160),A5,0x1 +rom:0006a8b4 MOVE *A13(0x80),*A5(0xa8),0x1 ; element.x = x +rom:0006a8c6 MOVE *A13(0xa0),*A5(0xe8),0x1 ; element.y = y +rom:0006a8d8 MOVE *A13(0x80),A7,0x1 +rom:0006a8dc MOVE *A13(0xc0),A11,0x1 +rom:0006a8e0 ADD A11,A7 ; x += width +``` + +**Layout (bytes):** `0 hdr | 4 id | 8 x | 12 y | 16 width | 20 height | +24 count | 28 two 16-bit fields (not byte-swapped as a long) | 32… payload`. +Minimum length 8 words = 32 bytes, i.e. header only; pixel bytes follow and are +covered by the same `length`. + +Not proven: whether `count` counts bytes, rows, or tile records, and whether the +payload is raw 1-bit rows packed 8-per-byte or bit-addressed. The `BTST 0x0` +on the same word suggests a flags/count word; the loop's stride-32-bit element +walk suggests it is a *count of tiles*, not bytes. + +--- + +## 5. Export candidates + +**Slot 21** — 16 words, resolves the id then works on it: + +``` +rom:00062d58 SUBK 0x10,A11 / JREQ ; exactly 16 words +rom:00062d68 MOVE *A9(0x20),*A14+,0x1 ; arg = id @ byte 4 +rom:00062d6c MOVE A13,A7 / MOVE A7,*A14+ ; out pointer 1 +rom:00062d72 MOVE A13,*A14+ ; out pointer 2 +rom:00062d78 CALLA 0x07ea6fa0 ; LookupPhotos(client, id, &a, &b, 0) +rom:00062d84 JRNE 0x000630ea ; lookup error -> return it +rom:00062d88 MOVE *A13(0x20),A11,0x1 ; the resolved resource +``` + +It then walks the ten 32-bit parameters at bytes 8…44. A 44-byte parameter block +after a resource id is exactly what an export descriptor looks like +(destination pixmap, x, y, w, h, visual/format, stride, flags). **[I]** + +**Slot 10** — five operations, the only multi-op slot that replies, so if 2.3 +has a "query export context" it is one of its five ops. Its request is only +three words `{op@4, value@8}`, so its ops must be id-free or take the id in +`value`. **[I]** + +**Slots 33/40/44** pass a client-chosen class to `LookupPhotos` and then a +parameter; they are the "do something to resource of class " form and +are the most likely home of export-by-class. **[I]** + +--- + +## 6. Best sequence + +Everything is little-endian; `len` is in words including the 4-byte header. +Step confidence in brackets. + +``` +[0] connect, QueryExtension("Xie") -> opcode 129 [C] + +[1] INIT_SESSION minor 1, len 2 + 02 00 03 00 (client speaks 2.3; any value accepted) + -> 64-byte reply, major 2 minor 3 [C] + +[2] CREATE RESOURCE minor 7, len 4 [I] + op = 01 00 00 00 + id = 2a 00 00 00 (0x2A = our photomap id) + class = ?? ?? ?? ?? (see probe P1) + -> expect Success (no packet). BadRequest with bad=0x2a means the + class word or op is wrong. + +[3] PUT_TILE minor 19, len 8 + payload [I-high] + 00 00 00 00 | 2a 00 00 00 | 00 00 00 00 | 00 00 00 00 | + 40 00 00 00 | 40 00 00 00 | | 00 00 00 00 | + <512 bytes of 1-bit pixel data = 128 words> + total len = 136 + -> Success, or BadValue(2) if the rectangle clips away entirely, + BadIDChoice(14) if the id did not resolve. + +[4] EXPORT minor 21, len 16 [I] + id = 2a 00 00 00, then ten parameter words (probe P2) + -> Success expected; the pixmap id is client-supplied (DEC wording) + +[5] TERM_SESSION minor 2, len 1 [C] + -> no packet; just close. +``` + +### 6.1 The 64×64 checkerboard + +64 px × 64 rows at 1 bit = 8 bytes/row = 512 bytes = 128 words. A checkerboard +of 8×8 blocks is a single repeated 32-bit pattern per byte-pair; the simplest +generator is "row r, byte b: `0xAA` if ((r/8 + b) & 1) else `0x55`". + +``` +row 0..7 : AA 55 AA 55 AA 55 AA 55 (per byte, 8 bytes) +row 8..15 : 55 AA 55 AA 55 AA 55 AA +... +``` + +Which of the two bit orders is "on" does not matter for a first display test. + +### 6.2 Shorter path, if it exists + +If `XIEP_EXPORT` really creates the pixmap itself, step [4] returns the pixmap +id in the slot-10 reply and the client can skip creating a pixmap. If instead +the 5.0 model holds, the client must first +`CreatePixmap(depth=1, 64x64)` and pass that XID in step [4]; then +`XCopyArea(pixmap -> window)` displays it. Both variants use the same four +XIE requests; only the pixmap's origin differs. + +--- + +## 7. Probes that settle the open fields (for the worker with server access) + +Each probe is one connection: INIT (minor 1) → probe → TERM (minor 2). + +| id | request | variants | observation | +|---|---|---|---| +| P1 | create: minor 7, len 4, `{op, id=0x2A, class}` | class ∈ {0, 1, 2, 3, 4}, op ∈ {1, 2} | the pair that returns **Success** is create + the image class. `BadRequest` (code 1) with `bad=0x2a` ⇒ id rejected; `BadIDChoice` (14) ⇒ op is a lookup, not a create | +| P2 | export: minor 21, len 16, `{id=0x2A, …}` | zero-fill the ten parameters, then vary word at byte 8 (likely the destination pixmap or a format) | `BadIDChoice` ⇒ slot 21 is not the export from this id; Success ⇒ export, and the reply/absence of a reply tells whether the pixmap comes from the client | +| P3 | put: minor 19, len 8 (header only, no data) and len 136 with a checkerboard | count word at byte 24 ∈ {1, 64, 128, 512} | Success on the first, and `BadValue` on a zero-size rect, confirms the geometry; a length-related error identifies the count unit | +| P4 | query after put: minor 24, len 4, `{id=0x2A, 0}` | — | a reply whose words change after P3 proves the data landed (the only photo slot that can reply) | +| P5 | delete: minor 12 and 22, len 2, `{id=0x2A}` | — | whichever returns Success deletes the resource (the other is `FREE_EXPORT`) | + +Order matters: P1 first (nothing else can work without a resource), then P3, +then P4 to prove the pixels landed, then P2. + +--- + +## 8. Server-side constraints visible in the ROM + +* **Every handler checks `stuff->length` exactly** (or `>=` for 8, 18, 19); a + wrong length always yields `BadLength` (16) with `minor_op = 0` (pass 1 §7). + A 2.3 client must therefore get every length exactly right. +* Slot 19's clipping uses the *destination* resource's width/height read from + the resolved resource record (`*A5(0x80)`, `*A5(0xa0)`), so the image resource + must carry real dimensions before a put. That is the strongest argument that + the create step (P1) supplies width/height somewhere — note slot 7's request + is only `{op, id, class}`, so dimensions most likely come from **slot 8 or 21** + rather than 7. **This is the main open risk in the sequence above.** +* Slot 19 rejects a fully clipped rectangle with `BadValue` (2) and a bad id + with `BadIDChoice` (14), both carrying the real minor opcode. +* Export target type (Pixmap vs Window) is not visible in any handler I read; + DEC's manual says a *PIXMAP* resource is created. **[U]** +* 1-bit only: the terminal is `StaticGray`, effective depth 1 (live probe), and + DEC's restrictions say "resource-manipulation parameter values are restricted + to those compatible with bitonal images". + +--- + +## 9. Why this should display + +`XIE 2.3` on this server is the DEC/AGE-Logic image pipeline: a resource is +created and filled by transport (`PUT_TILE`), then *exported* into a pixmap the +X server owns. Once the pixels are in a pixmap, an ordinary X client can +`XCopyArea` them into the Terminal Manager's window — no XIE involvement after +the export. The three steps map one-to-one onto DEC's documented functions +(`XIEP_CREATE_*` → `XIEP_PUT_TILE` → `XIEP_EXPORT`), the field maps come from the +server's own byte-swappers rather than from guesswork, and slot 19's geometry +code is unmistakably a clipped rectangle blit. The uncertainty is in *which* +slot implements create, not in whether the pipeline exists. + +--- + +## 10. Confirmed / Inferred / Unknown + +**Confirmed** +1. Request field maps for all 25 implemented slots (§3), from the 24 byte-swap + stubs. +2. Slot 19 is a clipped-rectangle tile put with `{id, x, y, w, h, count}` and a + payload, minimum 8 words (§4). +3. Slots 12, 13 and 22 are `{header, id}` only; 11/14/15/18/24 take `{id, one + more long}`; 33 takes `{id, class, param}`. +4. Slot 21 resolves an id and then reads ten 32-bit parameters. +5. Slots 1–6 are the session/event group (pass 2). + +**Inferred** +1. Slot 7 (ops 1/2) is create-by-value / create-by-reference. +2. Slot 21 is export; slot 10 hosts query-export; 12/22 are delete/free. +3. Slot 19's `count` counts tile records, not bytes. + +**Unknown** +1. **Which slot creates the resource and where the dimensions live** — the + blocker. +2. Pixmap vs Window as the export target, and who allocates the pixmap id. +3. Whether the payload of slot 19 is packed rows or bit-addressed data. +4. The class code values (`0` vs `0xFFFF` vs a client number). + +--- + +## 11. Reproduction + +1. `program_list_open` → empty; re-open with + `program_open(path="/home/arti/code/k-space/vt1200/vt1200_v22.bin", + language="tms34010:LE:32:default", project_location=…, read_only=false)` + → session `a03f3d788b874b1a976a55417ab9f2d3`. +2. Swapper listings are pre-extracted in + `xie/ghidra-evidence/image_path/swapper_slotNN_HHHHHH.txt`. +3. Handler bodies: `xie/ghidra-evidence/handlers/slotNN_HHHHHH.txt` (pass 2). +4. To re-derive a field map, collect the `MOVB *(A10|A11)(0xNN),*A9` offsets in + a stub: a 32-bit word at byte *B* shows up as offsets `8B, 8B+8, 8B+16, + 8B+24`; the length swap is the pair at `0x10`/`0x18` and must be ignored. diff --git a/xie/GHIDRA_XIE_IMPORT.md b/xie/GHIDRA_XIE_IMPORT.md new file mode 100644 index 0000000..a5a5957 --- /dev/null +++ b/xie/GHIDRA_XIE_IMPORT.md @@ -0,0 +1,285 @@ +# XIE 2.3 — why `PUT_TILE` refuses, and what binding it wants + +> **See `GHIDRA_XIE_SLOT20.md`**: `PUT_TILE`'s payload pointer (request byte 32) +> is handed to the DD input through a transient band-record byte 5 and cleared; +> slot 20 runs the per-band DD chain over the resource's 3 bands; the band array +> (`res->0x160` → `band+0xd8`) is created by the slot-8 create path. + + +Fourth pass. Program `vt1200_v22.bin`, Ghidra session +`a03f3d788b874b1a976a55417ab9f2d3`. Addresses are file offsets; +`mame_bit = 0x3F200000 + off*8`; `CALLA` operand − `0x7E40000` = file offset. + +Read `GHIDRA_XIE_PIPELINE.md` first — it has the resource class/level model that +this pass builds on. Raw listings: `xie/ghidra-evidence/import/` +(`lookup_6B966`, `slot07_op1_6742C`, `slot07_op2_6759A`, `resource_init_6CA82`). + +**Offset convention (important).** Offsets in these listings are *bit* offsets. +`*A9(0x20)` = request byte 4; `*A11(0x120)` = resource **byte 36**; +`*A11(0x140)` = resource **byte 40**. + +--- + +## 1. The lookup helper `0x6B966` [C] + +Slot 19 calls it with seven arguments. The pushes at `0x6a790…0x6a7ae` are, in +memory order: `req[24]`, `3`, `req[4]`, `&local0`, `caller A13`, `0`, `client`, +so the C signature is: + +``` +f(client, 0, &callerFrameSlot, &local0, id, mode, band) + ^ ^ ^ ^ ^ ^ + | | | | | +-- arg6 = request byte 24 + | | | | +--------- arg5 = 3 (mode) + | | | +--------------- arg4 = request byte 4 (id) + | | +-------------------------- arg3 = &local + | +-------------------------------------------- arg2 = caller frame (out) + +----------------------------------------------------- arg1 = 0 from slot 19 +``` + +The body: + +``` +rom:0006b97c push *(0x1ad980) ; resource proc table 1 +rom:0006b984 push *(0x1ad990) ; resource proc table 2 +rom:0006b98c push arg4 ; = request byte 4 = the id +rom:0006b990 CALLA 0x07f174a4 ; lookup(id) -> 0xD74A4 +rom:0006b996 MOVE A8,*A7 ; store result through arg2 +rom:0006b99a JRNE 0x0006ba8c ; found -> class dispatch +rom:0006b99e MOVK 0xe ... ; NOT FOUND -> error 14 = BadIDChoice +``` + +Class dispatch, on **resource byte 4** (the class written by create): + +``` +rom:0006ba8c MOVE *A7,A11,0x1 +rom:0006ba90 MOVE *A11(0x20),A8,0x0 ; A8 = resource byte 4 = class +rom:0006ba94 DEC A8 / JREQ 0x0006b9c4 ; class 1 -> path A +rom:0006ba98 DEC A8 / JREQ 0x0006ba1e ; class 2 -> path B +rom:0006ba9c DEC A8 / JREQ 0x0006ba1e ; class 3 -> path B (same code) +rom:0006baa0 JR 0x0006ba66 ; anything else -> BadIDChoice +``` + +Path B (class 2 or 3) — the two gates that matter: + +``` +rom:0006ba1e MOVE *A13(0xffc0),A11,0x1 ; arg1 +rom:0006ba22 JREQ 0x0006ba32 ; slot 19 always passes 0 +rom:0006ba32 MOVE *A13(0xffa0),A7,0x1 +rom:0006ba36 MOVE *A7,A7,0x1 +rom:0006ba38 MOVE *A7(0x140),A7,0x1 ; resource byte 40 +rom:0006ba3c JREQ 0x0006baa2 ; byte40 == 0 -> continue (good) +rom:0006ba3e ... MOVK 0xe ; byte40 != 0 -> BadIDChoice (14) +``` + +``` +rom:0006baa2 MOVE *A13(0xffa0),A11,0x1 +rom:0006baa6 MOVE *A11,A7,0x1 +rom:0006baa8 MOVE *A13(0xff80),A11,0x1 ; &local0 +rom:0006baac MOVE *A7(0x120),*A11(0x0),0x1 ; local0 = resource byte 36 +rom:0006bab2 MOVE *A13(0xff20),A7,0x1 ; arg6 = band index (request byte 24) +rom:0006bab6 JRLT 0x0006babc +rom:0006bab8 MOVE *A11,A7,0x1 +rom:0006baba JRNE 0x0006baea ; byte36 != 0 -> band checks +rom:0006babc MOVE *A13(0xff20),A7,0x1 +rom:0006bac0 JRLT 0x0006bbce ; negative band -> done +rom:0006bac6 MOVK 0xa ... ; byte36 == 0 and band >= 0 -> BadAccess (10) +``` + +and the band-mask test that follows (`0x6bb1c…0x6bb48`): + +``` +rom:0006bb22 MOVK 0x1,A7 +rom:0006bb24 SLL A11,A7 ; 1 << band +rom:0006bb2c MOVE *A11(0x60),A11,0x1 ; resource byte 12 (mask B) +rom:0006bb30 AND A11,A7 +rom:0006bb32 JRNE 0x0006bb4a ; bit set in mask B -> BadMatch below +rom:0006bb42 MOVE *A7(0x40),A7,0x1 ; resource byte 8 (mask A) +rom:0006bb46 AND A7,A11 +rom:0006bb48 JRNE 0x0006bbe2 ; bit set in mask A -> OK +rom:0006bb4a ... MOVK 0x8 ... ; BadMatch (8) +``` + +**Consequences.** + +| observation | explanation | +|---|---| +| class-3 resource → `BadIDChoice` (14) | its **byte 40 != 0**, so path B rejects it before the band logic | +| class-2 resource → `BadAccess` (10) | byte 40 == 0 (good) but **byte 36 == 0**, and the band index was ≥ 0 | +| class 1 → `BadIDChoice` | path A needs `arg1 != 0`; slot 19 always passes 0 | + +So `PUT_TILE` wants **class 2** (or 3), with **byte 40 == 0** and **byte 36 != 0**, +and then the requested band bit must be set in resource byte 8 *or* byte 12. + +Resource byte 8 and byte 12 are exactly the create request's **byte 41** and +**byte 43** (`GHIDRA_XIE_PIPELINE.md` §2), so the band mask comes from create. +Resource byte 36 is **not** written by the create path I traced — that is the +missing piece. + +**Band index.** Slot 19's `count`/`flags` word at request byte 24 is *not* a +count: `0x6bab2` feeds it as the band number. The live probe sent `count = 1`, +i.e. **band 1**, and only band 0 can plausibly be masked in by a create with +`req[41] = 1` (mask byte 8 = 1 → bit 0). + +--- + +## 2. Slot 7: bind, and the fields are swapped [C] + +Both sub-handlers take a 4-word request and immediately resolve +`LookupPhotos(client, 0, &local, ·, ·)` with the **last two pushed values being +request byte 8 and then request byte 12**: + +``` +rom:0006744e MOVE A14,-*SP,0x1 ; op1, 0x6742C +rom:00067450 MOVE *A9(0x40),*A14+,0x1 ; push request byte 8 +rom:00067454 MOVE *A9(0x60),*A14+,0x1 ; push request byte 12 +rom:00067458 MOVE A11,*A14+,0x1 ; &local +rom:00067460 MOVE A7,*A14+,0x1 ; 0 +rom:00067462 MOVE *A13(0xffe0),*A14+,0x1 ; client +rom:00067466 CALLA 0x07ea6fa0 ; LookupPhotos(client, 0, &local, b12, b8) +rom:00067472 JRNE 0x00067590 ; failure -> returned as-is +rom:00067476 MOVK 0x14 ... MOVK 0x1 +rom:00067480 CALLA 0x07f63a30 ; alloc 20 bytes +rom:000674c6 MOVK 0x1,A11 +rom:000674c8 MOVB *A11,*A7(0x20) ; new object byte 4 = **class 1** +rom:000674ce MOVE A11,*A7(0x30),0x0 ; new object bytes 6-7 = 1 +rom:000674d2 CALLA 0x07f63b48 +rom:000674d8 MOVE A8,*A7(0x80),0x1 ; object bytes 16-19 = result +``` + +`LookupPhotos`' last argument is the **type/class**, the one before it the **id** +(same convention as slots 11/12/24). Therefore, for slot 7: + +> **byte 8 = resource type/class, byte 12 = resource id.** +> The probe sent `[op, id, id2]` — i.e. an id where a *class* belongs — which is +> exactly why every ordering answered `BadIDChoice` on the second value: the +> lookup was searching for `id2` **of class `id`**, which cannot exist. + +`op 1` (`0x6742C`) = allocate a **class-1** object (20 bytes) that references the +(type, id) pair — a *reference binding*. +`op 2` (`0x6759A`) = same lookup, then walk `res->byte9` bands, collect each +band record's `+0x1a8` into a local array and hand them to the resource-init +routine `0x6CA82` — a *copy/derive binding*. + +Matching DEC vocabulary, slot 7 is `XIEP_BIND_PHOTOFLO` in its two variants +(bind by reference / by value). **[I]** for the name, **[C]** for the semantics. + +Note that op 1's product is **class 1**, and class 1 is exactly the class that +`PUT_TILE` rejects (`arg1 == 0` path). So binding a class-3 photomap *into a +class-2 sink* is **not** something slot 7 does — it produces class 1. + +--- + +## 3. What still blocks `PUT_TILE`: resource byte 36 [U] + +Two candidate explanations, both consistent with the code: + +1. **A band must be created on the class-2 resource.** Byte 36 looks like the + band/strip count of the resource record; the create allocates band records + (`res+0x160` array, count from `res byte 9`) but I found no store to byte 36 + in the create path. Slot 43 does build a *new* record through the same + `0x6CA82` init routine, using band sub-records (`band+0x1a8`) collected from + an existing resource — so **slot 43 ("execute/bind") is the best candidate + for materialising bands and setting byte 36**. +2. **The band index is simply wrong.** `count = 1` means band 1; band 0 is the + only one a `req[41] = 1` create masks in. + +Both are testable in two requests, and the first probe below distinguishes them. + +**Slot 43 in one line** (10 words, `{id@4, x@8, …}`): it resolves the id, +iterates the resource's bands, collects `band->0x1a8` into a local array, and +calls `0x6CA82` to (re)build a resource record with those bands. It succeeded on +the class-3 resource with zeros because it only needs a valid id. **[I]** — it +looks like "execute / materialise the pipeline". + +--- + +## 4. Exact next probes + +Each on one connection: `minor 1` (init) → create → probe. + +**P1 — the band index (1 request).** Same create as today, then: + +``` +minor 19, len 136 + word1 id = C0AAAA + word2 x = 0 word3 y = 0 + word4 w = 64 word5 h = 64 + word6 band = 0 <-- was 1 + word7 flags = 0 + + 512 bytes (128 words) of pixels +``` + +* `BadMatch (8)` → byte 36 is non-zero and only the **mask** is wrong: fix by + setting create `req[41] = 1` (mask byte 8 = 1 → band 0) or `req[43]` (mask + byte 12). Then either mask works. +* `BadAccess (10)` again → byte 36 really is zero: a band must be created first + → go to P2. + +**P2 — create the band (2 requests).** After the create, run slot 43 with the +class-2 id and zeros (it already succeeds on class 3): + +``` +minor 43, len 10 [id@4 = C0AAAA, rest 0] +``` + +then repeat P1. If `BadAccess` turns into Success or `BadMatch`, slot 43 is the +band-materialising step and must precede every `PUT_TILE`. + +**P3 — the bind (optional).** If P2 does nothing, try slot 7 with the corrected +field order, both op values, using the class-2 resource id as byte 12 and a +class code as byte 8: + +``` +minor 7, len 4 + word1 op = 1 (then 2) + word2 type = 2 <-- class of the target, NOT an id + word3 id = C0AAAA +``` + +`Success` means the bind worked; the current failure (`BadIDChoice`) is then +purely the swapped fields. + +**P4 — fallback import.** If `PUT_TILE` still refuses, slot 20 (35 words) is the +remaining import-shaped request; its header is `{id@4, …, }` with three 0x20-byte +element records. That is where an explicit Import element would live, but its +layout is still undecoded, so P1→P2 should be exhausted first. + +--- + +## 5. Confirmed / Inferred / Unknown + +**Confirmed** +1. `0x6B966` resolves the id through the resource tables; a miss is + `BadIDChoice` (14). +2. Class dispatch on resource byte 4: class 1 → path A (needs `arg1 != 0`, + slot 19 passes 0, so always `BadIDChoice`); classes 2 and 3 → path B. +3. Path B requires **resource byte 40 == 0** (else `BadIDChoice`) and + **resource byte 36 != 0** (else `BadAccess` when the band index is ≥ 0). +4. The band index is request byte 24, tested as `1 << band` against resource + byte 12 and byte 8; a mismatch is `BadMatch` (8). +5. Resource bytes 8 and 12 are the create request's bytes 41 and 43 + (band masks). +6. Slot 7: **byte 8 = type/class, byte 12 = id**; op 1 allocates a class-1 + object, op 2 rebuilds a record from another resource's bands. + +**Inferred** +1. Slot 7 is `BIND_PHOTOFLO`; slot 43 is execute/materialise. +2. Resource byte 36 is the band count and is set by slot 43, not by create. + +**Unknown** +1. What writes resource byte 36 (and what clears byte 40 on a class-3 record). +2. Slot 20's 35-word layout (the explicit Import-element path). +3. Whether the payload after a successful `PUT_TILE` must be packed rows. + +--- + +## 6. Reproduction + +1. Session `a03f3d788b874b1a976a55417ab9f2d3`, base `rom:00000000`. +2. Listings: `xie/ghidra-evidence/import/*.txt` + (`lookup_6B966` = the helper, `slot07_op1_6742C`, `slot07_op2_6759A`, + `resource_init_6CA82`). +3. Re-derive an argument order: count the pushes between `MOVE A14,-*SP,0x1` + and the `CALLA`, then map them right-to-left onto `A13-0x20, -0x40, …`. +4. Re-derive a field: `*A9(0xNN)` / `*A11(0xNN)` are bit offsets; divide by 8. diff --git a/xie/GHIDRA_XIE_PIPELINE.md b/xie/GHIDRA_XIE_PIPELINE.md new file mode 100644 index 0000000..a75f911 --- /dev/null +++ b/xie/GHIDRA_XIE_PIPELINE.md @@ -0,0 +1,340 @@ +# XIE 2.3 — photoflo / export layer (final pass) + +> **See `GHIDRA_XIE_IMPORT.md`**: `PUT_TILE`'s lookup helper `0x6B966` +> requires resource byte 36 non-zero and byte 40 zero, a band index at request +> byte 24 (not a count), and slot 7 takes *type*@8 / *id*@12 — not two ids. + + +Program `vt1200_v22.bin` (md5 `b46a3e442ccb86134d2356bd70d22fd2`), Ghidra session +`a03f3d788b874b1a976a55417ab9f2d3`. Addresses are file offsets; +`mame_bit = 0x3F200000 + off*8`; `CALLA` operand − `0x7E40000` = file offset. + +Companions: `GHIDRA_XIE.md`, `GHIDRA_XIE_HANDLERS.md`, `GHIDRA_XIE_IMAGE_PATH.md`. +Raw listings: `xie/ghidra-evidence/pipeline/` (`create_slot8_op12`, +`resource_init_6CA82`, `export_slot21`, `put_slot19`, `dd_input_6B640`). + +**Offset convention.** Every offset in this code is a *bit* offset from the +pointer. `*A9(0x20)` is request byte 4; `*A7(0x28)` with a 1-bit field is +**byte 5, bit 0**. The earlier reports' "resource +0x28 / +0x29" therefore mean +*bit* 0x28 = byte 5 bit 0, and neighbouring bits of byte 5. + +--- + +## 1. The BadMatch is now explained and fixed [C] + +Slot 21 refuses to export unless **resource byte 5, bit 0** is set: + +``` +rom:00062d88 MOVE *A13(0x20),A11,0x1 ; A11 = resolved resource +rom:00062d8c SETF 0x1,0x0,0x0 ; 1-bit field +rom:00062d8e MOVE *A11(0x28),A7,0x0 ; A7 = resource bit 0x28 +rom:00062d92 JRNE 0x00062dbc ; set -> continue +rom:00062d96 MOVK 0x8,A7 ; else error 8 = BadMatch +rom:00062d9a MOVE *A9(0x20),*A14+,0x1 ; bad value = resource id +rom:00062db0 CALLA 0x07effa5e ; SendErrorToClient(...) +``` + +That bit is written by the **create** handler, from the request's level array: + +``` +rom:0006cbfe MOVE *A9,A9,0x1 ; A9 = levelArray[i] +rom:0006cc00 JRNE 0x0006cc06 +rom:0006cc02 SUB A9,A9 ; 0 +rom:0006cc04 JR 0x0006cc08 +rom:0006cc06 MOVK 0x1,A9 ; 1 +rom:0006cc08 SETF 0x1,0x0,0x0 +rom:0006cc0a MOVE A9,*A7(0x28),0x0 ; resource bit 0x28 = (entry != 0) +``` + +The loop runs over the request's own words, so: + +> **A create whose request word at byte 28 is zero produces a resource with +> byte 5 bit 0 = 0, which no export can ever use.** + +Every create probe so far zero-filled byte 28 — that is why slot 21 always +answered `BadMatch`, whatever the 8-bit fields were set to. Setting byte 28 to a +non-zero "levels" value (e.g. `2`) is the fix. + +--- + +## 2. Resource record and class codes [C] + +Filled by the create path (`0x6CA82`), which is reached from slot 8 ops 1 and 2: + +``` +rom:0006caf2 MOVE *A13(0xfec0),A11,0x1 ; arg = (op == 2) ? 1 : 0 +rom:0006caf6 JREQ 0x0006cafc +rom:0006caf8 MOVK 0x2,A11 ; op 2 -> class byte = 2 +rom:0006cafa JR 0x0006cafe +rom:0006cafc MOVK 0x3,A11 ; op 1 -> class byte = 3 +rom:0006cafe MOVB *A11,*A9(0x20) ; resource byte 4 = class +rom:0006cb02 MOVK 0x1,A11 +rom:0006cb06 MOVE A11,*A9(0x30),0x0 ; resource bytes 6..7 = 1 (16-bit) +rom:0006cb0a MOVB *A13(0xffe0),*A9(0x40) ; byte 8 = request byte 41 +rom:0006cb12 MOVE *A9(0x40),A7,0x0 +rom:0006cb16 SUBK 0x3,A7 +rom:0006cb1a MOVK 0x3,A7 ; byte 9 = (req[41] == 3) ? 3 : 1 +rom:0006cb20 MOVB *A7,*A9(0x48) +rom:0006cb30 MOVB *A13(0xff60),*A9(0x58) ; byte 11 = request byte 42 +rom:0006cb36 MOVB *A13(0xff40),*A9(0x60) ; byte 12 = request byte 43 +rom:0006cb3c MOVB *A13(0xff20),*A9(0x50) ; byte 10 = request byte 44 +rom:0006cb42 MOVE *A13(0xff00),*A9(0x80),0x1 ; bytes 16..19 = width (32-bit) +rom:0006cb48 MOVE *A13(0xfee0),*A9(0xa0),0x1 ; bytes 20..23 = height (32-bit) +``` + +| resource byte | type | value / meaning | +|---|---|---| +| 4 | u8 | **class: 2 = op-2 resource, 3 = op-1 resource** | +| 5 bit 0 | bit | **"levels defined" — gates export (BadMatch) and bound checks** | +| 6 | u16 | 1 | +| 8 | u8 | request byte 41 (band count selector) | +| 9 | u8 | 3 if req[41]==3 else 1 — number of level entries examined | +| 10 | u8 | request byte 44 | +| 11 | u8 | request byte 42 | +| 12 | u8 | request byte 43 | +| 16 | u32 | **width** (from request byte 12) | +| 20 | u32 | **height** (from request byte 16) | +| 24, 28 | u32 | two 32-bit values from the create request | +| 44 | ptr | per-band array, records of 0x20 bytes (0x160 bits), one per band | + +Class ↔ behaviour, cross-checked against the live probes: + +* **class 2** — the *image* resource. `PUT_TILE` (slot 19) resolves this class + (it answers `BadIDChoice` for class 3 and `BadAccess` for class 2 with + bit0x28 clear). +* **class 3** — the op-1 resource; `QUERY` (slot 24) answers `BadAccess` on it. +* The `class` argument that slots 33/40/44 pass to `LookupPhotos` is this same + byte-4 value, supplied by the client. + +The per-band level count maps to bits per pixel (`0x6cb7c…0x6cbb0`): + +``` +entry == 0 -> 0 bits (empty band) +entry <= 2 -> 1 bpp +entry <= 0x100 -> 8 bpp +entry <= 0x10000-> 16 bpp +rowBytes = ALIGN(entry * width, 8) ; 0x6cbb4 MPYU / ADDK 7 / ANDN 7 +``` + +So **`entry = 2` is exactly "1 bit per pixel"** — the value to use for our test +image. + +--- + +## 3. Slot 8 — create request, 12 words [C] + +Both ops share one handler (`0x678DA`); the op word only selects the class byte. +`length` must be exactly 12 words (`rom:000678f8 SUBK 0xc / JREQ`). + +| word | byte | field | notes | +|---|---|---|---| +| 0 | 0 | header | `reqType=129`, `opcode=8`, `length=12` | +| 1 | 4 | **op** | 2 → class 2 (image), 1 → class 3 | +| 2 | 8 | **id** | new resource id; must satisfy `(id & 0xFFF00000) == client->0x20`, have **bit 19 clear** (`BTST 0x13`), and must not already exist | +| 3 | 12 | **width** | must be non-zero, else `BadValue` (2) | +| 4 | 16 | **height** | must be non-zero, else `BadValue` (2) | +| 5 | 20 | parameter | passed by address to `0x1238C2` before creation | +| 6–9 | 24–39 | **level array** (up to 3 longs at byte 28, 32, 36) | `entry != 0` sets resource bit 0x28; values 1–2 = 1 bpp | +| 10 | 40 | (unused) | | +| — | 41 | u8 band count | 3 → three entries examined, anything else → one | +| — | 42,43,44 | u8 params | copied to resource bytes 11, 12, 10 | + +Validation order (`0x678DA`): length == 12 → `req[12]` and `req[16]` non-zero +(else `BadValue` with bad = id) → id in the client's range and bit 19 clear +(else `BadIDChoice`) → id must be *absent* (else `BadIDChoice`) → create +(`0x6CA82`; failure is `BadAlloc`, code 11). + +Note `rom:00067902 MOVE *A9(0x60),A7,0x1 / JREQ` — **`req[12]` and `req[16]` must +both be non-zero**, which is also what makes the live "all-zero create" behaviour +consistent. + +--- + +## 4. Slot 21 — export, 16 words [C for the rectangle, I for the rest] + +``` +rom:00062d8e MOVE *A11(0x28),A7,0x0 ; resource bit 0x28 must be set -> BadMatch +rom:00062dbc MOVE *A9(0x80),A7,0x1 ; A7 = req[16] +rom:00062dc0 MOVE *A11(0x80),A11,0x1 ; A11 = resource width +rom:00062dc4 CMP A11,A7 / JRC ; if req[16] > width -> BadValue +rom:00062df8 MOVE *A9(0xa0),A7,0x1 ; req[20] vs resource height -> BadValue +rom:00062e30 MOVE *A9(0xc0),A11,0x1 ; req[24] must be non-zero +rom:00062e36 MOVE *A9(0xe0),A11,0x1 ; req[28] must be non-zero +rom:00062e76 MOVE A11,*A13(0x60) ; x0 = req[16] +rom:00062e88 MOVE A7,*A13(0x80) ; y0 = req[20] +rom:00062e9a ADD A7,A5 ; MOVE A5,*A13(0xa0) ; x1 = x0 + req[24] +rom:00062eb2 ADD A5,A7 ; MOVE A7,*A13(0xc0) ; y1 = y0 + req[28] +rom:00062f7e CALLA 0x07ea3432 ; prepare/validate export +rom:0006301c MOVI 0xc8,A5 / CALLA 0x07f63a74 ; allocate 200-byte export context +rom:0006306e MOVK 0xb,A8 ; failure -> BadAlloc (11) +``` + +| word | byte | field | +|---|---|---| +| 0 | 0 | header, `length = 16` | +| 1 | 4 | **id** of the image resource | +| 2, 3 | 8, 12 | 32-bit fields (byte-swapped; not read on the paths traced — reserved) | +| 4 | 16 | **x** — must be ≤ resource width | +| 5 | 20 | **y** — must be ≤ resource height | +| 6 | 24 | **width** — must be non-zero | +| 7 | 28 | **height** — must be non-zero | +| 8 | 32 | parameter (`*A9(0x100)`, used in the offset maths) | +| 9 | 36 | parameter (`*A9(0x120)`) | +| 10–11 | 40, 44 | parameter / flags | +| 12–15 | 48… | within the 16 words; not read on the traced paths | + +The handler allocates a **200-byte export context** itself +(`MOVI 0xc8` → allocator `0x63A74`), so it is the server, not the client, that +owns the export state. Whether the destination is a client-supplied Pixmap or a +server-created one is decided inside `0x63432` / `0x645FE`, which I did not +fully trace — **[U]**, and it is the only remaining unknown in the path. + +--- + +## 5. Slot 19 — put tile (unchanged, re-confirmed) + +`{id@4, x@8, y@12, w@16, h@20, count@24, flags@28}`, minimum 8 words, payload +follows; geometry is clipped against the resource's width/height (bytes 16/20) +and an empty rectangle is `BadValue`. The data lands through the device-dependent +input path `0x6B640` (`dd_input_6B640` listing), which copies 0xE longs plus a +byte from a per-band record before calling the DDXIE vtable. + +Slot 19 answers `BadAccess` on a class-2 resource whose bit 0x28 is clear — the +same gate as export. So **one create with a non-zero level entry unlocks both +PUT and EXPORT.** + +--- + +## 6. Slots 20 and 43 — status + +* **Slot 20** (exactly 35 words, seeds 25, loops over 0x20-byte element records + at `0x32…`): consistent with a photoflo definition carrying up to three + element records. Not decoded here; not needed for the minimal path if + PUT_TILE + EXPORT work. +* **Slot 43** (10 words; compares request fields against the static table at + `0x3F533740…`; succeeds silently on a class-3 resource with a zero payload): + most likely a bind/tap with no data. Not needed for the minimal path. + +Both are only needed if the direct put→export route is refused. + +--- + +## 7. Minimal sequence for a 64×64 1-bit image **[I, but every field is now sourced]** + +`base` = the connection's X resource base (0xC00000 in the observed setup), +id = `0xC0AAAA` (bit 19 clear). + +``` +[0] connect; QueryExtension "Xie" -> 129 [C] + +[1] INIT_SESSION minor 1, len 2 + 02 00 03 00 [C] + +[2] CREATE (class 2) minor 8, len 12 12 words = 48 bytes [C] + word1 02 00 00 00 op = 2 (class 2, the image resource) + word2 aa aa c0 00 id = 0xC0AAAA + word3 40 00 00 00 width = 64 + word4 40 00 00 00 height = 64 + word5 00 00 00 00 parameter (0) + word6 00 00 00 00 \ + word7 02 00 00 00 | level array: entry[0] = 2 -> 1 bpp, + word8 00 00 00 00 | and entry != 0 sets resource bit 0x28 + word9 00 00 00 00 / + word10 00 00 00 00 byte40 unused, byte41 = 01 (one band), + byte42/43/44 = 00 + -> Success (no packet). BadValue(2) bad=id ⇒ width/height zero. + BadIDChoice(14) ⇒ id out of range, bit 19 set, or already exists. + +[3] PUT_TILE minor 19, len 8 + payload [I] + word1 aa aa c0 00 id + word2 00 00 00 00 x = 0 + word3 00 00 00 00 y = 0 + word4 40 00 00 00 w = 64 + word5 40 00 00 00 h = 64 + word6 01 00 00 00 count = 1 (see probe P2) + word7 00 00 00 00 flags + then 512 bytes (128 words) of 1-bit pixels + total length = 8 + 128 = 136 + -> Success, BadValue(2) if the rect clips away, BadAccess if bit0x28 + is clear, BadIDChoice if the id is class 3 / absent. + +[4] EXPORT minor 21, len 16 [I] + word1 aa aa c0 00 id + word2 00 00 00 00 reserved + word3 00 00 00 00 reserved + word4 00 00 00 00 x = 0 (<= 64) + word5 00 00 00 00 y = 0 (<= 64) + word6 40 00 00 00 w = 64 (non-zero) + word7 40 00 00 00 h = 64 (non-zero) + word8..15 = 0 + -> BadMatch(8) if step 2 left byte 28 zero; BadValue(2) if x>width or + y>height or w/h zero; BadAlloc(11) if the 200-byte context fails. + +[5] TERM_SESSION minor 2, len 1 [C] +``` + +64×64 at 1 bpp = 8 bytes per row = 512 bytes; a checkerboard of 8×8 blocks is +`0xAA` for even (row/8 + byte) and `0x55` for odd, repeated over 8 rows. + +**If step [4] then reports the pixmap, display it with an ordinary `XCopyArea` +from that pixmap into a window** — no further XIE traffic. If instead the +destination must be supplied, the pixmap id belongs in one of words 8, 9, 10 or +11 (bytes 32/36/40/44); that is what probe P3 decides. + +--- + +## 8. Confirmed / Inferred / Unknown + +**Confirmed** +1. Resource class byte: 4 → 3 (op 1) or 2 (op 2) — `0x6cafe`. +2. Resource byte 5 bit 0 = "level entry non-zero", written at `0x6cc0a` from the + create request's level array at byte 28 — this is the BadMatch gate. +3. The create request is 12 words with width@12, height@16 (both non-zero), + level array at 28..39, band count at byte 41, three 8-bit params at 42/43/44. +4. Level values map to 1/8/16 bpp (`0x6cb7c…0x6cbb0`). +5. Export (slot 21) takes x@16, y@20, w@24, h@28, validated against the + resource's width/height 16/20, and allocates its own 200-byte context. +6. PUT_TILE (slot 19) and EXPORT share the bit-0x28 gate. + +**Inferred** +1. Op 2 = "create by value" (the image resource); op 1 = the other DEC create + variant. +2. Words 8/9 (bytes 32/36) of the export request carry the destination. +3. Slot 20 is a photoflo definition; slot 43 is bind/tap. + +**Unknown** +1. Whether export needs a client-created Pixmap or makes one (inside `0x63432`). +2. The meaning of export words 2, 3 and 10, 11 (bytes 8, 12, 40, 44). +3. Slot 19's `count` unit (tiles vs bytes) and whether the payload is packed + rows. +4. Slots 20 and 43 in full. + +--- + +## 9. Next probes (for the worker with server access) + +| id | probe | distinguishes | +|---|---|---| +| P1 | create (slot 8, op 2) **with word7 = 2**, then **query 24** on the id | if the reply is non-empty (it was empty before) the level array is live and the resource is class 2 | +| P2 | after P1, slot 19 with `count = 1` and then `count = 512` | which unit the count uses: one succeeds, the other is rejected/empty | +| P3 | after P1, slot 21 with x=y=0, w=h=64 and words 8..11 zero, then with a pixmap XID from `XCreatePixmap(depth 1, 64x64)` in word 8 | success on one variant names the destination field | +| P4 | create op 1 with word7 = 2, then slot 21 | confirms class 3 is not exportable (`BadIDChoice` at the lookup) | +| P5 | slot 19 on the class-3 id | confirms the class-2-only rule | + +Order: P1 first — it is the single probe that tests the new finding. If P1's +reply is still empty, then the level array is not the only gate and the next +step is to decode slot 20 (the photoflo definition) and build the pipeline +explicitly. + +--- + +## 10. Reproduction + +1. `program_open(path=…/vt1200_v22.bin, language="tms34010:LE:32:default", + read_only=false)`; the session is `a03f3d788b874b1a976a55417ab9f2d3` + (the earlier sessions are gone; the project is disposable). +2. Listings: `xie/ghidra-evidence/pipeline/*.txt`. + Key addresses: create `0x678DA` (slot 8 ops 1/2), resource init `0x6CA82`, + export `0x62D40`, put `0x6A76E`, dd input `0x6B640`. +3. Re-derive a field: run `DisassembleCommand` from the address, then read + `*A9(0xNN)` operands (bit offsets; divide by 8 for bytes). diff --git a/xie/GHIDRA_XIE_SLOT20.md b/xie/GHIDRA_XIE_SLOT20.md new file mode 100644 index 0000000..3e24ad8 --- /dev/null +++ b/xie/GHIDRA_XIE_SLOT20.md @@ -0,0 +1,302 @@ +# XIE 2.3 — slot 20, the band array, and the `PUT_TILE` payload hand-off + +Program `vt1200_v22.bin`, Ghidra session `a03f3d788b874b1a976a55417ab9f2d3`. +Addresses are file offsets; `mame_bit = 0x3F200000 + off*8`; +`CALLA` operand − `0x7E40000` = file offset. Read `GHIDRA_XIE_PIPELINE.md` and +`GHIDRA_XIE_IMPORT.md` first. + +Raw listings: `xie/ghidra-evidence/slot20/`. + +**Offset convention** — as in the earlier reports, every offset in the +disassembly is a **bit** offset. `*A9(0x20)` = request byte 4; +`*A5(0x28)` = **byte 5 of `A5`**; `*A7(0x120)` = byte 36; `*A7(0x140)` = byte 40. +This distinction matters for one of the two claims in the brief (see §3). + +--- + +## 1. Correction: the `+0x28` write is inside slot 19, not slot 20 + +The instruction the brief points at, + +``` +rom:0006a98e MOVE *A13(0x120),*A5(0x28),0x1 +``` + +lies in **slot 19's** body (`0x6A76E … 0x6AA54`), not slot 20's (`0x6AA54 …`). +Read with the bit-offset convention it is: + +* `A5` = one band/element record (`A5 = *(A7 + 0x160)` one instruction earlier, + `0x6a98a`), +* `*A13(0x120)` = frame local 0x120, which was filled at `0x6a882` with + `A5 = A9 + 0x100`, i.e. **a pointer to request byte 32**, +* `*A5(0x28)` = **byte 5** of that band record (bits, not byte 0x28). + +So the sequence at the end of `PUT_TILE` is: + +``` +rom:0006a87c MOVE A9,A5 +rom:0006a87e ADDI 0x100,A5 ; A5 = request + 0x100 bits = request byte 32 +rom:0006a882 MOVE A5,*A13(0x120),0x1 ; local = pointer to the pixel payload +... +rom:0006a98a MOVE *A5(0x160),A5,0x1 ; A5 = resource->band[] +rom:0006a98e MOVE *A13(0x120),*A5(0x28),0x1 ; band.byte5 = payload pointer +rom:0006a9a2 CALLA 0x07eab640 ; 0x6B640 device-dependent input +rom:0006a9e2 SUB A7,A7 +rom:0006a9e4 MOVE A7,*A5(0x28),0x1 ; band.byte5 = 0 (cleared again) +``` + +**This is the payload hand-off, and it is the answer to "where do the pixels +come from"**: `PUT_TILE` passes the *request buffer itself* (from byte 32) down +to the DD input routine through a scratch field, and clears the field +immediately afterwards. It is **transient, per call** — nothing persists. + +It also fixes an open question from pass 3: **the `PUT_TILE` payload starts at +request byte 32**, exactly the word after the 8-word header +(`{hdr, id, x, y, w, h, band, flags}`). + +--- + +## 2. Slot 20 — request layout and behaviour [partial, C for the structure] + +Entry `0x6AA54`. + +``` +rom:0006aa5e MOVK 0x19,A11 / MOVE A11,*A13(0xc0),0x1 ; default 25 (see below) +rom:0006aa6e MOVE *A9(0x10),A7,0x0 ; stuff->length +rom:0006aa72 CMPI 0x23,A7 ; must be exactly 35 words +rom:0006aa7a MOVK 0x10 -> BadLength +rom:0006aa7e CALLA 0x07f67f38 ; context/undo mark +rom:0006aa84 MOVE A8,@0x1b2b30,0x1 +rom:0006aa8c MOVI 0xffff,A7 / push ; arg = 0xFFFF (class "any") +rom:0006aa94 MOVE *A9(0x68),A8,0x0 ; arg = request byte 13 (8-bit) +rom:0006aa9a MOVE *A9(0x20),*A14+,0x1 ; arg = request byte 4 (id) +rom:0006aaa4 push &local(0x40) +rom:0006aaaa push &local(0) +rom:0006aaac push A13 +rom:0006aaae push client +rom:0006aab2 CALLA 0x07eab966 ; LOOKUP 0x6B966 (see pass 4) +rom:0006aabe JRNE 0x0006afdc ; error -> return it +``` + +Then a loop over the resource's bands: + +``` +rom:0006aad8 MOVE *A7(0x160),A5,0x1 ; A5 = resource->band[] (byte 44) +rom:0006aae4 MOVE *A5(0xd8),A7,0x1 ; band record (byte 27) +rom:0006aae8 JREQ 0x0006ab46 ; no record -> result 0 +rom:0006aaf6..0x6ab0e A7 = band->0x1a8 (bit) ; per-band device object +rom:0006ab0e CALLA 0x07fc22de ; 0x1822DE \ +rom:0006ab14 CALLA 0x07fc2c34 ; 0x182C34 | device-dependent +rom:0006ab2a CALLA 0x07fc2c34 ; 0x182C34 | band setup chain +rom:0006ab30 CALLA 0x07fc1aca ; 0x181ACA | +rom:0006ab36 CALLA 0x07fc288a ; 0x18288A | +rom:0006ab3c CALLA 0x07fc216a ; 0x18216A / +rom:0006ab48 MOVE A7,*A11(0x120),0x1 ; per-band result -> frame array +rom:0006ab6a MOVE *A13(0x80),A7,0x1 ; i +rom:0006ab6e SUBK 0x3,A7 +rom:0006ab70 JRC 0x0006aacc ; loop while i < 3 +``` + +i.e. **three bands, `xieValMaxBands = 3`**, each with a device-dependent +record; results are summed into frame local `0x100`. + +After the loop the handler validates request bytes against the per-band state +and returns `BadMatch` (8) on mismatch: + +``` +rom:0006ab82 MOVE *A13(0x40),A11,0x1 +rom:0006ab88 MOVE *A11(0x8),A7,0x0 ; band attribute (16-bit at byte 1) +rom:0006ab8c MOVE *A9(0x70),A5,0x0 ; request byte 14 +rom:0006ab92 JRNE -> BadMatch +rom:0006ab94 MOVE *A11(0x10),A7,0x0 ; band attribute at byte 2 +rom:0006ab98 MOVE *A9(0x60),A5,0x0 ; request byte 12 +rom:0006aba0 MOVE *A11(0x20),A7,0x1 ; 32-bit attribute at byte 4 +rom:0006aba4 MOVE *A9(0x40),A5,0x1 ; request byte 8 +rom:0006abac MOVE *A11(0x40),A7,0x1 ; attribute at byte 8 +rom:0006abb0 MOVE *A9(0x80),A5,0x1 ; request byte 16 +rom:0006abc4 MOVE *A11(0x80),A7,0x1 +rom:0006abce JRNC 0x0006abf6 +rom:0006abd0 ... MOVK 0x8 -> BadMatch +``` + +| word | byte | meaning (as far as the code shows) | +|---|---|---| +| 0 | 0 | header; `length` must be **0x23 = 35** | +| 1 | 4 | **resource id** (fed to `0x6B966` with class `0xFFFF`) | +| 2 | 8 | 32-bit attribute compared with band+4 | +| 3 | 12 | 16-bit attribute compared with band+2 | +| — | 13 | 8-bit mode passed to the lookup (`0x6aa94`); also drives the attribute checks | +| — | 14 | 16-bit attribute compared with band+1 | +| 4 | 16 | 32-bit attribute compared with band+8 | +| 5 | 20 | not read in the traced path | +| 6 | 24 | not read in the traced path | +| 7 | 28 | not read in the traced path | +| 8…34 | 32…139 | not read in the traced path | + +`MOVK 0x19` (25) at `0x6aa5e` seeds frame local `0xc0` — it is **not** a request +field: the local is overwritten by the mode-dependent branches at `0x6ac08`, +`0x6ac10`, `0x6ac1e` later in the handler. It is a default for a computed value, +so the "25-element notion" in the pass-3 note is not an element count. + +**Slot 20 is therefore a per-band *operation on an existing resource*** — the +same device-dependent band chain that the create path runs — not a photoflo +definition, and not the thing that creates the band array. + +--- + +## 3. Where the band array comes from [C] + +The band array is created by the **create** request (slot 8 op 1/op 2 → +`0x678DA` → `0x6CA82`), not by slot 20 or slot 43: + +``` +rom:0006cb54 MOVE *A9(0x48),A11,0x0 ; band count = resource byte 9 (1 or 3) +rom:0006cb58 CMP A11,A7 / JRNC ... +rom:0006cb64 MOVE *A13(0xffc0),A9,0x1 ; the level array handed in by the caller +rom:0006cb6a MOVE *A11,A11,0x1 ; level entry +... +rom:0006cc0e MOVE *A7(0x160),A9,0x1 ; resource->band[] (byte 44) +rom:0006cc12 SLL 0x5,A7 ; i * 4 bytes +rom:0006cc18 ADD A7,A9 ; &band[i] +rom:0006cc48 CALLA 0x07eac660 ; 0x6C660 allocate the band record +rom:0006cc4e MOVE A8,*A9(0xd8),0x1 ; band[i] + 0xd8 (byte 27) = record +``` + +and the record allocator itself: + +``` +rom:0006c660 MMTM SP,0x154 +rom:0006c66a MOVI 0x39,A11 ; 57-byte record +rom:0006c670 CALLA 0x07f639f4 ; allocate +rom:0006c692 MOVK 0x8,A9 / *A11,0x0 ; class -> 8 bpp (0x16-bit field) +rom:0006c69e MOVK 0x10,A9 / *A11,0x0 ; class -> 16 bpp +rom:0006c6a8 MOVK 0x0,A9 / *A11,0x0 ; class -> 0 +rom:0006c6b0 ... CALLA 0x07fc22de … 0x07fc216a ; same DD chain as slot 20 +``` + +So: **create → per-band record (0x39 bytes) → stored at `resource->band[i] + 0xd8`**, +one record per band, band count = the create request's byte 41 (`3` → three +bands, anything else → one). That is why a create with `req[41] = 1` and a +non-zero level entry gives a resource with **one** populated band and mask bit 0 +set in resource byte 8. + +### Resource byte 36 — still not written anywhere I can see + +`0x6BAAC` copies `resource[bit 0x120]` (byte 36, 32-bit) into a local and +requires it to be non-zero (`GHIDRA_XIE_IMPORT.md` §1). A scan of the whole +resource module (`0x65000 … 0x6D000`) for stores to bit `0x120` / `0x140` on a +non-frame base yields exactly **one** hit: + +``` +rom:0006ce56 MOVE A11,*A9(0x140),0x1 ; *A9(0x140) = 0 (clears byte 40) +``` + +That is inside the helper slot 20 calls at `0x6CD68`, and it **clears** byte 40 +of an object reached through `resource->band[]` — consistent with `PUT_TILE` +requiring byte 40 == 0 and with slot 20 "re-arming" bands. + +**No store to byte 36 exists in that whole range.** Either it is written outside +the resource module, or it is part of a block copied in by the create path's +pre-call helper `0x1238C2` (which receives `&request[20]`). This is the one +remaining structural gap. + +--- + +## 4. Ranked next probes + +The static model cannot finish this; these are ordered so each result eliminates +a branch. All assume the class-2 resource that already works for slot 21. + +**P1 — `PUT_TILE` with band 0** (1 request, highest value). +`minor 19, len 136`: `id, x=0, y=0, w=64, h=64, **band=0**, flags=0` + 512 bytes. +* Success → done: the band exists, the payload starts at byte 32 (proved in §1), + and only the earlier `band=1` was wrong. +* `BadMatch (8)` → byte 36 is non-zero and the band **mask** is what fails: set + create `req[41] = 1` so resource byte 8 = 1 (`1 << 0`). +* `BadAccess (10)` → byte 36 is zero: the resource has no live band pointer → + P2. + +**P2 — slot 20 as the band arming step** (1 request). +`minor 20, len 35`: `id@4`, `byte13 = 1`, all other words 0. +Expect either Success (bands armed; repeat P1) or `BadMatch` naming an attribute +in bytes 8/12/14/16 — in which case copy the corresponding per-band values from +the create parameters and retry. This is the request that runs the same DD band +chain (`0x1822DE … 0x18216A`) that `0x6C660` runs at create time. + +**P3 — dump the live resource record** (0 requests; use the slot-24 query and the +existing probe harness). Query 24 on the class-2 id and record which bytes of +the 32-byte reply are non-zero. If the reply is empty (as it was before), then +instead read the record from the server side is not possible — in that case skip +to P4. + +**P4 — slot 43 (10 words) then P1.** +`minor 43, len 10, [id, 0…]` clears byte 40 via `0x6CE56` (proved above) and +rebuilds a record from the existing bands; then P1. + +**P5 — the fallback define path**: slot 7 with the corrected field order, +`minor 7, len 4, [op=1, type=2, id]` (byte 8 is the *type*, byte 12 the *id*). +This allocates a class-1 object (a photoflo/handle) — only useful if P1–P4 all +fail, since `PUT_TILE` rejects class 1 outright. + +--- + +## 5. Minimal sequence (best current candidate) + +``` +[1] minor 1 len 2 02 00 03 00 [C] +[2] minor 8 len 12 op=2, id, w=64@12, h=64@16, req[20]=0, + level[0]=2 @28, byte41=01 (one band), rest 0 [C] +[3] minor 20 len 35 id@4, byte13=1, rest 0 (arm bands) [I] +[4] minor 19 len 136 id, x=0, y=0, w=64, h=64, band=0, flags=0, + + 512 bytes of 1-bit pixels [I] +[5] minor 21 len 16 id, x=0@16, y=0@20, w=64@24, h=64@28, … [C] +[6] XCopyArea(pixmap|window) or the export already drew into it [C] +``` + +Step [3] is the only speculative one, and P1/P2 decide whether it is needed. + +--- + +## 6. Confirmed / Inferred / Unknown + +**Confirmed** +1. `0x6A98E` is inside slot 19 (`PUT_TILE`), and it stores **request byte 32** + (the payload pointer) into **byte 5** of a band record, calls `0x6B640`, then + zeroes it — a transient, per-call hand-off. +2. `PUT_TILE`'s payload therefore begins at request byte 32; the 8-word header is + `{hdr, id, x, y, w, h, band, flags}`. +3. Slot 20 requires `length == 0x23`, takes the resource id at byte 4 plus a mode + byte at 13, loops over the resource's **three** bands, runs the DD chain + `0x1822DE/0x182C34/0x181ACA/0x18288A/0x18216A` per band, and validates + request bytes 8/12/14/16 against per-band attributes (`BadMatch` on mismatch). +4. The band array (`resource->band[]`, byte 44) and its per-band records + (`band+0xd8`, 0x39 bytes) are created by the **slot-8 create** path + (`0x6CA82` → `0x6C660`), one record per band, count from `req[41]`. +5. `0x6CE56` clears byte 40 of a band-reachable object; it is the only + byte-40/byte-36 store in `0x65000–0x6D000`. + +**Inferred** +1. Slot 20 is "arm/execute the existing bands", not a photoflo definition. +2. `MOVK 0x19` is a computed default, not a 25-element count. +3. `PUT_TILE` with `band = 0` plus an armed band should succeed. + +**Unknown** +1. **Who writes resource byte 36** — no store found in the resource module. +2. The meaning of slot 20's words 20, 24, 28 and 8…34. +3. Whether slot 20 or slot 43 is the arming request (both touch band state). + +--- + +## 7. Reproduction + +1. Session `a03f3d788b874b1a976a55417ab9f2d3`, base `rom:00000000`. +2. Listings: `xie/ghidra-evidence/slot20/` + (`slot20_6AA54.txt`, `band_alloc_6C660.txt`, + `slot20_helper_6CD68_tail.txt`, `slot19_payload_handoff.txt`). +3. Scan used for the byte-36/40 question: + + ```python + # disassemble 0x65000..0x6D000, then keep instructions matching + # MOVE ...,*A?(0x120|0x140),0x1 where the base is not A13/A14 + ``` + which yields only `0x6CE56`. diff --git a/xie/MAME_XIE_TRACE.md b/xie/MAME_XIE_TRACE.md new file mode 100644 index 0000000..14b12be --- /dev/null +++ b/xie/MAME_XIE_TRACE.md @@ -0,0 +1,232 @@ +# Does the VT1200 firmware issue XIE requests? A MAME trace + +Short answer: **no.** Over three configurations — level-0 diagnostics, the booted +OS with the Terminal Manager, and a forced jump into the Scalution test — the +server's XIE dispatcher `XieProc` is **never entered**. The built-in image tests +are hardware diagnostics that program the image-option/scaler registers directly. + +There is therefore **no ROM-side XIE client sequence to replay**, and the +`PUT_TILE` band question cannot be settled this way. + +Everything below is measured, with a control that proves the measurement works. + +--- + +## 1. How the test was triggered, and why the entry point is not the problem + +### 1.1 The Scalution test entry + +`"error initializing scalution"` lives at file `0x371F2`; its only xref is the +instruction at file `0x36CB6`. Scanning backwards from there for the +`MMTM SP,0x…` prologue (`8F 09`) finds the test's entry at **file `0x35EA8`** += bit `0x3F1AF540`: + +``` +rom:00035ea8 MMTM SP,0x154 +rom:00035eac MOVE A14,A13 +rom:00035eae ADDI 0x6e0,A14 +rom:00035eb2 SUB A11,A11 +rom:00035eb4 MOVE A11,*A13(0x520),0x1 +... +rom:00035ecc CALLA 0x07f67f38 ; 0x127F38 test-framework entry +rom:00035ed2 MOVE A8,@0xa5f00,0x1 +rom:00035ee0 MOVK 0x1,A11 / MOVB A11,*A13 ; mode 1 +rom:00035ee6 MOVK 0x3,A11 / MOVB A11,*A13 ; mode 3 +rom:00035eec MOVK 0x5,A11 / MOVB A11,*A13 ; mode 5 +``` + +It is reached from a descriptor table (`refs to 0x35EA8` = file `0x1AFE8` and +`0x1BA46`), i.e. the "5 - Scalution Test" menu entry, whose label string is +`0x2B5D2` and whose menu table is built by the routine at `0x2A9A8` +(`MOVI 0x3f35ae90` = that label, stored at base + `0xa00000` bits). + +**What it does:** the body writes the image-option/scaler hardware directly — + +``` +rom:00036b02 MOVB A9,0xca2b0 ; scaler control registers +rom:00036b0c MOVB A7,0xca2c0 ; (0xca270 … 0xca3a0) +rom:00036b7c MOVB A11,0xca330 +rom:00036c02 MOVE A11,@0x5600100,0x0 ; image-option registers +rom:00036c0c MOVE A7,@0x5600020,0x0 +rom:00036c16 MOVE A7,@0x5600030,0x0 +``` + +No call to the server, no request buffer, no `XieProc`. + +### 1.2 Triggering it in MAME + +The menu path needs the LK401 keyboard model and a menu map that is not +documented; the diagnostic menu's own key handling was not reversed. Instead the +test was entered by PC assignment from the menu idle loop, the same mechanism +`hello.lua` uses: + +```lua +dbg:command("bpset 3FDCE400,,{ pc = 3F1AF540 ; g }") -- idle -> scaled test entry +``` + +(Gotcha: the firmware reaches the idle PC `3FDCE400` **from frame 1**, not at +frame 300 — `progress.lua` samples exactly that PC for all 199 frames of the +baseline. So an "enter the test at frame N" breakpoint actually fires at frame 1 +unless it is gated on a frame counter.) + +--- + +## 2. The tracer + +Script: **`harness/mame/xie_trace.lua`** (new file, this task). +Breakpoint inside `XieProc`, one instruction *after* it loads the request buffer, +so `A9` is the buffer: + +``` +rom:00064b98 MMTM SP,0x54 <- XieProc entry bit 3F525CC0 +rom:00064ba2 MOVE *A11(0x40),A9,0x1 ; A9 = client->requestBuffer +rom:00064ba6 SETF 0x8,0x0,0x0 +rom:00064ba8 MOVE *A9(0x8),A11,0x0 ; <- breakpoint here, bit 3F525D40 +``` + +Action (generated by the script): + +``` +{ printf "XIEHIT buf=%08X %04X %04X %04X %04X %04X %04X %04X %04X\n", + a9, w@(a9+0), w@(a9+16), w@(a9+32), w@(a9+48), + w@(a9+64), w@(a9+80), w@(a9+96), w@(a9+112) ; g } +``` + +`w@` is used rather than `b@` because the TMS34010 program space is 16-bit wide +and bit-addressed; `+16` bits = the next word. + +**Critical harness detail:** debugger `printf` output goes to the *debug +console*, which is discarded unless MAME is started with **`-debuglog`**. Without +it the runs look like "zero hits" whether or not the breakpoint fires. All runs +below use `-debuglog`. + +--- + +## 3. The control run (proof the measurement works) + +Same script, breakpoint moved to the menu idle PC, which executes continuously: + +``` +XIE_TRACE=0x3FDCE400 XIE_FRAMES=60 XIE_WORDS=0 \ + $M vt1200 -rompath /home/arti/code/k-space/vt1200/harness/mame/roms \ + -video none -sound none -nothrottle -debug -debugger none -debuglog \ + -autoboot_script /home/arti/code/k-space/vt1200/harness/mame/xie_trace.lua \ + -autoboot_delay 0 +``` + +Result: **4 634 965 hits** in `debug.log` (`XIEHIT pc=3FDCE400`). The breakpoint, +the action, the memory accessors and the log path all work. + +--- + +## 4. The three trace runs + +| run | configuration | frames | `XieProc` hits | +|---|---|---|---| +| A | plain boot → level-0 diagnostics menu | 1200 | **0** | +| B | `VT1200_SKIP_LEVEL1=1` → OS + Terminal Manager | 4500 | **0** | +| C | forced jump into the Scalution test at `0x35EA8` | 900 | **0** | + +Logs: `xie/ghidra-evidence/mame/run_a_level0_diagnostics.txt`, +`run_b_os_terminal_manager.txt`, `run_c_scalution_jump.txt`, +`run_d_control.txt`. + +Run A's PC stays at `3FDCE400` (menu) throughout; run B ends at +`3F579870` (OS code); run C leaves the menu and runs code at `3F208xxx` +(file `0x109xx`) — so the PC assignment did divert execution. Caveat: a +breakpoint placed on `0x35EA8` itself did **not** fire in run C, so the exact +instruction the jump landed on, and how far the test body executed before +diverting, is not proven. It does not affect the conclusion — the XIE breakpoint +covered the whole run either way. + +**No request bytes were captured because no request was ever dispatched.** The +XIE breakpoint would have printed `buf=… 0081 0002 …` (reqType `0x81` = major +opcode 129) if the server had been asked to do anything. + +Corroborating static evidence: the ROM contains exactly three strings containing +`Xie` — `"Xie"`, `"XieExtensionInit: AddExtension failed"`, +`"XieExtensionInit: Device Init failed"` — all server-side registration text. +There is no client-side XIE API (no `XieInitialize`/`XieCreatePhotomap`-style +names), which is what a firmware-resident XIE client would have left behind. + +--- + +## 5. What this means for the import problem + +The plan "trace the firmware's own XIE client to see the working `PUT_TILE` +sequence" **cannot work**: the firmware has no XIE client, and its image tests +drive the scaler registers instead of the protocol. + +That leaves the static picture as the only route to the band/import question: + +* `PUT_TILE` (minor 19) requires, from `0x6B966`: resource byte 40 == 0, + resource byte 36 != 0, and the band bit `1 << band` set in resource byte 8 or + byte 12 (`GHIDRA_XIE_IMPORT.md` §1). +* Nothing in the create path (`slot 8` → `0x678DA` → `0x6CA82`) writes byte 36, + so some *other* request must. Slot 43 rebuilds a resource record from another + resource's bands (`GHIDRA_XIE_IMPORT.md` §3) and remains the best candidate. + +### Next probes (unchanged, and now the only path) + +1. `PUT_TILE` with **band = 0** (request word 6 = 0) instead of 1. + `BadMatch (8)` ⇒ byte 36 is set and only the mask is wrong; `BadAccess (10)` + ⇒ byte 36 is zero and a band must be created first. +2. If (1) fails: `minor 43, len 10, [id, 0…]` on the class-2 resource, then repeat + (1). +3. If (1) and (2) fail: `minor 7, len 4, [op=1, type=2, id]` (note the field + order: byte 8 is the *type*, byte 12 the *id*), or slot 20 (35 words). + +--- + +## 6. Confirmed / Inferred / Unknown + +**Confirmed** +1. The firmware never enters `XieProc` during POST/diagnostics, during the booted + OS/Terminal Manager, or when the Scalution test is entered (0 hits in 6600 + frames, with a 4.6-M-hit control proving the tracer works). +2. The Scalution test (`0x35EA8`, bit `0x3F1AF540`) writes image-option/scaler + registers `0xCA2xx`/`0x56000xx`; it contains no server call. +3. The ROM has no client-side XIE strings; the only `Xie` strings are the + server's registration messages. +4. Debugger `printf` output requires `-debuglog`; without it, breakpoint actions + are invisible (this silently invalidated a first round of runs here). + +**Inferred** +1. The built-in image tests are board-level diagnostics, not protocol clients. +2. If any code did call XIE it would still arrive at `XieProc` (dix dispatch); + a private internal bypass is not fully excluded, but nothing suggests one. + +**Unknown** +1. Whether slot 43 or slot 20 is the band-materialising request (unchanged). +2. The image-option menu's key map (not needed for the conclusion). + +--- + +## 7. Reproduce + +```sh +M=/home/arti/code/k-space/mame0289/vt1200 +R=/home/arti/code/k-space/vt1200 + +# A: level-0 diagnostics +XIE_FRAMES=1200 $M vt1200 -rompath $R/harness/mame/roms \ + -video none -sound none -nothrottle -debug -debugger none -debuglog \ + -autoboot_script $R/harness/mame/xie_trace.lua -autoboot_delay 0 +# -> debug.log: no XIEHIT lines + +# B: booted OS +VT1200_SKIP_LEVEL1=1 XIE_FRAMES=4500 $M vt1200 +# -> no XIEHIT lines + +# C: forced Scalution test +XIE_JIT=3F1AF540 XIE_FRAMES=900 $M vt1200 +# -> no XIEHIT lines + +# control: breakpoint on the menu idle PC (fires every frame) +XIE_TRACE=0x3FDCE400 XIE_WORDS=0 XIE_FRAMES=60 $M vt1200 +# -> hundreds of thousands of "XIEHIT pc=3FDCE400" lines in debug.log +``` + +`xie_trace.lua` env: `XIE_FRAMES`, `XIE_WORDS` (0 = print PC only), +`XIE_TRACE` (breakpoint address override), `XIE_JIT` / `XIE_AT` (optional +debugger entry). diff --git a/xie/README.md b/xie/README.md new file mode 100644 index 0000000..2c52175 --- /dev/null +++ b/xie/README.md @@ -0,0 +1,1213 @@ +# XIE sources: `xieperf`, XIElib and the sample server extension + +> **STATUS (updated): a client-chosen XIE image IS displayed on the VT1200.** +> The working path is `XieCreateImage -> XieCreatePhoto -> XiePutTile -> +> XieExport(photomap -> depth-1 Pixmap) -> XCopyArea(pixmap -> window)`, run +> with `VT1200_ACCEL=1` and the compression poke in `harness/mame/xie_fix.lua`. +> Two faults were removed: the accelerator's output-FIFO read pointer was never +> reset between transfers, and `dwt/screenshot.py` needs `--real` (1280 wide, +> 256-byte stride) for the VR319 default. See +> `evidence/XIE_IMAGE_DISPLAYED.md` and `evidence/png/xie_window_tiles.png`. +> Everything below this banner that says "NO client-chosen XIE image displayed" +> is *historical* and is superseded; the corrections are listed in that report. + + +Vendored copy of the XIE (X Image Extension) sources from **X11R6.1** +(X Consortium, March 1996). The point of interest is `xieperf`, the XIE +test/benchmark client, which is the natural first client to point at the +VT1200's DECwindows server because that server advertises a `Xie` extension: + +``` +$ xdpyinfo -display 192.168.99.2:0 +... +number of extensions: 2 + ServerManagementExtension + Xie +... +vendor string: DECWINDOWS DigitalEquipmentCorp. +version number: 11.0 +... +depth of root window: 1 plane +``` + +## What is here + +| path | contents | +|---|---| +| `xc/programs/xieperf/` | `xieperf` client: 35 `.c` files, `xieperf.h`, `Imakefile`, `xieperf.man`, and the `images/` test images (`image.001`–`image.014`) | +| `xc/lib/XIE/` | **XIElib**, the client library `xieperf` links against | +| `xc/include/extensions/XIE*.h` | `XIE.h`, `XIEproto.h`, `XIEprotost.h` — wire protocol and client API headers | +| `xc/programs/Xserver/XIE/` | the X11R6 sample **server-side** XIE implementation (reference only; not needed to build `xieperf`) | +| `xc/doc/hardcopy/XIE/` | XIE protocol spec, XIElib spec and sample-implementation architecture, as plain text | + +280 files, about 8.3 MB. PostScript copies of the documents were dropped; +the `.txt` renderings are kept. + +## Provenance + +Downloaded 2026-11-01 from the official X.Org release archive: + +- + — `xc/programs/xieperf`, `xc/lib/XIE`, `xc/include/extensions/XIE*.h`, + `xc/programs/Xserver/XIE` +- + — `xc/doc/hardcopy/XIE` (documents) + +Checksums of the original tarballs: + +``` +d138b68392d4ca49939fd0da46180763a23e82838fb30cb964ed2c5bc6d6c8d6 xc-1.tar.gz +cec75d6ae72d437783c72c2892d637a8a2acfd0f2088358ed024064a1a687976 xc-2.tar.gz +a980821b36607773eba8735ad5608e03c503fe139656f4e3beb64c1b5049fab9 xc-3.tar.gz +``` + +`xc-2.tar.gz` holds the same specs as nroff sources under +`xc/doc/specs/XIE/`; it was not needed for this copy. + +Other places the same tree is available: + +- Browsable single files (Debian's `vnc4` source package bundles an XFree86 + 4.3-era `xc`): + and +- XFree86 3.3.6 mirror: +- X11R6 (1994) and later releases: , + , + +XIE was removed from the reference X11 distribution in X11R6.7 (2004), so +there is no current distro package for `xieperf`. + +## Licence + +X Consortium / MIT-style terms for the X11 code, plus the AGE Logic notice +on the XIE sources. Both are reproduced at the top of every source file and +in `xieperf.man`; the AGE Logic terms permit use, modification and sale +provided the notice is preserved. + +## Using it against the VT1200 — status + +It builds and connects, and it **does** identify the server, but it cannot yet +run the test suite: the VT1200 implements **XIE protocol 2.3**, while +`xieperf` speaks **5.0**. Verified against `192.168.99.2:0`: + +``` +xieperf - XIE performance program, version 1.0 + +XIE V2.3 +FULL server +Screen visual class is StaticGray +Colormap has 2 entries +Effective depth is 1-bit +... +Class name: ColorAlloc +X Error of failed request: BadLength + Major opcode of failed request: 129 (Xie) + Minor opcode of failed request: 0 () +``` + +The request that kills it is the client's 5.0 `QueryTechniques` (minor 2). In +2.3 that slot is **not** `QueryTechniques`: the ROM dispatch table says slot 2 +accepts exactly **one word** and returns success *without a reply*, while the +5.0 request is two words and gets `BadLength`. So `xieperf` hangs at one word +and dies at two. + +The ROM analysis (`GHIDRA_XIE.md`) found **46 request slots, 25 implemented**. +Only slot 1 can be matched to its 5.0 counterpart; the numbering is otherwise +not 5.0's. No slot implements `QueryTechniques` or any technique-capability +reply, so `-showtechs` cannot work against this server. + +Raw X11 probes (no XIElib) plus the ROM table give this map: + +| minor | 5.0 request the client thinks it is | what 2.3 slot N actually does | +|---|---|---| +| 1 | `QueryImageExtension` | same request (2 words); replies **2.3**, class `0x20`, 8 levels | +| 2 | `QueryTechniques` | 1 word, success **with no reply**; not a query | +| 6 | `QueryColorList` | 1 word (bare header) → reply, length 0 (no argument) | +| 11 | `QueryPhotomap` | 3 words (5.0: 2); id at byte 4 → `BadIDChoice` if null | +| 23 | `GetClientData` | not implemented → `BadRequest` | +| 24 | `QueryPhotoflo` | 4 words (5.0: 3); id at byte 4 → `BadIDChoice` if null | + +`BadLength` always arrives with `minor_op = 0` because the handlers *return* 16 +to the dispatcher and the generic error path has no minor to report; errors XIE +sends itself do carry the real minor (minor 23 reports `BadRequest` with +`minor_op 23`). So the `0` in the error is a server-side artefact, not evidence +about which request failed. + +The full evidence is in `evidence/` (`xie_wire_probe.txt`, +`xieperf_showtechs_vt1200.txt`, `xieprobe_vt1200.txt`) and +`ghidra-evidence/` (`dispatch_table.txt`, `listings.txt`, +`length_sweep_wire.txt`). + +**So:** the extension is real and answers XIE requests; `xieperf` 5.0 is the +wrong client for it. A **minimal 2.3 session client now exists**: + +```sh +./xiectl23.py # against 192.168.99.2:0 +``` + +``` +extension present=1 opcode=129 first_event=64 first_error=0 +init (1,2w): REPLY len=8 010102000800000002000300... +qdefs (3,2w): REPLY len=0 0141030000... +qevents(6,1w): REPLY len=0 010004000000000002000000 01000000 01000000 01000000 +term (2,1w): TIMEOUT # Success, no reply +``` + +Order matters: `QUERY_EVENTS` returns `2,1,1,1` only **after** `INIT_SESSION`; +sent alone it returns zeroes. In the INIT reply only major `2` / minor `3` are +stable across connections; the tail words vary, so do not parse them as a fixed +capability record. + +That is the session half. Live probing has since established the resource +rules: the per-connection id base/mask, the reserved bit in new ids, slot 8 +op 2 as a working create, and the exact reason slot 21 refuses to export +(`BadMatch` from resource flag `+0x28`). The exportable object lives in the +photoflo/pipeline layer, not in slot 8. See +`evidence/xie_create_export_probe.txt`, `GHIDRA_XIE_IMAGE_PATH.md` and +`GHIDRA_XIE_PIPELINE.md` (when present). + +### Is there an XIE client inside the ROM? + +**No.** The ROM contains the XIE **server** only. A MAME trace with a breakpoint +on `XieProc` (`0x3F525CC0`) saw **zero** hits in three runs: + +| run | configuration | `XieProc` hits | +|---|---|---| +| plain boot → level-0 diagnostics | 1200 frames | 0 | +| `VT1200_SKIP_LEVEL1=1` → OS/Terminal Manager | 4500 frames | 0 | +| forced jump into the Scalution test (`0x35EA8`) | 900 frames | 0 | +| control: same tracer on the menu idle PC | 60 frames | 4,634,965 | + +The control run matters: MAME discards debugger `printf` output unless it is +started with **`-debuglog`**, which is why the first zeroes were not yet +trustworthy. With `-debuglog` the control fires, so the zeroes are real. + +The “5 - Scalution Testâ€� is a **hardware diagnostic**: its body writes the +image-option/scaler registers (`0xCA2B0`, `0xCA330`, `0xCA3A0`, `0x5600020`, +`0x5600030`, `0x5600100`) directly. It never calls the server or builds an XIE +request. The ROM’s only `Xie` strings are the server registration messages. + +So there is no working 2.3 client sequence to replay. The client in this +directory is ours, and the `PUT_TILE` band gate still has to be settled from the +server model plus live probes. Report: `MAME_XIE_TRACE.md`; reusable tracer: +`harness/mame/xie_trace.lua`. + +### Clients and tools in this directory + + + +| file | what it is | status | +|---|---|---| +| `xiectl23.py` | minimal XIE 2.3 session client: INIT_SESSION → QUERY_OP_DEFAULTS → QUERY_EVENTS → TERM_SESSION | verified against the VT1200 | +| `probe23.py` | live raw-X11 probe with a persistent connection: session, defaults, raw slots, create/sweep | used for all wire evidence | +| `xshow.c` / `xshow` | 1-bit image viewer using **core X11 PutImage**; reads the window back and compares on-pixel counts | verified on the VT1200 (`MATCH`), **not XIE** | + +`xshow` is the display half and an honest fallback, not a pure XIE image +client. The XIE path itself is now much further than the session: the create +request with a non-zero **level word at byte 28** (`2` = 1 bpp) produces an +exportable resource, and slot 21 exports it into a real X window + GC with no +error. + +Slot 20 arms the resource's bands. The request that succeeds is 35 words with +`id@4`, `byte8 = 64`, `byte12 = 2`, `byte14 = 1`, `byte16 = 1`, `byte13 = 1` +(mode). After that, `PUT_TILE` no longer returns `BadAccess`; it reaches the +class check: + +- class-2 resource (`create op 2`) → **BadMatch**: `PUT_TILE` passes class 3. +- class-3 resource (`create op 1`) → **BadIDChoice**. + +~~So the target is a class-3 resource with byte 40 == 0.~~ **WITHDRAWN — the +byte-40 rule was a misreading.** Measured instead: + +- `create op 1` and `create op 2` call the **same** routine (file `0x678DA`); + the only op-dependent value it passes is `(op == 2) ? 1 : 0`, and `op` is + also the level loop count (`DSJ` at `0x67A24`). +- `create op 1` → object class **3** but `id@0 == 0`: the ID is stored + **nowhere** in the object, so the table lookup can never find it → + `BadIDChoice`. +- `create op 2` → object class **2** with `id@0` set → addressable. +- Only payload **word 1** is accepted as the ID (any other position → create + `BadIDChoice`). +- Byte 40 is a **copy-out** field: the helper (file `0x66FA0`) copies + `*obj(0x140)` out when the caller passes a non-NULL out-param, and only the + NULL-out-param variant tests it — raising `0xE`, not `0x8`. So patching byte + 40 could never have fixed `PUT_TILE`, which is what was measured. + +So the real missing piece is **the request that both selects class 3 and +stores an ID**. Evidence: `evidence/class3_id_not_stored.txt`. + +#### The create opcode space is exhausted + +Every accepted create opcode has now been tested at its own required length: + +``` +op=1 12 words create OK allocates query BadIDChoice put BadIDChoice +op=2 12 words create OK allocates query REPLY put BadMatch +op=3 BadIDChoice +op=4 6 words "OK" allocates NOTHING, ID never addressable +op=5 7 words "OK" allocates NOTHING, ID never addressable +op=6 >=6 words "OK" existing resource left intact and queryable +``` + +`op 4` and `op 5` are not creates — both begin by looking up an *existing* +resource (`op 4` looks up payload word 2 through `0x7EA6FA0`; `op 6` looks up +payload word 1 through `0x7F174A4`). Only `op 2` yields an addressable +resource, and its class is 2. So no create opcode produces a class-3 resource +registered by ID. Evidence: `evidence/create_opcode_sweep.txt`. + +#### Slot 11 is not the class-3 bind + +`slot 11` needs exactly 3 words (2 ids) and performs **two typed lookups** +(call #1 pushes the literal `0xffff`, call #2 pushes `0`). With two valid, +queryable class-2 resources: + +``` +A=0040C000 class=2 b40=0 B=0040D000 class=2 b40=0 +slot11 [A,B] -> BadIDChoice (14) +slot11 [B,A] -> BadIDChoice (14) +after: both unchanged, both still queryable, put -> BadAccess (10) +``` + +The operand types are fixed inside the handler, so slot 11 cannot be steered to +a class-3 bind from the request. Evidence: +`evidence/slot11_bind_and_second_allocator.txt`. + +#### The element is created by EXPORT, not filled by PUT_TILE + +`element = *( *(res+44) + 0xd8 )` is **0** after create, after arm1, and after +`PUT_TILE`; it only becomes non-zero inside EXPORT (`0x1B234`: +`EX_BAND a5=003DC4B0 elem@d8=003FDA10`). No write to `element+0x28` was ever +observed. So `PUT_TILE` does not populate the element — EXPORT builds it — and +the source image pointer it copies stays 0. Evidence: +`evidence/element_pointer_timing.txt`. + +#### Export resolves the resource; only `src_base` is empty + +Values written by the export copy block (`0x1B296`), named against the +firmware's own dump strings: + +``` +rp+0x5a8 = 0x0040C000 src_res_id -> our resource, correctly resolved +rp+0x5d0 = 64 src_width +rp+0x5f0 = 64 src_height +rp+0x610 = 0 src_base <-- the pixel buffer: MISSING +rp+0x738/0x758 = 64/64 dst_img PWIDTH/PHEIGHT +``` + +So EXPORT is **not** failing to find the resource — it has the id and the +64×64 size. The single empty field is `src_base`, loaded at `0x1B238` +(`MOVE *A5(0x28),*A11(0x610)`), which no write watchpoint ever saw written. +The missing datum is a pixel buffer for the source image, produced only by the +import. Evidence: `evidence/export_renderparams_map.txt`. + +#### slot 47 is a byte-swapped dispatch trampoline — and is unreachable + +`file 0x697B4` swaps the bytes of request words at bit offsets `0x10/0x18`, +`0x20/0x28`, `0x30/0x38`, then re-dispatches through the **same** table at +`0xD3F90` (`SLL 5 ; ADDI 0xd3f90 ; MOVE *A11,A11 ; CALL A11`). + +**Tested and closed:** with breakpoints on the trampoline body +(`0x3F54BFF0` table read, `0x3F54C000` CALL — count 36→38, no command errors), +minor 47 returned `BadRequest` for plain *and* byte-swapped argument words, and +the trampoline **never executed** (0 `TRAMP` hits). So there is no +client-reachable byte-swapped request family. It is also self-referential: the +swaps cover offsets 2–7 only, never the minor byte at offset 1, so a client +request for minor 47 could only re-enter it. + +The default handler `0x64C3C` (shared by every unimplemented slot and by slot 0) +is the `BadRequest` responder — which is why probing unimplemented slots +returned `ERR1`. Evidence: `evidence/trampoline_unreachable.txt`. + +#### src_base sweep across every remaining slot — none writes it + +Each remaining implemented slot was exercised at its own required length with +`[resource_id, 0, 0…]`, in a full create→arm1→``→PUT_TILE→arm2→EXPORT +sequence, reading `rp+0x610` from the export breakpoint and diffing the window +against its pre-export content: + +``` +slot 18,40,44,33,14,15,9,13,24 : src_base = 00000000 window changed = False +``` + +Every export still resolves the source id and the 64×64 geometry +(`5a8= 5d0=40 5f0=40`), and `610=0` in every case. Coverage is now +complete: every implemented slot (`1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18 19 20 +21 22 24 33 40 43 44`, plus the `BadRequest` default and the unreachable +trampoline) has been exercised against a created resource. + +This is **not** a proof of impossibility: only one argument shape per slot was +tried. Evidence: `evidence/src_base_sweep_all_slots.txt`. + +#### Multi-operand shapes fail at the same typed-lookup wall + +The bind-family handlers (`33 40 44 18`) and `43` were then given **two and +three live ids**. Two findings: + +- The third operand is an **id**, not a flag: `slot33 [A,B,t]` for `t=1..9` + returns `BadIDChoice` with `bad = t` (and `t=0` → `BadValue`). +- With three *valid* ids the lookup still fails, because it is typed: + +``` +slot33 [A,B,A] / [A,B,B] / [A,B,C] / [A,A,A] -> BadIDChoice, bad = 3rd id +slot40 [A,B,A] / [A,B,B] -> BadValue, bad = A +slot44 [A,B,A,0] / [A,B,B,0] -> BadValue, bad = A +slot18 [A,B,0] -> BadMatch +slot43 [A,B,0...] -> BadValue +``` + +Every multi-operand request fails at a **typed lookup of one of its own +operands**: the operand exists and is queryable, but lacks the class the handler +requires. That is the same wall as `PUT_TILE`, reached from four more +directions. `src_base` stayed 0 and no window changed. Evidence: +`evidence/multi_operand_shapes.txt`. + +#### The single wall, restated precisely + +Every client-reachable path — single- and multi-operand, all implemented slots — +fails for one reason: the server's resource model requires a resource class that +its create path will not issue **with a stored id** (`create op 1` builds a class-3 +object but leaves `id@0 = 0`). Until that class can be created addressably, no +request reaches an import that would set `src_base`. + +#### Why that class cannot be created addressably — CORRECTED + +> **Superseded.** The "mutually exclusive" argument below is **wrong**: +> `op=1` *does* reach the registering body. Measured with breakpoints on +> `0x67B04`/`0x67B34`, `create op=1` registers id `0040C000` → object +> `0036A950`, which is a **class-1 photoflo** (`id@0` set, `w=3259088 h=1`, +> `query → BadAccess`). `create op=2` registers a **class-2 resource** +> (`003FD7D0`, `w=64 h=64`, `query → REPLY`). The class-3 object seen earlier +> (`class 3`, `id@0 = 0`) is an **intermediate** that is never the registered +> object. So the accurate statement is: *the id is registered to a class-1 +> photoflo or a class-2 resource; no create opcode registers a class-3 object.* +> Evidence: `evidence/registration_hits_corrected.txt`. + +#### Registration audit: only class 1 and class 2 ever get an id + +A full audit with breakpoints on `0x67B04` (ID store) and `0x67B34` (register): + +``` +arm1 / put / arm2 / slot43 / export / arm1(photoflo) / put(photoflo) -> 0 hits +create op=2 id=0040C000 -> REGIDSTORE obj=003FDA10 (class 2, query REPLY) +create op=1 id=0040D000 -> REGIDSTORE obj=00385890 (class 1, query BadAccess) +``` + +Registration happens **only inside create**, and only those two object kinds ever +receive an id. The class-3 object built by the allocator (`file 0x6CA82`) never +appears in a REGIDSTORE. + +Walking the photoflo's `+0x160` chain the way export does +(`0x1B230 MOVE *A5(0x160),A5`): + +``` +lvl0 00385890 id@0=0040D000 class=1 p44=00386010 <- resource-like +lvl1 00386010 id@0=003859D0 class=80 p44=00386290 <- first word is a pointer +lvl2 00386290 id@0=00386150 class=144 p44=003C7150 +lvl3 003C7150 id@0=003863D0 class=144 p44=00000000 chain ends +``` + +Only lvl0 has a resource layout; from lvl1 the first word is a pointer and the +"class" byte is `0x50`/`0x90`, so those are internal blocks, not resource +structs, and carry no client id. So there is **no client-visible id whose +registered object is class 3** — the two ids a client can obtain are registered +to class 2 and class 1. Evidence: `evidence/photoflo_chain_no_id.txt`. + +#### The `armF` state gets furthest: BadAccess instead of BadMatch + +Tracing the one configuration never followed before (`I` = image, `F` = photoflo): + +``` +create I 0x40C000 -> REGIDSTORE id=0040C000 obj=003FDC50 ; REGISTER +create F 0x40D000 -> REGIDSTORE id=0040D000 obj=00388090 ; REGISTER + +arm F then PUT_TILE I -> S19LOOK a8=0000000A (BadAccess, 10) +arm I then PUT_TILE I -> S19LOOK a8=00000008 (BadMatch, 8) +PUT_TILE F (unarmed) -> S19LOOK a8=0000000E (BadIDChoice, 14) +``` + +Arming the photoflo genuinely moves the typed lookup past the stage that yields +`BadMatch` and stops it at a `BadAccess` check — a real state difference and the +furthest any configuration has reached. No configuration reached the handoff +(`0x6B640`) or wrote `src_base`; the registration sites get 0 hits outside +create. + +**Caveat, recorded because it invalidates a column I have been quoting:** the +`LOOK` breakpoint at `0x6BA38` prints `cls=01` for both the armF and armI cases, +and earlier printed an incrementing `01,02,03` across calls. So `A7` there is the +**export element**, not the resource struct — its `cls`/`b40` columns are not +resource fields. Only `S19LOOK`'s return code (`a8` at `0x6A7B4`) is trustworthy. +Evidence: `evidence/armF_lookup_codes.txt`. + +#### Three more assumptions tested and falsified + +Chasing the `BadAccess`, three structural guesses were each disproved within one +step — recorded so nobody repeats them (`evidence/three_wrong_assumptions.txt`): + +1. `0x7F638C2` is **not** the allocator — file `0x1238C2` is a printf-style + logger (format descriptors `0x3fb1cea0` etc.). The real allocation is + `0x7EACA82` → file `0x6CA82`. +2. `0x7F174A4` is **not** the XIE resource lookup — file `0xD74A4` indexes a + table at `0x21FFE0` by `N = (id & 0xFFF00000) >> 12`, bounds-checked against + a count of 16 at `0x225870`. That is the **core-X client index**; for our ids + `N = 1024`, out of range, bucket reads 0. +3. `@0x1AD980`/`@0x1AD990`/`@0x1AD9A0` are **not** XIE list heads — they read + `0x02000002`, `0x04000200`, `0x00000400`, and following them as pointers + reads zeros. + +The direct observations stand (`S19LOOK a8 = 0x08 / 0x0A / 0x0E` at `0x6A7B4`), +but every *explanation* built on those three functions is now void. + +#### The slot-19 lookup is `file 0x6B966` — and it does not produce the `0x8` + +`rom:0006a7ae CALLA 0x07eab966` → file **`0x6B966`** (not the `0x66FA0` helper). +Its flow: + +``` +6B990 CALLA 0x07F174A4 ; returns an object pointer +6B99A JRNE 0x6BA8C ; null -> MOVK 0xe (BadIDChoice) +6BA8C A8 = object->byte4 ; class byte +6BA90..6BA9C class 1 -> 0x6B9C4 ; class 2 or 3 -> 0x6BA1E ; else 0xe +6BA1E arg3==NULL ? require object->byte40 == 0 (else 0xe) : copy byte40 out +6B9C4 (class 1) requires arg3 != NULL, then a two-step byte8->byte8 / + byte12->byte8 deref +``` + +It raises **only `0xE` and `0xA`** — there is no `0x8` route before `0x6BBC0`. + +Measurements that contradict a simple story, recorded as-is: + +- sweeping request payload word 5 (the `arg6` the code branches on) over + `0,1,2,0x100,0x10000,0x80000000,0xFFFFFFFF,0xFFFFFFFE` gives `BadMatch` every + time — `arg6` has no observable effect; +- the `0xE`-build site (`0x6BA86`) *did* fire during a put whose reply was `ERR8`; +- the `0xA` site (`0x6BAC6`) and an in-function `MOVK 0x8` site (`0x6BB4C`) did + **not** fire during that put; +- the shared reply helper `0x7EFFA5E` did not fire at all. + +So the `ERR8` the client receives is not produced by any site we can see, and +site-based attribution is unreliable. Evidence: +`evidence/lookup_is_6B966.txt`. + +**Bounded next step:** disassemble the remainder of `0x6B966` (`0x6BBC0..0x6BBE4`) +and the `0x6BAEA` path, logging `A8` at every return, to find the `0x8`'s true +origin. Until that is known, `BadMatch` cannot be interpreted. + +Both properties the import needs are decided in the same routine +(`file 0x678DA`): + +``` +679A2 SUBK 0x2,A11 ; MOVK 0x1,A11 +679A6 JREQ 0x679AA ; op==2 -> flag 1 +679A8 SUB A11,A11 ; else -> flag 0 +... +6CAF6 JREQ 0x6CAFC +6CAF8 MOVK 0x2,A11 ; flag!=0 -> class 2 +6CAFC MOVK 0x3,A11 ; flag==0 -> class 3 <-- 6CAFE stores it +... +67A20 MOVE *A9(0x20),A11 ; A11 = op +67A24 DSJ A11,0x67AFC ; op-1 != 0 -> jump to the REGISTERING body +67A28 ... ; op-1 == 0 -> photoflo path +67B04 MOVE *A9(0x40),*A11(0x0) ; ID -> obj+0 +67B34 CALLA 0x07F16CA2 ; register in the resource table +``` + +- `op = 1` → flag 0 → **class 3**, but `DSJ` falls through to the photoflo path + (`0x7F63A30`, 20 words, error string "error allocating photoflo"), so the ID is + **never stored and never registered**. +- `op = 2` → flag 1 → **class 2**, and `DSJ` jumps so the ID is stored and the + resource registered. + +`PUT_TILE` requires class 3 (slot 19 pushes `MOVK 0x3` before the typed lookup), +and the only class-3 producer never registers. So the import is unreachable — +**not because a request shape is missing, but because the two properties the +lookup requires cannot coexist in the implementation.** + +`op=4` was also ruled out: it increments a counter on the target (obj word at +byte 6: 1→2→3 after two calls, no new allocation) and `PUT_TILE` stays +`BadMatch` at every count. Evidence: +`evidence/class3_registration_impossible.txt`. + +### MAME trace: the limit we reached + +A single MAME instance on the host tap (`-networkprovider taptun`, +`-cfg_directory harness/mame/cfg-net`) makes the emulated terminal available at +`192.168.99.2`, and `harness/mame/xie_resource.lua` traces `XieProc` requests +and the resource lookup. With `-debuglog`, every request appears as +`XIEHIT buf=... 0181 0002 ...`, and the lookup check prints +`LOOK a7=... id=... class=... b36=... b40=...`. + +Results: + +- `PUT_TILE` can be forced through the class check with a debugger branch skip + (`0x6BAF6` → `0x6BBCE`); it then returns success — a **false success**, see + below. +- ~~The exported window is still independent of the tile data: solid-white and + solid-black tiles produce the same 64×64 pattern. That pattern is the XIE + export default/dither, not the supplied pixels.~~ **WITHDRAWN.** +- Therefore the missing piece is the **band/execute format** (the + photoflo element/bind layer), not just the class check. The class skip only + lets the request through; the data never reaches the export sink. + +#### Correction: export has never painted anything + +The `8888…2222…` pattern is the **window's own default background**, not XIE +output. Measured on one instance, one connection, 64×64 window: + +``` +BASELINE (window created+mapped+GC, NO export) nz=512 first=88888888888888882222222222222222 +AFTER (create→arm1→PUT_TILE→arm2→EXPORT) nz=512 first=88888888888888882222222222222222 +identical to baseline: True +``` + +So every white-vs-black comparison was vacuous. The measured reason export +draws nothing: the chain is intact but has no source image — + +``` +EXPORTENTRY +EXPORTFLAG f=01 ; global @0xA6220 non-zero, render path taken +EX_BAND a5=003DC4B0 elem@d8=003FDA10 ; photoflo→band→element IS present +EX_ELEM a5=003FDA10 f28=00000000 ; element+0x28 == 0 → no imported image +``` + +The driver copies `element+0x28` into the render params (`0x1B238 +MOVE *A5(0x28),*A11(0x610)`), and the per-element render loop +(`0x1BC38..0x1BF30`, element types 1–5 = crop/scale/rotate/mirror/export) +is never reached. Because the import never runs (`PUT_TILE` → `BadMatch`), +nothing fills `element+0x28`. Evidence: +`evidence/export_paints_nothing.txt`, `evidence/export_chain_trace.log`. + +The correct acceptance test is therefore **"export output differs from a +no-export baseline"**, not "export matches a known pattern". + +A band dump at slot 20's comparison (`0x6AB88`) shows the arming state +`f1=01 f2=02 f4=00010000 f8=0 f12=0 f16=0`. The **second** execute produces no +`BAND` line at all: it fails in the lookup/state path **before** the band +comparison, so no choice of the 35-word comparison fields can reach it. + +The `0x6BA38` pointer was then tested as the resource: a second connection's +before/after peek at the same address (`0x003FDA10`) returned the terminal +message string `"Connection request from IP host 192.168.99.1"`, identical +before and after `PUT_TILE`. So that breakpoint is an **unrelated lookup**, not +the XIE resource; the requested resource diff cannot be obtained with it. +`GHIDRA_XIE_IMPORT.md`'s mapping of that path is therefore wrong. Evidence: +`evidence/mame_look_not_resource.txt`. + +The real resource was then located by scanning the XIE table entry for the +client id (id followed by handler pointer `0x3F566ED0`; resource pointer at ++12). At `0x003FDC50`, the struct is +`id | class=02 | width=64 | height=64 | band-ptr@36 | ptr@44`. Its band record +is at `resource+36` (`0x008FE730`). A full before/after diff around +`PUT_TILE` shows: + +- resource struct: **byte-identical** +- band record: **byte-identical** +- XIE globals `0x1AD800..0x1ADB00`: **no changed bytes** +- second slot-20 execute: still `BadMatch` + +So the post-put gate is **not** in the resource, the band record, or that +global block. Evidence: `evidence/mame_state_diff.txt`. + +Write watchpoints during `PUT_TILE` then identified the gate: + +``` +WPHIT res addr=003FDC80 data=00000000 ; resource byte 48 = 0 +WPHIT band addr=008F6750 data=00000001 ; band byte 12 = 1 +``` + +Slot 20 ANDs `band+0x60` (byte 12) with request byte 16 and requires zero, so +after the put the second execute must use `v16 = 0`: + +``` +arm1 v16=1 -> OK +put -> OK +arm2 v16=0 -> OK +arm2 v16=2/3/4/0x10 -> BadMatch +``` + +That solves the arm-2 gate. **Export is still independent of the pixels**: +solid-white and solid-black both give `nz=512 first=88888888…2222…`. The band +sink pointer `band+0x30` is zero; poking it to the resource’s `+44` pointer did +not change that. + +Slot 7 `{op=1, type=0, id}` was then tested as the bind: with it `PUT_TILE` +returns `BadIDChoice`, and the export pattern is unchanged. So slot 7 is not +the sink bind either. Evidence: `evidence/mame_bind_slot7.txt`. + +Static decode of the payload handoff `0x7EAB640` (file `0x6B640`) shows it is +the **import-element executor**: it selects element type 1/2/3 from +`client+8`, takes the band subobject at `band+0xd8`, calls `0x7E80008`, and +clears the transient payload pointer at `band+0x28`. **`band+0x30` is not used +by the handoff at all.** So the band sink assumption was wrong; the missing +piece is the three-element pipeline definition and its export element, not the +handoff target. Evidence: `evidence/payload_handoff_6b640.txt`. + +A bit/byte correction matters: `*A9(0xd8)` is **byte 27**. The create writes the +band record pointer at byte 27 of the **`+44` array** (`u32@27 = 0x003FDA10`); +the `+36` array has zero at that byte but slot 20 does not use it for the +handoff. So the handoff itself is not a no-op; the **element array** used by +slot 20 is the one that lacks the record. + +Attempting a three-element pipeline (create with band count 3 and levels +`[2,2,2]`) makes arm 1 fail `BadMatch`; the one-band path works but export is +still data-independent. + +Populating the `+36` element record by rdebug poke (`r36+27 â†� 0x003FDA10`, the +valid band record from the `+44` array) also leaves export unchanged: +solid-white and solid-black both give `nz=512 first=88888888…2222…`. So the +export path is not driven by that element array either. Evidence: +`evidence/element_poke_no_effect.txt`, `evidence/pipeline_3_elements.txt`. + +Calling slot 21 **before** `PUT_TILE` also gives the same pattern. Slot 21 +allocates a 0xC8-byte export context, calls `0x7E5B152`, then frees the context +at `0x630B0`; the export process block reads the band’s transient payload +pointer at `band+0x28` (byte 5), which slot 19 clears after the handoff. No +ordering of the current requests captures the tile. Evidence: +`evidence/export_before_put.txt`. + +The device-dependent dispatcher `0x7E80008` (file `0x40008`) was instrumented +at its `CALL A11` (`0x40086`): **no DDCALL occurred during `PUT_TILE`**. The +tile data does not reach a DD element worker at all; the dispatcher’s early +type checks reject before the worker call, or the handoff does not reach it. + +Instrumenting the whole path then showed the stronger result: with +`XIEHIT` confirming that minor 19 reaches `XieProc`, **none** of the slot-19 +entry (`0x6A76E`), the handoff (`0x6B640`), or the DD dispatcher breakpoints +fire. The “PUT_TILE OKâ€� is the debugger branch-skip taking an early return, +not an import. The earlier `put OK` results are therefore not evidence of +import, and the minor-19 handler mapping itself needs re-verification. +Evidence: `evidence/class_skip_false_success.txt`, `evidence/no_dd_worker.txt`. + +The live dispatch table then confirmed entry 19 is correct +(`0x3F553B70` → file `0x6A76E`), and with the branch skip removed the real +trace is: + +``` +XIEHIT ... 1381 0088 ... ; minor 19 reaches XieProc +S19ENTRY ; 0x6A76E reached +S19LOOK a8=00000008 ; lookup returns BadMatch +put -> ERR8 bad=id minor=19 +no S19HANDOFF ; 0x7EAB640 never called +``` + +So the real path is blocked at the lookup: it needs a class-3 resource that is +**registered by ID**. Evidence: `evidence/dispatch_entry19.txt`. + +> **Superseded:** the "byte 40 == 0" requirement stated here and below was a +> misreading. Byte 40 is a copy-out field, and the actual reason class 3 is +> unreachable is that `create op 1` never stores the ID at `obj+0`. See +> `evidence/class3_id_not_stored.txt` and the correction near the top of this +> file. The paragraphs that follow record what was tried under the wrong +> assumption; they are kept for history, not as conclusions. + +The bind/copy helper `0x672A4` explains why no class-3 resource qualifies: +for class 2 or 3 it executes `resource+0x140 = source pointer` +(`0x673F4`). Slot 11 is a two-resource bind (lookup id@4, lookup id@8, call +`0x672A4`), so any class-2/3 resource created or bound through this helper has +a non-zero byte 40. No request in the recovered set produces class-3 with +byte 40 clear; slot 43 calls the same helper, and its type descriptors/inputs +remain the only untried route. Evidence: `evidence/bind_672a4.txt`. + +Slot 43 with the source id duplicated as its destination field +(`[A, A, 0…]`) partially changes the resource — the lookup error moves from +`BadMatch` to `BadAccess` once — but the state is unstable: with slot-20 +arming it returns to `BadMatch`, and the real `PUT_TILE` never passes. No +class-3 resource with byte 40 = 0 and a usable band is produced. Evidence: +`evidence/slot43_self.txt`. + +Instrumenting slot 43 directly (`0x65BD0` object, `0x65C46` ID store) for +`[A, 0]` gives: + +``` +S43OBJ a8=00385D90 ; object allocation hit +S43ID ; ID store NEVER hit +slot43 -> BadValue +query 0 / put 0 -> BadIDChoice +``` + +The hit object is a temporary process block; poking its first word to a valid +ID B still leaves B unaddressable (`BadIDChoice`). Slot 43 fails before the ID +store, so it does not create an addressable class-3 resource. Evidence: +`evidence/slot43_instrumentation.txt`. + +A later attempt to locate the live resource by a field-filtered scan also +failed: the `0x60000..0x180000` hits were class-0 copies, and +`0x3E0000..0x400000` contained no matching struct. The resource pointer is not +stable across runs, so the class-byte patch could not be applied to the real +resource. Evidence: `evidence/resource_scan_fail.txt`. + +A deterministic capture at `0x6CC0E` (`RESPTR a7=…`) finally gave the real +pointer. For an op-1 (class-3) resource, byte 40 was `0x003C73D0`; patching it +to 0 still made the real `PUT_TILE` return `BadIDChoice`: + +``` +resource 0x003FDC50 class 3, byte40 0x3C73D0 -> 0 +put -> ERR14 S19LOOK a8=0000000E (BadIDChoice) no S19HANDOFF +``` + +So a class-3 resource is not in the lookup table slot 19 searches, even with +byte 40 forced to 0. The class-3 namespace is separate; patching the struct +does not register it for `PUT_TILE`. Evidence: `evidence/class3_b40_patch.txt`. + +The remaining gap is the destination/sink for the tile data and the export +draw path. Evidence: `evidence/mame_put_gate.txt`, +`evidence/mame_put_watchpoints.log`. + +That leaves the same conclusion as before, now with a concrete invalidated +assumption: the post-`PUT_TILE` state is not reachable through the recovered +addresses, and the 2.3 element/state format remains unknown. + +Evidence: `evidence/xie_export_window_vt1200.png`, +`evidence/xie_export_crop.png`, `evidence/mame_xie_resource.log`, +`evidence/mame_band_arm2.log`, `evidence/mame_look_dump.log`. + +This is the honest ceiling of the current work: the **server** is understood +well enough to create, arm, put and export, but the undocumented pipeline +element format is still required to make the exported image be the client's +pixels. A working DEC XIE 2.3 client library or protocol document is the +missing external input; nothing in the ROM supplies it (`MAME_XIE_TRACE.md` +shows the built-in image test drives hardware directly and never calls XIE). + +```sh +./xiectl23.py # XIE 2.3 session +./probe23.py defaults # set/query op defaults +./probe23.py cs7 0xC0AAAA 0xFFFF # create probe + resource sweep +gcc -O2 -o xshow xshow.c -lX11 +./xshow -display 192.168.99.2:0 -pattern checker -seconds 30 +``` + + + +Other server properties that will matter once a 2.3 image client exists: + +- **Depth 1 / StaticGray.** The VT1200 root is 1 bit deep, so pipelines that + end in `ExportDrawable` must match that visual (`ConvertToIndex`/`Dither`/ + `Point`); `ExportPhotomap` tests display nothing. +- **Image files.** Run from this directory or pass + `-images xc/programs/xieperf/images`. + + +## DEC documentation + +`docs/dec/` holds DEC's own manuals, downloaded rather than guessed at: + +- `DECimage-1200-install-use-...pdf` — the closest DEC document to this + server. Appendix C says the terminal "uses a subset of the XIE protocol", + lists the supported functions (session/resource/transport/geometric/process + control) and the pipeline restrictions. +- `VT1200-user-guide-...pdf` and `VT1200-release-notes-V2.0-...pdf` — no XIE + content, but they establish what the base terminal documents. +- `DTJ-1991-v03-04-...pdf` — DEC Technical Journal article on the bitonal + image accelerator, citing *X Image Extension Concepts, Version 2.4*. +- `VXT2000-user-information-XIE3.0.pdf` — the later DEC terminal that + explicitly documents XIE protocol 3.0. +- `DECwindows-Motif-OpenVMS-XIE-support.pdf` — DECwindows Motif shipped XIE + **3.0** (`XIE$SHRLIB.EXE` + headers), not 5.0 and not the VT1200's 2.3. + +See `docs/dec/README.md` for quotes, part numbers, provenance, and the +software-media checks. DEC did not publish the 2.3 wire encoding in these +manuals, and the surviving Ultrix UWS tapes checked carry no XIE development +kit. So request numbers and lengths still come from the live probes and the +ROM analysis. + +The closest surviving **source** is already in this tree: +`xc/programs/Xserver/XIE/` is DEC/AGE's server-side implementation (protocol +5.0, `session.c` by Dean Verheiden, AGE Logic, 1993), the direct descendant of +the ROM's dispatcher. It is the structural map the Ghidra work is using. + +## Building + +It builds on a modern toolchain, without imake, using the host's X11 +headers and libraries: + +```sh +./build.sh +# built: .../xie/build/xieperf/xieperf +``` + +Requires `gcc`, `libX11-dev`, `libXmu-dev` (and `ar`). `build.sh` stages the +XIE headers as ``, compiles `xc/lib/XIE` into +`build/libXIE.a`, then compiles and links the 35 `xieperf` sources against +it with `-lXmu -lX11 -lm`. + +Flags that matter: `-std=gnu89` keeps the K&R-era source legal on GCC 16, +`-fcommon` preserves its tentative definitions, and `-w` hides the expected +prototype warnings. This was verified with GCC 16.2.1. + +The original imake build (`Imakefile`: `$(XIELIB) $(XMULIB) $(XLIB)`, +`MathLibrary`) still works in an X11R6.1 tree, but needs the whole imake +configuration. + +### Local fixes for DECwindows and modern libX11 + +Two changes were made to the vendored `xc/lib/XIE/init.c` (both marked with +comments in the source): + +1. **Display-lock deadlock.** `XieInitialize` holds the display lock and then + calls `XInitExtension`, a public Xlib function that takes the same lock. + Old single-threaded Xlib made `LockDisplay` a no-op unless `XInitThreads` + had been called, so the bug was invisible; on a modern threaded libX11 it + self-deadlocks in `pthread_mutex_lock` inside `XQueryExtension`. The lock + is now dropped around `XInitExtension` and re-taken afterwards. +2. **Extension name.** XIE's canonical name is `"XIE"`, but DECwindows + registers it as **`"Xie"`**, and extension names are case-sensitive. On + the VT1200: + + ``` + XQueryExtension("XIE") = 0 + XQueryExtension("Xie") = 1, opcode=129 event=64 error=0 + ``` + + `XieInitialize` now tries `"XIE"` and falls back to `"Xie"`. + +Without both fixes `xieperf` either hangs or reports `XIE not supported on +this display!` — neither reflects the server's actual XIE support. + +### Upstream bug: `-showtechs` alone prints usage + +In `xieperf.c` the `-showtechs` branch sets `showTechs` but not `foundOne`, +and `main` calls `usage()` when `foundOne` is false. So this is not a build +problem: + +```sh +./xieperf -display 192.168.99.2:0 -showtechs # prints usage, exits +./xieperf -display 192.168.99.2:0 -showtechs -all # works; -all sets foundOne +``` + +`-showtechs` only prints the capability list and exits before running any +test, so the extra `-all` has no other effect. + +#### The BadMatch gate: `object->byte8` must equal 3 + +The `0x8` is now located. At `0x6BAF4` the lookup compares one byte of the object +against the literal `3` that slot 19 hardcodes: + +``` +6BAEE MOVE *A13(0xff40),A11,0x0 ; = 3 +6BAF2 MOVE *A7,A7,0x0 ; 8-bit field +6BAF4 CMP A7,A11 +6BAF6 JREQ 0x6BBCE ; equal -> selector dispatch +6BAF8 ... MOVK 0x8 ; else BadMatch +``` + +Measured at the `CMP`: `GATE a7=00000001 a11=00000003`. This is exactly the +branch once "skipped" with `pc = 0x3F55DE70` to make `PUT_TILE` report success — +that was never a real path, and we now know what it bypassed. + +`byte8` is **arm-controlled**: the arm request sets it to the 16-bit field at +payload bytes 8..9 (`v12`), measured `v12 = 0,1,2,3 → byte8 = 0,1,2,3`, with +`arm = OK` for `v16 ∈ {0,1}` and `arm = ERR8` for `v16 ∈ {2,3}`. + +**Correction:** `BadAccess(10)` is the *unarmed* path, not progress. `w9=0x100` +with no arm gives `put = ERR10` and the gate is never reached; with `w9=0x300` +the arm fails, so the put was simply unarmed. With `v12=3` armed (`byte8=3`) the +gate is still not reached and neither `0x8` site fires, yet `put` returns `ERR8` +— and sweeping the tile geometry (`64×64`, `1×1`, `63,63`, `128×128`, …) changes +nothing. So `ERR8` has at least two origins in slot 19, and the one that fires +with `byte8=3` is **earlier than the lookup**. + +Evidence: `evidence/badmatch_gate_located.txt`, `evidence/arm_sets_byte8.txt`. + +#### byte8 cannot be raised by any request except create + +Clean instrumentation (`harness/mame/xie_min.lua`, **one** breakpoint) and +corrected field offsets (`byte N = ptr + N*8`, since `ptr` is a bit address). +`byte8` was previously read at `ptr+8`, which is byte **1** — those numbers were +wrong and are superseded. + +Verified mapping from create word 9: + +``` +w9 = 0x000 0x100 0x200 0x300 0x400 +b8 = 0 1 2 3 4 +b9 = 1 1 1 3 1 (b9 = (b8==3) ? 3 : 1) +``` + +Sweeping every other implemented request against a `w9=0x100` (byte8=1) +resource: + +``` +slot 43 (len 10) BadValue b8 1 -> 1 +slot 44 (len 5) BadValue b8 1 -> 1 +slot 40 (len 4) BadValue b8 1 -> 1 +slot 33 (len 4) BadValue b8 1 -> 1 +slot 24 (len 4) REPLY b8 1 -> 1 +slot 19 (len 8) BadAccess b8 1 -> 1 +``` + +**No implemented request moves `byte8`.** Only create does, via word 9's high +byte. With the arm sweep (`v12 = 0..6 × v16 = 0..3`, 28 shapes) the measured +incompatibility stands: + +``` +byte8=1 -> arm OK, put = BadMatch (gate: 1 != 3) +byte8=3 -> arm ERR8 (all 28 shapes), put = BadAccess (unarmed) +``` + +So within the client-reachable request set, `byte8` cannot be raised to 3 while +keeping the resource arm-able. The import cannot reach the handoff, `src_base` +stays 0, and EXPORT has nothing to draw. Evidence: +`evidence/byte8_slot_sweep.txt`. + +**Harness note:** with several requests outstanding on one connection the reply +stream misaligns (arm/create replies are often not read back). That does not +affect these results — `byte8` and the slot-19 error come from independent +reads — but future runs should drain between requests or use one request per +connection. + +#### The wall in code: arm needs `byte8==1`, import needs `byte8==3` + +Found by bisecting slot 20's body with **generated** bit addresses +(`harness/mame/xie_min9.lua`, `bit = 0x3F200000 + file*8` — hand arithmetic had +produced several wrong addresses earlier), valid ids, no-reply model: + +``` +w9=0x100 v14=1 : JREQ_6AB82 -> TGT_6AC34 -> EXIT_6AFDC -> SILENT (success) +w9=0x100 v14=2 : JREQ_6AB82 -> TGT_6AC34 -> E8_2_6AC5C -> BadMatch +w9=0x300 v14=3 : JREQ_6AB82 -> TGT_6AC34 -> E8_4_6ACD4 -> BadMatch +w9=0x300 v14=1 : JREQ_6AB82 -> TGT_6AC34 -> E8_4_6ACD4 -> BadMatch +``` + +The discriminating check: + +``` +6ACBE MOVE *A11(0x40),A7,0x0 ; A7 := object->byte8 +6ACC2 DSJS A7,0x6ACD2 ; byte8==1 -> OK chain +... +6ACCA MOVE *A9(0x68),A7,0x0 ; request byte 13 (mode) +6ACCE SUBK 0x3,A7 +6ACD0 JRNE 0x6AD34 ; mode != 3 -> OK path +6ACD2 MOVK 0x8 ; else BadMatch +``` + +So: + +| request | requires | +|---|---| +| arm (slot 20) | `object->byte8 == 1` (`0x6ACBE`) | +| import (slot 19) | `object->byte8 == 3` (`0x6BAF4`) | + +and `evidence/byte8_slot_sweep.txt` shows **no request changes `byte8` except +create** (`word9>>8`). With the client-reachable request set, a resource cannot be +both arm-able and import-eligible — which is why every configuration ends in +`BadMatch` / `BadAccess` / `BadIDChoice`, `src_base` never becomes non-zero, and +EXPORT has nothing to draw. + +(The `v14` value is validated separately at `0x6AC5C`; `mode != 3` is required at +`0x6AD0`.) Evidence: `evidence/arm_requires_byte8_eq1.txt`. + +#### Closure: no request writes `byte8` + +A write watchpoint on the created resource's `byte8`, armed across a complete +cycle with valid ids and the no-reply model: + +``` +create -> silent (success) obj = 003FDC50 +watch installed at 003FDC90 byte8 read-back = 1 +arm1 -> silent (success) +put -> BadMatch +arm2 -> BadMatch +export -> silent (success) + +byte8 WRITE EVENTS AFTER CREATE: 0 +``` + +Nothing after create writes `byte8`. So the only route to `byte8 == 3` is +`create word9 = 0x300`, and such a resource cannot be armed; an unarmed +resource's import returns `BadAccess` without reaching the gate. + +**Conclusion, with evidence:** a `byte8` transition into the importable state is +not reachable from the client request set. The import cannot be driven, +`src_base` stays 0, and EXPORT has nothing to draw. This closes the last +request-level door in this investigation. + +Residual possibilities are all outside that set: an internal path the watch +never observed (nothing writes it in a normal cycle), an unimplemented minor, or +the real DEC 2.3 sequence differing entirely — which its documentation would +state. Evidence: `evidence/byte8_write_watch_closure.txt`. + +#### The three residual items, tested + +The previous closure was limited to one watchpoint on one resource; all three +residuals are now tested (`evidence/residual_items_tested.txt`): + +1. **Static search for internal byte-8 writers** across every disassembled XIE + handler. Exactly one candidate exists — slot 20 `0x6ABF6..0x6AC00` + (`*A11(0x40) |= request payload byte 16`) — and it is **dead code**: it is + guarded by `*A13(0x40) != 0` at `0x6AB82`, while `*A13(0x40)` is only + *assigned* later at `0x6AD92` from a freshly allocated params block. The + measured fired-path confirms every arm goes `0x6AB82 → 0x6AC34` and never + enters that block. +2. **Runtime watch on a `w9=0x300` resource** (the type the import wants) across + four arm attempts, all `BadMatch`: **0 write events**. +3. **Unimplemented minors** as an alternate import path: all 21 unassigned + minors × lengths 2,3,4,6,8,12 = 126 requests, **every one `BadRequest`**. + +So there is no executing internal writer, no runtime writer, and no second import +entry point. The `byte8` transition into the importable state is unreachable from +the client, `src_base` stays 0, and EXPORT has nothing to draw. + +#### Slot 43 decoded: a reporting request, not an image source + +Length is exactly 10 words. It reads two resource ids (payload words 0 and 1, +looked up through `0x7EA6FA0` at `0x65640`) plus two ROI fields (words 4 and 5), +falling back to the resource's own width/height at `*A13(0x1c0)+0x80/0xa0`. + +The "descriptor tables containing 3.0 / 438.0" are **arrays of IEEE doubles**, +not descriptors — `0x3F533740` reads `00 00 00 00 00 00 08 40` = 3.0, and each +`MOVI` points 8 bytes further into the same array. Each load is followed by two +`MOVE *A8+,*A14+` (one double) and a call into the **printf family** +(`0x7FC1CE6 / 0x7FC18F6 / 0x7FC1CDE`), the same helpers used by the export +timing print and by the logger at `0x7F638C2`. + +Tested live with valid ids and the no-reply model — **17 payload shapes**, +including doubles in every position, single-id and two-id forms, and ROI-shaped +values: **every one returned `BadValue`**. Its exact ROI preconditions were not +reconstructed, but its body is printf-dominated and nothing observed connects it +to `src_base` or to any image data plane. It is therefore not credible as the +image-source element. Evidence: `evidence/slot43_decoded.txt`. + +#### Direct watch on the `src_base` slot, and slots 15 / 22 + +The `src_base` slot itself (`rp+0x610`) was watched, with `rp` captured at the +export breakpoint (`0x1B296`, `A11 = rp`) — `rp = 00913330`, slot = `00913940`. + +``` +create/arm1/put/export#1 put BadMatch, export#1 BadMatch +slot15 [id,0] silent (success) +slot22 [id] silent (success) +slot15 [id,id] silent (success) +arm2, export#2 silent (success) + +rp+0x610 after export#1 = 00000000 +rp+0x610 after export#2 = 00000000 + +18 writes at 00913940; only XIE writer is pc=3F2D91F0 (file 0x1B23E, the known +`MOVE *A5(0x28),*A11(0x610)` copy) and it writes 0. The 0x55/0xB055/0x90E6 +values are heap-fill and allocator metadata. +``` + +Slots 15 and 22 are permissive (they accept `[id,0]`, `[id,id]`, `[id]`) but +neither produces a non-zero write to `src_base`. Also confirmed: export returns +`BadMatch` if `arm2` has not been issued, and is silent/success once it has — +consistent with the earlier arm2 gate. + +So the source image buffer is never produced, by any path watched. Evidence: +`evidence/srcbase_watch_and_slots15_22.txt`. + +#### Slot 43 excluded: it validates doubles and prints, it does not source images + +`BadValue` comes from a double comparison against its table: it loads a double +(`0x3F533740` = 3.0, `0x3F533780`, `0x3F533900`, … successive 8-byte entries) and +calls `0x7FC1CE6 / 0x7FC18F6 / 0x7FC1CDE`: + +``` +658B8 CALLA 0x07FC1CDE +658BE JREQ 0x658CA ; equal -> continue +658C0 MOVK 0x2,A7 ; else BadValue +``` + +Its one element-chain block copies each element's `+0x1a8` into a **frame-local +array** for printing (`659E2 *A11(0x140) = *A7(0x1a8)`, with `A11 = A13 + i*4`), +not into the resource. Every store goes to frame locals or the params block; it +never writes `resource+0x140`, never writes `rp+0x610`, and allocates no image +buffer. + +Empirically, with a write watch on the real `src_base` (`rp = 0091F090` → +`0091F6A0`), four slot-43 shapes all returned `BadValue` and the 64 watch events +were all `00000000` or `00000055` (allocator fill) from export's own copy +(`pc=3F2D91F0`) and allocator PCs — **no non-zero image pointer**. + +So slot 43 is a reporting/describe request and cannot be the source of the image. +This closes the last implemented slot whose acceptance condition was unresolved. +Evidence: `evidence/slot43_excluded.txt`. + +#### Slot 43: acceptance precondition still not satisfied (honest status) + +The table is little-endian doubles (TMS34010 is LE): `0x3F533780 = 3.0`, +`0x3F5337C0 = 871.0`, `0x3F533800 = 873.0`, `0x3F533840 = 217.0`, +`0x3F533880 = 219.0`. + +Logging the two frame locals pushed as the operand pair at the double-compare +sites (`0x656B0` = "CMP740", `0x658B8` = "CMP900"): + +``` +[id,0,0,0,...] BadValue CMP740 a0=00000000 a1=00000000 +[id,0,3.0hi,0,...] BadValue CMP740 a0=00000000 a1=00000000 +[id,0,0,3.0hi,0,...] BadValue CMP740 a0=FFF7D264 a1=BFE800FF +``` + +`CMP900` — the site that raises `BadValue` at `0x658C0` — **never fired**, so the +rejection happens *earlier* than the comparison I was chasing, and the doubles +are not read from the payload words tried. + +**Status of the slot-43 claim:** it is excluded on *code reading* (a per-element +reporting loop copying `element+0x1a8` into a frame-local array, then printf) and +on watched evidence that no slot-43 request produced a non-zero write to +`src_base` — **not** on a completed, accepted request. Its exact acceptance +precondition remains unknown. This is recorded rather than glossed: the +implemented surface is not fully exercised until that precondition is found. +Evidence: `evidence/slot43_compare_operands.txt`. + +#### The render driver itself returns 2 to slot 43 + +Instrumented slot-43 tail (9 breakpoints, generated addresses, valid ids, isolated +connection, create drained first): + +``` +T_LOOKUP_OK 0x65646 lookup returned 0 +T_RENDER_RET 0x65BFE a8 = 00000002 <-- the DRIVER returned 2 +T_JREQ 0x65C02 non-zero path +T_FREE 0x65C06 +(T_MERGE 0x65C46 did not fire) +``` + +So slot 43 calls `0x07E5B152` (file `0x1B152`, the render/export driver) and **that +call returns 2** — which is what the client sees as `BadValue`. Neither of slot +43's own `MOVK 0x2` sites is involved. + +The single `MOVK 0x2` in the driver's first 240 instructions (`0x1B360`) is an +*element type* write (`MOVB *A11,*A5(0x58)`), not an error code, so the 2 comes +from another exit of `0x1B152`. + +**Caveat recorded:** after `T_FREE` (`0x65C06`) the code falls through to `0x65C46`, +yet that breakpoint did not fire. Either it was dropped (despite only 9 armed) or +the free call does not return normally; I did not resolve which, so the tail path +after `0x65C06` is not fully established. + +What is established: the failure is inside the **render driver**, not in slot 43's +checks, not in the import lookup, and **not the `byte8` gate**. An accepted slot 43 +would drive the render path directly. Evidence: +`evidence/render_driver_returns_2.txt`. + +#### The manual (EK-V120I-IN-001) and the documented display path + +`docs/EK-V120I-IN-001_installing-DECimage-1200.txt` — Appendix C, Table C–1 — +gives the semantic model this project had been inferring: + +- supported requests: `INIT_SESSION`, `SET/QUERY_OP_DEFAULTS`, `TERM_SESSION`, + `CREATE_BY_VALUE`, `CREATE_BY_REFERENCE`, `DELETE_RESOURCE`, `QUERY_RESOURCE`, + `EXPORT`, `FREE_EXPORT`, `QUERY_EXPORT`, `SET/ABORT_TRANSPORT`, `PUT_TILE`, + `PUT_STREAM`, `SCALE`, `ROTATE`, `MIRROR`, `CROP`, `EXECUTE_PHOTOFLO`, + `ABORT_PHOTOFLO`, `BIND_PHOTOFLO`, `TAP_PHOTOFLO`, `SELECT/QUERY_EVENTS`; +- "Always use pipelines"; elements limited to `scale, crop, rotate, mirror, + export`, at most one of each, **must always end with export**, prefer that + order, max 15; +- **`XIEP_EXPORT` "Creates a new server PIXMAP resource object"**, and images are + displayed "by copying from a pixmap … using `XCopyArea` or `XCopyPlane`"; +- `SET_OP_DEFAULTS`: **"Bits/pixel parameter value must be 1"**; +- rotate only 0/90/180/270; width/height must be 0 or match the rotated source; + tap only on an empty pipeline; no DCT; no server→client transport; +- **errors**: "The client receives a Bad Request or **Bad Match or Bad Value** X + error … Do not invoke an XIE protocol request that is implemented, but + **violates its restricted use**." + +That last point reframes much of this investigation: `BadMatch`/`BadValue` are +documented, *expected* responses to a restriction violation (including "create +non-bitonal image objects"), not bugs — and `byte8` is most likely the +**bits/pixel** field, which must be 1. + +Implemented the documented display path (`evidence/export_query_copyarea.txt`): +`EXPORT` → `QUERY_EXPORT` (op 3/4 reply, 64×64 + pointers + resource id) → +`XCopyArea` → `GetImage`. The export context reply does **not** carry a usable +pixmap XID — its id-like field varies per run (`0x00920101`, `0x00380101`, +`0x00330101`, `0x00360101`) and looks like a heap pointer; `XCopyArea` rejects +each with `BadDrawable`. Window unchanged for solid-white and solid-black. diff --git a/xie/build.sh b/xie/build.sh new file mode 100755 index 0000000..8781718 --- /dev/null +++ b/xie/build.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# Build XIElib and xieperf from the vendored X11R6.1 sources. +# +# The original imake build assumes a complete X11R6 tree. This script uses the +# host X11 headers/libraries instead (needs libX11 and libXmu development +# packages). Output: build/xieperf/xieperf +set -eu + +cd "$(dirname "$0")" +ROOT=$(pwd) +BUILD="$ROOT/build" + +CC=${CC:-gcc} +CFLAGS=${CFLAGS:--O2 -std=gnu89 -fcommon -w} + +rm -rf "$BUILD" +mkdir -p "$BUILD/include/X11/extensions" "$BUILD/xieperf" + +# XIElib.h installs as ; stage the headers in the +# layout the sources include them with. +cp xc/include/extensions/XIE.h \ + xc/include/extensions/XIEproto.h \ + xc/include/extensions/XIEprotost.h \ + xc/lib/XIE/XIElib.h \ + "$BUILD/include/X11/extensions/" + +echo "== XIElib" +for f in xc/lib/XIE/*.c; do + $CC $CFLAGS -I"$BUILD/include" -c "$f" -o "$BUILD/$(basename "${f%.c}").o" +done +ar rcs "$BUILD/libXIE.a" "$BUILD"/*.o + +echo "== xieperf" +for f in xc/programs/xieperf/*.c; do + $CC $CFLAGS -I"$BUILD/include" -Ixc/programs/xieperf \ + -c "$f" -o "$BUILD/xieperf/$(basename "${f%.c}").o" +done +$CC -o "$BUILD/xieperf/xieperf" "$BUILD"/xieperf/*.o "$BUILD/libXIE.a" \ + -lXmu -lX11 -lm + +echo "built: $BUILD/xieperf/xieperf" diff --git a/xie/build/abort.o b/xie/build/abort.o new file mode 100644 index 0000000000000000000000000000000000000000..04dc74b3bb5c62880263fa64ca96d01726041a40 GIT binary patch literal 2016 zcmbtUO-vI}5T0!-RKT_xqYap_3Gpw{P1^$j5>1!iM`8?7F`yV+=++YYgY7mcdeB%v zH^qdbH$8je$dSZ|S7N+t;sxT#gC~h~=JmaH*_4Y;@;Wo$d^7Xjn|*yYa%0q^C?G|F z>(KBd3h>a^u;bi}LjX>IerMeNGRf>;w^`+7>No(if3wwX%To=pN@Ww7?6uy(`pa8r z248$6pmL20uyXkgDuvmVcjVe-&R(qsSI`C4-)&8>%2*hy1y|m4#-ATO!R}#zWKs)u za~2kx2s3+!t$r41_AcuW7x!xTFbE4{0=j#=c;k@!J=JQJI3MIq%Rr)x>gkz?Gy>%0cD#oIRnMzpT-!8^5hmMrI6Cq z(dyqoavx&ncm$x6k_Q8!bnIZX0Pz zSo5xX1lCMZ3m^QfHj8=dyFVQD@>3qh@Y3*T`=fOh*C|IGekR0JTp?U;i6PJo z2V*Xmx3qbfS}^sRnM)_?9?T*>QnJRg$s99{gqcTVG+ivDM1x+T=`LDu9pH>f-X4J; z2%Kiv>fld0`1H}qI_pQ^XXt`asIQZ+5{N>$b3QX1ZSaK)pcR%gmNAFg%GY#CT6r^V zXqH*BKuZ{w0oq)l036VY+4RDqnO+8MK9|XuS)^ohmZ{+s-j}?8;*dPXMXlWVo1*^`ksRXAPh+gv z{5QowWPh4J{TIo6Isaz8shuh|v`r352QK;-bLUe{_v{gZZz6wy9EZ5C^(4lc<_qwt JBbQ8f{$D#G@`V5Z literal 0 HcmV?d00001 diff --git a/xie/build/await.o b/xie/build/await.o new file mode 100644 index 0000000000000000000000000000000000000000..528e197c64a0c8b07ec29580a60913c93ebadb50 GIT binary patch literal 2016 zcmbtUO-vI}5PsWMsDN!XMyr^x3Gpw{P1^$j5>1!iM`8?7F`yV+=+-v$2it8ddeB%v zH;V~JZ+iB`kt2x_uf%wl#0$ie2Tu~$nb-H)WwTs#lGmB}=9`)K-t6o1;Tt19Ng_fd za-B3iffDjC(6p1xOp*{eM$|iF=GO^o{<=-ASDB-PQ1drk-ZXr6gj&`*FzFk$gZ9-n zzzo0qgn)Go3(#8aEhvea)_Zi#8e=cp;U#bh?dvkesWlpfYT>01jPd73cerbakaSuJ zcQF$YthIUo1xk-+&N7~ys@ zIyl%bUmCqRaaoS{CN43hIPVGhn)#98CC?ATM__x z;Y53)WesJHOlEbpZWeQ?hDT-qAFdi>g>;eXT1qbgGLoy5GrU0$*LW8#u=ZibDDMuz z_c@L;Y<2J_9DMxfM4i<`@KbofAlTQ*mk|U(+&Q0VhBo=!B}6GN<_&EYv{9<-jIc_2 zPE!oMY7ix*85&V$%Vojrg6{zP z;EP4UH-T~i7UGwvPb9QX-;UNB3O>QJ=^s9hj!1j zl4#@hu#@dU6B6}7V;_9rfe;>yA(6zYq{IZJ;YHr4J{T%QV`73vx(qfpka1Zio;@KwUpvd)92R5{s@YOyZBGW5+yyW)l1@t-Ps*idA$@@<2NV31xc9mTL{>-8YZfts!Rv8neWwjyMQnKlN4``y+ z^8k~iS>p62S$P__ti-iT6`S5v%hSfo)M~ToJ&tzl-Yvzxv@3s`$5}VOsg_0$zx$!M zBfJf)wjeDVO0@Y}iv0>41HYLt5dFx6bOD=zlL<5e*XwLX!@wvIyMd|o*0?eSIuq)H z&EMFhuuG+x;-REfTI3eo0=Iz7fhJa>29deT3D^Q~+0Q3%NOSb5054vs^gbS$mpY-% zTwHN}@ylrpeWodosjLppHKvn0*P#tt%g;r5640*@f-*m4vmCgObkvJbP_kfDuu;Y^ zC2-*wFS53<7y5{Uylbcx*c1fK(CVcXY1_SfXSA{HrH&_~&D&$!V$IQQP209N?PzX7 zryv0sQ5aZUP$NDf%^-&HQ6$g4!G?+S=3XL=gr)WMb-^i6&H=u`Ir|iiTjlU6UqX(Y z^e5zKIgpSWCu>x>=|rt6?=b7yaY?Y&}as*6T zbkW$&A&o-=g&d-7dNp*JF6jcj#E6mX&ks;NlhcO)*{ApCNT1%99UO(-otNi4PaNe71VOww z{&1oMVBps+^m8s8e#IB@aTks~A@rX`#~@z+AFqJ_>EIZ*9)|Gq7Jne^eAc+|Q!X5P zR_I@G;qH8XaN!}Bei7Cv7#>xGpR)*pc=7YjeZ6?QlfS@gZF4fY0{)Yek5@nH*dgwi za%94VJEj~tNUVRr&|~m~Z{|gIM#s-H52K6BWbh$&lyDLAG>C>Hr z{^t}0d!#_rSGbEii=W-a0W9j^VpCY}FfAO0tPK3RflW-u` zLI>xA_j&(UKo?8x?rpR`;@Erh67@$Nlw&Y3zSn-ru@8Ha^V;K^h^lcIZW+Tz4de*_ zO9=9hkgym0SBs4%)A$b!$e0r!-!SCJYmYv?+yg|SPXC?5jY~Y&A#35Rn*F?!|8bWs IF1_~u04lt9L;wH) literal 0 HcmV?d00001 diff --git a/xie/build/colorlist.o b/xie/build/colorlist.o new file mode 100644 index 0000000000000000000000000000000000000000..ac9caf973d39d949061e2625468ba567cccc8f1c GIT binary patch literal 4488 zcmdT`Uu+ab7@zyoa!}YSrY095^d5?yf|qM01T>P{_DZL*8vYf5TH2$xM;o?1xZ5*D zA4ptU*(@cJ7^8_q;5+`O7u8P z3EkXmy+GZr7?_P7_ayG!T9eNwqs>eJ>}-osXNFE(;~LHtx;a*!_wYJq#MuoZBSrT$tC_ig9v7XN?bXbDjC#(!TP^u$b7q16hs{s; z0rIoXOU+zgf91MgUY>%yROsPF;bY})T{vFtvn`wc*>m;t(64ssdEfaUj`?_a4VFkDIk8P`8 z!0U{Hl|+uN3$tWJC(a;dUrJ@1pZogtSM+{;KeRQpj`I`!?8gv`VX6t+3Ol_U+`}cq z&|5B(TZCuIgVblkEoevteX}6zk^1Vuh`C?r{-SFB7s7D+Aenh%DI-ZRux?bvi zGTyo|*_LdLx24)PrZ%;vKsyXi93H$8L4*WJU>Y$@4pKmwH+e7#ytab`#v22xmM@9C z1;PoySM#+;QCZg-Cxf~cvqN24Jov*hEtb(5buH4_K+p!|vdfTbaXT~_BpYBjh;yLT zRT~*$BU*z~;2nIl`KESWS<7fZ78u;}ZIJTUh z9Wqof3q^CJWF?2lo)M#?Xk;y;1Hm2!7R(&t8KYzs3rGLDu&rD?=p(AAJo9_avbj%JTpSRSM(KNvYm@H@Fre=)lQk? zYCLl_@D2RDsCGUP=SYdC83ln<`#U*~41bBmzP^?4sD$524l~O)sc}v0TJ$3R?4SbW7PqZWC-&SzZGnZ@Nd!#($P{?0Z z@W*&O%X!|!z68FX=SRikTn}*`0z-NvoV#L3PQp=M+&}M2ILeFr?o$az`80QOTf$LZ z+@E17pC~HsD=OhAFYZ;6EFB%SvIl@$MUM}QQPD87Ny`|wNHUkTvLtz+R3Z#WmdDJI zLk6^Qa;PvmYK(!%Siv%q@QHt#^)a6x94jXe7Ym1tq6MaE literal 0 HcmV?d00001 diff --git a/xie/build/conven.o b/xie/build/conven.o new file mode 100644 index 0000000000000000000000000000000000000000..964c6759b734755d62a16321d18a8c3c9963d744 GIT binary patch literal 14816 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 I^FwX_za@zcu>b%7 literal 0 HcmV?d00001 diff --git a/xie/build/dec/MITMisc.h b/xie/build/dec/MITMisc.h new file mode 100644 index 0000000..8374c32 --- /dev/null +++ b/xie/build/dec/MITMisc.h @@ -0,0 +1,88 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/************************************************************ +Copyright 1989 by The Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +no- tice appear in all copies and that both that copyright +no- tice and this permission notice appear in supporting +docu- mentation, and that the name of MIT not be used in +advertising or publicity pertaining to distribution of the +software without specific prior written permission. +M.I.T. makes no representation about the suitability of +this software for any purpose. It is provided "as is" +without any express or implied warranty. + +********************************************************/ + +/* RANDOM CRUFT! THIS HAS NO OFFICIAL X CONSORTIUM BLESSING */ + +/* $XConsortium: MITMisc.h,v 1.4 91/07/12 10:06:43 rws Exp $ */ + +#ifndef _XMITMISC_H_ +#define _XMITMISC_H_ + +#include + +#define X_MITSetBugMode 0 +#define X_MITGetBugMode 1 + +#define MITMiscNumberEvents 0 + +#define MITMiscNumberErrors 0 + +#ifndef _MITMISC_SERVER_ + +_XFUNCPROTOBEGIN + +Bool XMITMiscQueryExtension( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* event_basep */, + int* /* error_basep */ +#endif +); + +Status XMITMiscSetBugMode( +#if NeedFunctionPrototypes + Display* /* dpy */, + Bool /* onOff */ +#endif +); + +Bool XMITMiscGetBugMode( +#if NeedFunctionPrototypes + Display* /* dpy */ +#endif +); + +_XFUNCPROTOEND + +#endif + +#endif diff --git a/xie/build/dec/X.h b/xie/build/dec/X.h new file mode 100644 index 0000000..4df7d22 --- /dev/null +++ b/xie/build/dec/X.h @@ -0,0 +1,717 @@ +/* Definitions for the X window system likely to be used by applications */ + +#ifndef X_H +#define X_H + +/*********************************************************** + +Copyright 1987, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +#define X_PROTOCOL 11 /* current protocol version */ +#define X_PROTOCOL_REVISION 0 /* current minor version */ + +/* Resources */ + +/* + * _XSERVER64 must ONLY be defined when compiling X server sources on + * systems where unsigned long is not 32 bits, must NOT be used in + * client or library code. + */ +#ifndef _XSERVER64 +# ifndef _XTYPEDEF_XID +# define _XTYPEDEF_XID +typedef unsigned long XID; +# endif +# ifndef _XTYPEDEF_MASK +# define _XTYPEDEF_MASK +typedef unsigned long Mask; +# endif +# ifndef _XTYPEDEF_ATOM +# define _XTYPEDEF_ATOM +typedef unsigned long Atom; /* Also in Xdefs.h */ +# endif +typedef unsigned long VisualID; +typedef unsigned long Time; +#else +# include +# ifndef _XTYPEDEF_XID +# define _XTYPEDEF_XID +typedef CARD32 XID; +# endif +# ifndef _XTYPEDEF_MASK +# define _XTYPEDEF_MASK +typedef CARD32 Mask; +# endif +# ifndef _XTYPEDEF_ATOM +# define _XTYPEDEF_ATOM +typedef CARD32 Atom; +# endif +typedef CARD32 VisualID; +typedef CARD32 Time; +#endif + +typedef XID Window; +typedef XID Drawable; +#ifndef _XTYPEDEF_FONT +# define _XTYPEDEF_FONT +typedef XID Font; +#endif +typedef XID Pixmap; +typedef XID Cursor; +typedef XID Colormap; +typedef XID GContext; +typedef XID KeySym; + +typedef unsigned char KeyCode; + +/***************************************************************** + * RESERVED RESOURCE AND CONSTANT DEFINITIONS + *****************************************************************/ + +#ifndef None +#define None 0L /* universal null resource or null atom */ +#endif + +#define ParentRelative 1L /* background pixmap in CreateWindow + and ChangeWindowAttributes */ + +#define CopyFromParent 0L /* border pixmap in CreateWindow + and ChangeWindowAttributes + special VisualID and special window + class passed to CreateWindow */ + +#define PointerWindow 0L /* destination window in SendEvent */ +#define InputFocus 1L /* destination window in SendEvent */ + +#define PointerRoot 1L /* focus window in SetInputFocus */ + +#define AnyPropertyType 0L /* special Atom, passed to GetProperty */ + +#define AnyKey 0L /* special Key Code, passed to GrabKey */ + +#define AnyButton 0L /* special Button Code, passed to GrabButton */ + +#define AllTemporary 0L /* special Resource ID passed to KillClient */ + +#define CurrentTime 0L /* special Time */ + +#define NoSymbol 0L /* special KeySym */ + +/***************************************************************** + * EVENT DEFINITIONS + *****************************************************************/ + +/* Input Event Masks. Used as event-mask window attribute and as arguments + to Grab requests. Not to be confused with event names. */ + +#define NoEventMask 0L +#define KeyPressMask (1L<<0) +#define KeyReleaseMask (1L<<1) +#define ButtonPressMask (1L<<2) +#define ButtonReleaseMask (1L<<3) +#define EnterWindowMask (1L<<4) +#define LeaveWindowMask (1L<<5) +#define PointerMotionMask (1L<<6) +#define PointerMotionHintMask (1L<<7) +#define Button1MotionMask (1L<<8) +#define Button2MotionMask (1L<<9) +#define Button3MotionMask (1L<<10) +#define Button4MotionMask (1L<<11) +#define Button5MotionMask (1L<<12) +#define ButtonMotionMask (1L<<13) +#define KeymapStateMask (1L<<14) +#define ExposureMask (1L<<15) +#define VisibilityChangeMask (1L<<16) +#define StructureNotifyMask (1L<<17) +#define ResizeRedirectMask (1L<<18) +#define SubstructureNotifyMask (1L<<19) +#define SubstructureRedirectMask (1L<<20) +#define FocusChangeMask (1L<<21) +#define PropertyChangeMask (1L<<22) +#define ColormapChangeMask (1L<<23) +#define OwnerGrabButtonMask (1L<<24) + +/* Event names. Used in "type" field in XEvent structures. Not to be +confused with event masks above. They start from 2 because 0 and 1 +are reserved in the protocol for errors and replies. */ + +#define KeyPress 2 +#define KeyRelease 3 +#define ButtonPress 4 +#define ButtonRelease 5 +#define MotionNotify 6 +#define EnterNotify 7 +#define LeaveNotify 8 +#define FocusIn 9 +#define FocusOut 10 +#define KeymapNotify 11 +#define Expose 12 +#define GraphicsExpose 13 +#define NoExpose 14 +#define VisibilityNotify 15 +#define CreateNotify 16 +#define DestroyNotify 17 +#define UnmapNotify 18 +#define MapNotify 19 +#define MapRequest 20 +#define ReparentNotify 21 +#define ConfigureNotify 22 +#define ConfigureRequest 23 +#define GravityNotify 24 +#define ResizeRequest 25 +#define CirculateNotify 26 +#define CirculateRequest 27 +#define PropertyNotify 28 +#define SelectionClear 29 +#define SelectionRequest 30 +#define SelectionNotify 31 +#define ColormapNotify 32 +#define ClientMessage 33 +#define MappingNotify 34 +#define GenericEvent 35 +#define LASTEvent 36 /* must be bigger than any event # */ + + +/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer, + state in various key-, mouse-, and button-related events. */ + +#define ShiftMask (1<<0) +#define LockMask (1<<1) +#define ControlMask (1<<2) +#define Mod1Mask (1<<3) +#define Mod2Mask (1<<4) +#define Mod3Mask (1<<5) +#define Mod4Mask (1<<6) +#define Mod5Mask (1<<7) + +/* modifier names. Used to build a SetModifierMapping request or + to read a GetModifierMapping request. These correspond to the + masks defined above. */ +#define ShiftMapIndex 0 +#define LockMapIndex 1 +#define ControlMapIndex 2 +#define Mod1MapIndex 3 +#define Mod2MapIndex 4 +#define Mod3MapIndex 5 +#define Mod4MapIndex 6 +#define Mod5MapIndex 7 + + +/* button masks. Used in same manner as Key masks above. Not to be confused + with button names below. */ + +#define Button1Mask (1<<8) +#define Button2Mask (1<<9) +#define Button3Mask (1<<10) +#define Button4Mask (1<<11) +#define Button5Mask (1<<12) + +#define AnyModifier (1<<15) /* used in GrabButton, GrabKey */ + + +/* button names. Used as arguments to GrabButton and as detail in ButtonPress + and ButtonRelease events. Not to be confused with button masks above. + Note that 0 is already defined above as "AnyButton". */ + +#define Button1 1 +#define Button2 2 +#define Button3 3 +#define Button4 4 +#define Button5 5 + +/* Notify modes */ + +#define NotifyNormal 0 +#define NotifyGrab 1 +#define NotifyUngrab 2 +#define NotifyWhileGrabbed 3 + +#define NotifyHint 1 /* for MotionNotify events */ + +/* Notify detail */ + +#define NotifyAncestor 0 +#define NotifyVirtual 1 +#define NotifyInferior 2 +#define NotifyNonlinear 3 +#define NotifyNonlinearVirtual 4 +#define NotifyPointer 5 +#define NotifyPointerRoot 6 +#define NotifyDetailNone 7 + +/* Visibility notify */ + +#define VisibilityUnobscured 0 +#define VisibilityPartiallyObscured 1 +#define VisibilityFullyObscured 2 + +/* Circulation request */ + +#define PlaceOnTop 0 +#define PlaceOnBottom 1 + +/* protocol families */ + +#define FamilyInternet 0 /* IPv4 */ +#define FamilyDECnet 1 +#define FamilyChaos 2 +#define FamilyInternet6 6 /* IPv6 */ + +/* authentication families not tied to a specific protocol */ +#define FamilyServerInterpreted 5 + +/* Property notification */ + +#define PropertyNewValue 0 +#define PropertyDelete 1 + +/* Color Map notification */ + +#define ColormapUninstalled 0 +#define ColormapInstalled 1 + +/* GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes */ + +#define GrabModeSync 0 +#define GrabModeAsync 1 + +/* GrabPointer, GrabKeyboard reply status */ + +#define GrabSuccess 0 +#define AlreadyGrabbed 1 +#define GrabInvalidTime 2 +#define GrabNotViewable 3 +#define GrabFrozen 4 + +/* AllowEvents modes */ + +#define AsyncPointer 0 +#define SyncPointer 1 +#define ReplayPointer 2 +#define AsyncKeyboard 3 +#define SyncKeyboard 4 +#define ReplayKeyboard 5 +#define AsyncBoth 6 +#define SyncBoth 7 + +/* Used in SetInputFocus, GetInputFocus */ + +#define RevertToNone (int)None +#define RevertToPointerRoot (int)PointerRoot +#define RevertToParent 2 + +/***************************************************************** + * ERROR CODES + *****************************************************************/ + +#define Success 0 /* everything's okay */ +#define BadRequest 1 /* bad request code */ +#define BadValue 2 /* int parameter out of range */ +#define BadWindow 3 /* parameter not a Window */ +#define BadPixmap 4 /* parameter not a Pixmap */ +#define BadAtom 5 /* parameter not an Atom */ +#define BadCursor 6 /* parameter not a Cursor */ +#define BadFont 7 /* parameter not a Font */ +#define BadMatch 8 /* parameter mismatch */ +#define BadDrawable 9 /* parameter not a Pixmap or Window */ +#define BadAccess 10 /* depending on context: + - key/button already grabbed + - attempt to free an illegal + cmap entry + - attempt to store into a read-only + color map entry. + - attempt to modify the access control + list from other than the local host. + */ +#define BadAlloc 11 /* insufficient resources */ +#define BadColor 12 /* no such colormap */ +#define BadGC 13 /* parameter not a GC */ +#define BadIDChoice 14 /* choice not in range or already used */ +#define BadName 15 /* font or color name doesn't exist */ +#define BadLength 16 /* Request length incorrect */ +#define BadImplementation 17 /* server is defective */ + +#define FirstExtensionError 128 +#define LastExtensionError 255 + +/***************************************************************** + * WINDOW DEFINITIONS + *****************************************************************/ + +/* Window classes used by CreateWindow */ +/* Note that CopyFromParent is already defined as 0 above */ + +#define InputOutput 1 +#define InputOnly 2 + +/* Window attributes for CreateWindow and ChangeWindowAttributes */ + +#define CWBackPixmap (1L<<0) +#define CWBackPixel (1L<<1) +#define CWBorderPixmap (1L<<2) +#define CWBorderPixel (1L<<3) +#define CWBitGravity (1L<<4) +#define CWWinGravity (1L<<5) +#define CWBackingStore (1L<<6) +#define CWBackingPlanes (1L<<7) +#define CWBackingPixel (1L<<8) +#define CWOverrideRedirect (1L<<9) +#define CWSaveUnder (1L<<10) +#define CWEventMask (1L<<11) +#define CWDontPropagate (1L<<12) +#define CWColormap (1L<<13) +#define CWCursor (1L<<14) + +/* ConfigureWindow structure */ + +#define CWX (1<<0) +#define CWY (1<<1) +#define CWWidth (1<<2) +#define CWHeight (1<<3) +#define CWBorderWidth (1<<4) +#define CWSibling (1<<5) +#define CWStackMode (1<<6) + + +/* Bit Gravity */ + +#define ForgetGravity 0 +#define NorthWestGravity 1 +#define NorthGravity 2 +#define NorthEastGravity 3 +#define WestGravity 4 +#define CenterGravity 5 +#define EastGravity 6 +#define SouthWestGravity 7 +#define SouthGravity 8 +#define SouthEastGravity 9 +#define StaticGravity 10 + +/* Window gravity + bit gravity above */ + +#define UnmapGravity 0 + +/* Used in CreateWindow for backing-store hint */ + +#define NotUseful 0 +#define WhenMapped 1 +#define Always 2 + +/* Used in GetWindowAttributes reply */ + +#define IsUnmapped 0 +#define IsUnviewable 1 +#define IsViewable 2 + +/* Used in ChangeSaveSet */ + +#define SetModeInsert 0 +#define SetModeDelete 1 + +/* Used in ChangeCloseDownMode */ + +#define DestroyAll 0 +#define RetainPermanent 1 +#define RetainTemporary 2 + +/* Window stacking method (in configureWindow) */ + +#define Above 0 +#define Below 1 +#define TopIf 2 +#define BottomIf 3 +#define Opposite 4 + +/* Circulation direction */ + +#define RaiseLowest 0 +#define LowerHighest 1 + +/* Property modes */ + +#define PropModeReplace 0 +#define PropModePrepend 1 +#define PropModeAppend 2 + +/***************************************************************** + * GRAPHICS DEFINITIONS + *****************************************************************/ + +/* graphics functions, as in GC.alu */ + +#define GXclear 0x0 /* 0 */ +#define GXand 0x1 /* src AND dst */ +#define GXandReverse 0x2 /* src AND NOT dst */ +#define GXcopy 0x3 /* src */ +#define GXandInverted 0x4 /* NOT src AND dst */ +#define GXnoop 0x5 /* dst */ +#define GXxor 0x6 /* src XOR dst */ +#define GXor 0x7 /* src OR dst */ +#define GXnor 0x8 /* NOT src AND NOT dst */ +#define GXequiv 0x9 /* NOT src XOR dst */ +#define GXinvert 0xa /* NOT dst */ +#define GXorReverse 0xb /* src OR NOT dst */ +#define GXcopyInverted 0xc /* NOT src */ +#define GXorInverted 0xd /* NOT src OR dst */ +#define GXnand 0xe /* NOT src OR NOT dst */ +#define GXset 0xf /* 1 */ + +/* LineStyle */ + +#define LineSolid 0 +#define LineOnOffDash 1 +#define LineDoubleDash 2 + +/* capStyle */ + +#define CapNotLast 0 +#define CapButt 1 +#define CapRound 2 +#define CapProjecting 3 + +/* joinStyle */ + +#define JoinMiter 0 +#define JoinRound 1 +#define JoinBevel 2 + +/* fillStyle */ + +#define FillSolid 0 +#define FillTiled 1 +#define FillStippled 2 +#define FillOpaqueStippled 3 + +/* fillRule */ + +#define EvenOddRule 0 +#define WindingRule 1 + +/* subwindow mode */ + +#define ClipByChildren 0 +#define IncludeInferiors 1 + +/* SetClipRectangles ordering */ + +#define Unsorted 0 +#define YSorted 1 +#define YXSorted 2 +#define YXBanded 3 + +/* CoordinateMode for drawing routines */ + +#define CoordModeOrigin 0 /* relative to the origin */ +#define CoordModePrevious 1 /* relative to previous point */ + +/* Polygon shapes */ + +#define Complex 0 /* paths may intersect */ +#define Nonconvex 1 /* no paths intersect, but not convex */ +#define Convex 2 /* wholly convex */ + +/* Arc modes for PolyFillArc */ + +#define ArcChord 0 /* join endpoints of arc */ +#define ArcPieSlice 1 /* join endpoints to center of arc */ + +/* GC components: masks used in CreateGC, CopyGC, ChangeGC, OR'ed into + GC.stateChanges */ + +#define GCFunction (1L<<0) +#define GCPlaneMask (1L<<1) +#define GCForeground (1L<<2) +#define GCBackground (1L<<3) +#define GCLineWidth (1L<<4) +#define GCLineStyle (1L<<5) +#define GCCapStyle (1L<<6) +#define GCJoinStyle (1L<<7) +#define GCFillStyle (1L<<8) +#define GCFillRule (1L<<9) +#define GCTile (1L<<10) +#define GCStipple (1L<<11) +#define GCTileStipXOrigin (1L<<12) +#define GCTileStipYOrigin (1L<<13) +#define GCFont (1L<<14) +#define GCSubwindowMode (1L<<15) +#define GCGraphicsExposures (1L<<16) +#define GCClipXOrigin (1L<<17) +#define GCClipYOrigin (1L<<18) +#define GCClipMask (1L<<19) +#define GCDashOffset (1L<<20) +#define GCDashList (1L<<21) +#define GCArcMode (1L<<22) + +#define GCLastBit 22 +/***************************************************************** + * FONTS + *****************************************************************/ + +/* used in QueryFont -- draw direction */ + +#define FontLeftToRight 0 +#define FontRightToLeft 1 + +#define FontChange 255 + +/***************************************************************** + * IMAGING + *****************************************************************/ + +/* ImageFormat -- PutImage, GetImage */ + +#define XYBitmap 0 /* depth 1, XYFormat */ +#define XYPixmap 1 /* depth == drawable depth */ +#define ZPixmap 2 /* depth == drawable depth */ + +/***************************************************************** + * COLOR MAP STUFF + *****************************************************************/ + +/* For CreateColormap */ + +#define AllocNone 0 /* create map with no entries */ +#define AllocAll 1 /* allocate entire map writeable */ + + +/* Flags used in StoreNamedColor, StoreColors */ + +#define DoRed (1<<0) +#define DoGreen (1<<1) +#define DoBlue (1<<2) + +/***************************************************************** + * CURSOR STUFF + *****************************************************************/ + +/* QueryBestSize Class */ + +#define CursorShape 0 /* largest size that can be displayed */ +#define TileShape 1 /* size tiled fastest */ +#define StippleShape 2 /* size stippled fastest */ + +/***************************************************************** + * KEYBOARD/POINTER STUFF + *****************************************************************/ + +#define AutoRepeatModeOff 0 +#define AutoRepeatModeOn 1 +#define AutoRepeatModeDefault 2 + +#define LedModeOff 0 +#define LedModeOn 1 + +/* masks for ChangeKeyboardControl */ + +#define KBKeyClickPercent (1L<<0) +#define KBBellPercent (1L<<1) +#define KBBellPitch (1L<<2) +#define KBBellDuration (1L<<3) +#define KBLed (1L<<4) +#define KBLedMode (1L<<5) +#define KBKey (1L<<6) +#define KBAutoRepeatMode (1L<<7) + +#define MappingSuccess 0 +#define MappingBusy 1 +#define MappingFailed 2 + +#define MappingModifier 0 +#define MappingKeyboard 1 +#define MappingPointer 2 + +/***************************************************************** + * SCREEN SAVER STUFF + *****************************************************************/ + +#define DontPreferBlanking 0 +#define PreferBlanking 1 +#define DefaultBlanking 2 + +#define DisableScreenSaver 0 +#define DisableScreenInterval 0 + +#define DontAllowExposures 0 +#define AllowExposures 1 +#define DefaultExposures 2 + +/* for ForceScreenSaver */ + +#define ScreenSaverReset 0 +#define ScreenSaverActive 1 + +/***************************************************************** + * HOSTS AND CONNECTIONS + *****************************************************************/ + +/* for ChangeHosts */ + +#define HostInsert 0 +#define HostDelete 1 + +/* for ChangeAccessControl */ + +#define EnableAccess 1 +#define DisableAccess 0 + +/* Display classes used in opening the connection + * Note that the statically allocated ones are even numbered and the + * dynamically changeable ones are odd numbered */ + +#define StaticGray 0 +#define GrayScale 1 +#define StaticColor 2 +#define PseudoColor 3 +#define TrueColor 4 +#define DirectColor 5 + + +/* Byte order used in imageByteOrder and bitmapBitOrder */ + +#define LSBFirst 0 +#define MSBFirst 1 + +#endif /* X_H */ diff --git a/xie/build/dec/X11/extensions/XieAppl.h b/xie/build/dec/X11/extensions/XieAppl.h new file mode 100644 index 0000000..1908e40 --- /dev/null +++ b/xie/build/dec/X11/extensions/XieAppl.h @@ -0,0 +1,295 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/******************************************************************************* +** Copyright 1989-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +** and the Massachusetts Institute of Technology, Cambridge, Massachusetts. +** +** All Rights Reserved +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, +** provided that the above copyright notice appear in all copies and that +** both that copyright notice and this permission notice appear in +** supporting documentation, and that the names of Digital or MIT not be +** used in advertising or publicity pertaining to distribution of the +** software without specific, written prior permission. +** +** DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +** ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +** DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +** ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +** +*******************************************************************************/ + +/************************************************************************ +** +** FACILITY: +** +** X Image Extension +** Sample Machine Independant DDX +** +** ABSTRACT: +** +** The Xie module contains definitions used by all of the XIE layers +** -- from the applications level through the XIE server levels. +** +** ENVIRONMENT: +** +** VAX/VMS V5.3 +** ULTRIX V3.1 +** +** AUTHOR(S): +** +** Richard J. Piccolo +** Robert NC Shelley +** +** CREATION DATE: +** +** April 20, 1989 +** +************************************************************************/ + + /* + ** Symbol XIEAPPL allows XieAppl.h to be included multiple times. + */ +#ifndef XIEAPPL +#define XIEAPPL /* The "endif" MUST be the last line of this file. */ + +/***************************************************************************** +** Constants +*****************************************************************************/ + /* + ** X Image Extension name string + */ +#define XieS_Name "Xie" + + /* + ** Number of supported Events and Errors + */ +#define XieK_NumErrors 0 +#define XieK_NumEvents 3 + /* + ** Xie Event constants + */ +#define XieK_ComputationEvent 0 +#define XieK_PhotofloEvent 1 +#define XieK_DisplayEvent 2 + /* + ** Xie Event masks + */ +#define XieM_ComputationEvent (1< +#else +#include +#endif +#endif /* XIEAPPL */ + +/* +** MACRO definitions +*/ + /* + ** Return the minimum number of bits required to contain the specified + ** number of levels. Levels == 0 indicates unconstrained data of type + ** float. <<<< remember to include math.h >>>> + */ +#define BitsFromLevels_(levels) \ + ((levels) > 2 ? ((int)(ceil(log10((double)levels)/log10(2.0)))) : \ + (levels) > 0 ? 1 : sizeof(float) * 8) + /* + ** Determine if a value is a valid pointer or an error code. + ** <<<< remember to include X.h >>>> + */ +#ifdef BadImplementation +#define IsPointer_(ptr) (((unsigned long)(ptr)) > BadImplementation) +#endif + /* + ** Convenience macros for accessing generic UdpPtr fields. + */ +#define upPxlLen_(udp) ((udp)->UdpW_PixelLength) +#define upDType_(udp) ((udp)->UdpB_DType) +#define upClass_(udp) ((udp)->UdpB_Class) +#define upBase_(udp) ((udp)->UdpA_Base) +#define upArSize_(udp) ((udp)->UdpL_ArSize) +#define upPxlStr_(udp) ((udp)->UdpL_PxlStride) +#define upScnStr_(udp) ((udp)->UdpL_ScnStride) +#define upX1_(udp) ((udp)->UdpL_X1) +#define upX2_(udp) ((udp)->UdpL_X2) +#define upY1_(udp) ((udp)->UdpL_Y1) +#define upY2_(udp) ((udp)->UdpL_Y2) +#define upWidth_(udp) ((udp)->UdpL_PxlPerScn) +#define upHeight_(udp) ((udp)->UdpL_ScnCnt) +#define upPos_(udp) ((udp)->UdpL_Pos) +#define upCmpIdx_(udp) ((udp)->UdpL_CompIdx) +#define upLvl_(udp) ((udp)->UdpL_Levels) + /* + ** Convenience macros for accessing generic UdpRec fields. + */ +#define urPxlLen_(udp) ((udp).UdpW_PixelLength) +#define urDType_(udp) ((udp).UdpB_DType) +#define urClass_(udp) ((udp).UdpB_Class) +#define urBase_(udp) ((udp).UdpA_Base) +#define urArSize_(udp) ((udp).UdpL_ArSize) +#define urPxlStr_(udp) ((udp).UdpL_PxlStride) +#define urScnStr_(udp) ((udp).UdpL_ScnStride) +#define urX1_(udp) ((udp).UdpL_X1) +#define urX2_(udp) ((udp).UdpL_X2) +#define urY1_(udp) ((udp).UdpL_Y1) +#define urY2_(udp) ((udp).UdpL_Y2) +#define urWidth_(udp) ((udp).UdpL_PxlPerScn) +#define urHeight_(udp) ((udp).UdpL_ScnCnt) +#define urPos_(udp) ((udp).UdpL_Pos) +#define urCmpIdx_(udp) ((udp).UdpL_CompIdx) +#define urLvl_(udp) ((udp).UdpL_Levels) + + /* + ** The _MD forms access memory in machine-dependant (bigendian or + ** littleendian) format. The other forms access memory in + ** image format, which is always little endian. + */ +#ifdef vax +#define READ32_(address) \ + (*((int *)(address))) +#define READ32_MD READ32_ +#else + /* + ** For machine architectures that can't access longwords + ** on non-longword aligned boundaries. + ** The (unsigned int) casts seem redundant, but they are needed + ** to make the ULTRIX/RISC compiler happy. + */ +#define READ32_(address) \ + ((unsigned int) *((unsigned char *)(address)) + \ + ((unsigned int) *(((unsigned char *)(address))+1)<< 8) + \ + ((unsigned int) *(((unsigned char *)(address))+2)<<16) + \ + ((unsigned int) *(((unsigned char *)(address))+3)<<24)) +#endif + +#ifdef BIGENDIAN +#define READ32_MD(address) \ + (*(((unsigned char *)(address))+3) + \ + (*(((unsigned char *)(address))+2)<< 8) + \ + (*(((unsigned char *)(address))+1)<<16) + \ + (* ((unsigned char *)(address)) <<24)) +#else +#define READ32_MD READ32_ +#endif + +#define GET_VALUE_(base,offset,mask) \ + (READ32_((base)+((offset)>>3))>>((offset)&7)&(mask)) +#define GET_VALUE_MD(base,offset,mask) \ + (READ32_MD((base)+((offset)>>3))>>((offset)&7)&(mask)) + +#ifdef vax +#define WRITE32_(address,value) \ + (*((int *)(address)) = (int)(value)) +#define WRITE32_MD WRITE32_ +#else +#define WRITE32_(address,value) \ + ((* ((unsigned char *)(address)) = ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+1) = (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+2) = (((int)(value))>>16)&0xff), \ + (*(((unsigned char *)(address))+3) = (((int)(value))>>24)&0xff)) +#ifdef BIGENDIAN +#define WRITE32_MD(address,value) \ + ((*(((unsigned char *)(address))+3) = ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+2) = (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+1) = (((int)(value))>>16)&0xff), \ + (* ((unsigned char *)(address)) = (((int)(value))>>24)&0xff)) +#else +#define WRITE32_MD WRITE32_ +#endif +#endif + +#ifdef vax +#define XOR_WRITE32_(address,value) \ + (*((int *)(address)) ^= (int)(value)) +#define XOR_WRITE32_MD XOR_WRITE32_ +#else +#define XOR_WRITE32_(address,value) \ + ((* ((unsigned char *)(address)) ^= ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+1) ^= (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+2) ^= (((int)(value))>>16)&0xff), \ + (*(((unsigned char *)(address))+3) ^= (((int)(value))>>24)&0xff)) +#ifdef BIGENDIAN +#define XOR_WRITE32_MD(address,value) \ + ((*(((unsigned char *)(address))+3) ^= ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+2) ^= (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+1) ^= (((int)(value))>>16)&0xff), \ + (*(((unsigned char *)(address)) ^= (((int)(value))>>24)&0xff)) +#else +#define XOR_WRITE32_MD XOR_WRITE32_ +#endif +#endif + +#define PUT_VALUE_(base,offset,value,mask) \ + (WRITE32_((base)+((offset)>>3), \ + READ32_((base)+((offset)>>3)) & ~((mask)<<((offset)&7)) \ + | (((mask)&(value))<<((offset)&0x7)))) + +#define PUT_VALUE_MD(base,offset,value,mask) \ + (WRITE32_MD((base)+((offset)>>3), \ + READ32_MD((base)+((offset)>>3)) & ~((mask)<<((offset)&7)) \ + | (((mask)&(value))<<((offset)&0x7)))) + + + /* + ** Degrees to radians conversion factor -- with inverted Y axis. + */ +#define RADIANS_PER_DEGREE -0.0174532925199432959 + /* + ** These symbols define valid UdpRec data type and class combinations. + */ +#define XieK_UBAVU 0 /* unaligned bit array */ +#define XieK_UBAV 1 /* unaligned bit array that is aligned ?? */ +#define XieK_UBSVU 2 /* unaligned bit stream */ +#define XieK_UBSV 3 /* unaligned bit stream that is aligned ?? */ +#define XieK_CLCL 4 /* change list */ +#define XieK_ABU 5 /* aligned byte array */ +#define XieK_AF 6 /* aligned float array */ +#define XieK_AWU 7 /* aligned word array */ +/* Not yet implemented +#define XieK_ALU 8 +*/ +#define XieK_DATA_TYPE_COUNT 8 + + /* + ** Defs for DDX table entry points + */ +#ifndef externalref +#if (defined(VMS) && defined(VAXC)) +#define externalref globalref +#else +#define externalref extern +#endif +#endif + + /* + ** Typedefs + */ +typedef unsigned long card32; +typedef unsigned long (*Fcard32)(); /* Used in DDX dispatch table */ + + /* + ** Data structures for passing Template IDC (kernel) data to DDX + ** routines. + */ +typedef struct { + float value; /* A template value */ + long int increment; /* Number of kernel elements skipped + * between previous and this element, + * plus 1. Zero marks end of row */ +} TmpDatEntryRec, *TmpDatEntryPtr; + +typedef struct { + long int center_x; /* Template center X coordinate */ + long int center_y; /* Template center Y coordinate */ + long int x_count; /* Template x dimension */ + long int y_count; /* Template y dimension */ + TmpDatEntryPtr array; /* Pointer to the template data + * records */ +} TmpDatRec, *TmpDatPtr; + +/***************************************************************************** +** +** Xie Ddx Index - +** +** FUNCTIONAL DESCRIPTION: +** +** The following symbols define the indices into the dispatch table +** used to call "atomic" DDX functions. These functions include both +** processing routines for the protocol functions and DDX support +** routines. +** +** WARNING: The indices here AND the order of the XieDdxProc table +** in SmiDdx.c MUST match. +** +*****************************************************************************/ + /* + ** Protocol processing routines + */ +#define D_dxArea 0 /* Protocol functions */ +#define D_dxStatsArea 1 +#define D_dxArith 2 +#define D_dxHistogram 3 +#define D_dxChromeCom 4 +#define D_dxChromeSep 5 +#define D_dxCompare 6 +#define D_dxConstrain 7 +#define D_dxCrop 8 +#define D_dxDither 9 +#define D_dxFill 10 +#define D_dxLogical 11 +#define D_dxLuminance 12 +#define D_dxMatchHistogram 13 +#define D_dxMath 14 +#define D_dxMirror 15 +#define D_dxPoint 16 +#define D_dxStatsPoint 17 +#define D_dxRotate 18 +#define D_dxScale 19 +#define D_dxTranslate 20 +#define D_dxRmOwnData 21 + /* 21..32 -- was Compression handlers */ + /* + ** DDX specific function indices + */ +#define D_dxInit 33 /* DDX Init routine */ +#define D_dxReset 34 /* " Reset */ +#define D_dxOptimizePipe 35 /* " Pipeline optimizer */ +#define D_dxConvert 36 /* Udp support routines */ +#define D_dxCopy 37 +#define D_dxGetTyp 38 +#define D_dxCopyBits 39 +#define D_dxResolveUdp 40 +#define D_dxCalloc 41 /* Memory mgt routines */ +#define D_dxCallocBits 42 +#define D_dxCfree 43 +#define D_dxFree 44 +#define D_dxFreeBits 45 +#define D_dxMalloc 46 +#define D_dxMallocBits 47 +#define D_dxRealloc 48 +#define D_dxReallocBits 49 +#define D_dxCreatePipeline 50 /* Pipeline routines */ +#define D_dxDestroyPipeline 51 +#define D_dxPipeHasYielded 52 /* was D_dxExecutePipeline */ +#define D_dxInitiatePipeline 53 +#define D_dxResumePipeline 54 +#define D_dxFlushPipeline 55 +#define D_dxAbortPipeline 56 +#define D_dxRmAllocData 57 /* Pipe resource mgr routines */ +#define D_dxRmAllocDataDesc 58 +#define D_dxRmAllocPermDesc 59 +#define D_dxRmAllocRefDesc 60 +#define D_dxRmBestDType 61 +#define D_dxRmCreateDrain 62 +#define D_dxRmCreateSink 63 +#define D_dxRmDeallocData 64 +#define D_dxRmDeallocDataDesc 65 +#define D_dxRmDestroyDrain 66 +#define D_dxRmDestroySink 67 +#define D_dxRmGetData 68 +#define D_dxRmGetDType 69 +#define D_dxRmGetMaxQuantum 70 +#define D_dxRmGetQuantum 71 +#define D_dxRmHasQuantum 72 +#define D_dxRmInitializePort 73 +#define D_dxRmMergeBuffers 75 +#define D_dxRmObtainQuantum 76 +#define D_dxRmPutData 77 +#define D_dxRmSetDType 78 +#define D_dxRmSetQuantum 79 +#define D_dxRmSplitBuffers 80 +#define D_dxSchedProcessComplete 81 /* Pipe scheduling routines */ +#define D_dxSchedProcessReady 82 +#define D_dxSchedOkToRun 83 +#define D_dxBuildChangeList 84 /* Change list routines */ +#define D_dxPutRuns 85 +#define D_dxFfsLong 86 +#define D_dxFfcLong 87 +#define D_dxFillRegion 88 /* Miscellaneous additions */ +#define D_dxConvertCpp 89 +#define D_dxCopyCpp 90 +#define D_dxEncodeG4 91 +#define D_dxEncodeDct 92 +#define D_dxDecodeG4 93 +#define D_dxDecodeDct 94 +#define D_dxPosCl 95 +#define D_dxCheckLicense 96 + /* More RM functions */ +#define D_dxRmAllocCmpDataDesc 97 /* was D_dxRmGetAlignment */ +#define D_dxRmSetAlignment 98 +#define D_dxRmCreateDataDesc 99 +#define D_dxCreatePipeCtx 100 +#define D_dxUsingCL 101 +#define D_dxCmpPreferred 102 /* was D_dxSmiDecodeG4IsAtomic */ +#define D_dxRmAllocDataArray 103 +#define D_dxRmAllocCmpPermDesc 104 +#define D_dxSchedProcessNoInput 105 + +/***************************************************************************** +** +** DDX Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the DDX functions while hiding +** the implementation from the caller. +** +*****************************************************************************/ + /* + ** DDX function access macro + ** This macro calls an arbitrary DDX routine through the + ** xieDdxProc dispatch table. + ** + ** func = the Mi function index from this file. + ** + */ +externalref card32 (*xieDdxProc[])(); +#define CallDdx_(func) (*(xieDdxProc)[func]) + /* + ** Image functions + */ +#define DdxArea_ CallDdx_(D_dxArea) +#define DdxStatsArea_ CallDdx_(D_dxStatsArea) +#define DdxArith_ CallDdx_(D_dxArith) +#define DdxHistogram_ CallDdx_(D_dxHistogram) +#define DdxChromeCom_ CallDdx_(D_dxChromeCom) +#define DdxChromeSep_ CallDdx_(D_dxChromeSep) +#define DdxCompare_ CallDdx_(D_dxCompare) +#define DdxConstrain_ CallDdx_(D_dxConstrain) +#define DdxCrop_ CallDdx_(D_dxCrop) +#define DdxDither_ CallDdx_(D_dxDither) +#define DdxFill_ CallDdx_(D_dxFill) +#define DdxLogical_ CallDdx_(D_dxLogical) +#define DdxLuminance_ CallDdx_(D_dxLuminance) +#define DdxMatchHistogram_ CallDdx_(D_dxMatchHistogram) +#define DdxMath_ CallDdx_(D_dxMath) +#define DdxMirror_ CallDdx_(D_dxMirror) +#define DdxPoint_ CallDdx_(D_dxPoint) +#define DdxStatsPoint_ CallDdx_(D_dxStatsPoint) +#define DdxRotate_ CallDdx_(D_dxRotate) +#define DdxScale_ CallDdx_(D_dxScale) +#define DdxTranslate_ CallDdx_(D_dxTranslate) +#define DdxRmOwnData_ CallDdx_(D_dxRmOwnData) + /* + ** Ddx specific functions + */ +#define DdxInit_ CallDdx_(D_dxInit) +#define DdxReset_ CallDdx_(D_dxReset) +#define DdxOptimizePipe_ CallDdx_(D_dxOptimizePipe) + /* + ** MI software functions + */ +#define DdxConvert_ CallDdx_(D_dxConvert) +#define DdxCopy_ CallDdx_(D_dxCopy) +#define DdxGetTyp_ CallDdx_(D_dxGetTyp) +#define DdxCopyBits_ CallDdx_(D_dxCopyBits) /* 65 */ +#define DdxResolveUdp_ CallDdx_(D_dxResolveUdp) + /* + ** Memory management routines + */ +#define DdxCalloc_ CallDdx_(D_dxCalloc) +#define DdxCallocBits_ (unsigned char *)CallDdx_(D_dxCallocBits) +#define DdxCfree_ CallDdx_(D_dxCfree) +#define DdxFree_ CallDdx_(D_dxFree) +#define DdxFreeBits_ (unsigned char *)CallDdx_(D_dxFreeBits) +#define DdxMalloc_ CallDdx_(D_dxMalloc) +#define DdxMallocBits_ (unsigned char *)CallDdx_(D_dxMallocBits) +#define DdxRealloc_ CallDdx_(D_dxRealloc) +#define DdxReallocBits_ (unsigned char *)CallDdx_(D_dxReallocBits) + /* + ** Pipeline support routines + */ +#define DdxCreatePipeline_ (Pipe)CallDdx_(D_dxCreatePipeline) +#define DdxDestroyPipeline_ (int)CallDdx_(D_dxDestroyPipeline) +#define DdxPipeHasYielded_ (int)CallDdx_(D_dxPipeHasYielded) +#define DdxInitiatePipeline_ (int)CallDdx_(D_dxInitiatePipeline) +#define DdxResumePipeline_ (int)CallDdx_(D_dxResumePipeline) +#define DdxFlushPipeline_ (int)CallDdx_(D_dxFlushPipeline) +#define DdxAbortPipeline_ (int)CallDdx_(D_dxAbortPipeline) + /* + ** Pipeline resource manager routines + */ +#define DdxRmAllocData_ (PipeDataPtr)CallDdx_(D_dxRmAllocData) +#define DdxRmAllocDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocDataDesc) +#define DdxRmAllocPermDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocPermDesc) +#define DdxRmAllocRefDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocRefDesc) +#define DdxRmBestDType_ (char)CallDdx_(D_dxRmBestDType) +#define DdxRmCreateDrain_ (PipeDrainPtr)CallDdx_(D_dxRmCreateDrain) +#define DdxRmCreateSink_ (PipeSinkPtr)CallDdx_(D_dxRmCreateSink) +#define DdxRmDeallocData_ (PipeDataPtr)CallDdx_(D_dxRmDeallocData) +#define DdxRmDeallocDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmDeallocDataDesc) +#define DdxRmDestroyDrain_ (PipeDrainPtr)CallDdx_(D_dxRmDestroyDrain) +#define DdxRmDestroySink_ (PipeSinkPtr)CallDdx_(D_dxRmDestroySink) +#define DdxRmGetData_ (PipeDataPtr)CallDdx_(D_dxRmGetData) +#define DdxRmGetDType_ (int)CallDdx_(D_dxRmGetDType) +#define DdxRmGetMaxQuantum_ (int)CallDdx_(D_dxRmGetMaxQuantum) +#define DdxRmGetQuantum_ (int)CallDdx_(D_dxRmGetQuantum) +#define DdxRmHasQuantum_ (int)CallDdx_(D_dxRmHasQuantum) +#define DdxRmInitializePort_ (int)CallDdx_(D_dxRmInitializePort) +#define DdxRmMergeBuffers_ (PipeDataPtr)CallDdx_(D_dxRmMergeBuffers) +#define DdxRmObtainQuantum_ (PipeDataPtr)CallDdx_(D_dxRmObtainQuantum) +#define DdxRmPutData_ (int)CallDdx_(D_dxRmPutData) +#define DdxRmSetDType_ CallDdx_(D_dxRmSetDType) +#define DdxRmSetQuantum_ CallDdx_(D_dxRmSetQuantum) +#define DdxRmSplitBuffers_ (PipeDataPtr)CallDdx_(D_dxRmSplitBuffers) + /* + ** Pipe scheduling routines + */ +#define DdxSchedProcessComplete_ (PipeElementCtxPtr)CallDdx_(D_dxSchedProcessComplete) +#define DdxSchedProcessReady_ (PipeElementCtxPtr)CallDdx_(D_dxSchedProcessReady) +#define DdxSchedOkToRun_ (int)CallDdx_(D_dxSchedOkToRun) + /* + ** Change list routines + */ +#define DdxBuildChangeList_ CallDdx_(D_dxBuildChangeList) +#define DdxPutRuns_ CallDdx_(D_dxPutRuns) +#define DdxFfsLong_ CallDdx_(D_dxFfsLong) +#define DdxFfcLong_ CallDdx_(D_dxFfcLong) + /* + ** Additions + */ +#define DdxFillRegion_ CallDdx_(D_dxFillRegion) +#define DdxConvertCpp_ CallDdx_(D_dxConvertCpp) +#define DdxCopyCpp_ CallDdx_(D_dxCopyCpp) +#define DdxEncodeG4_ CallDdx_(D_dxEncodeG4) +#define DdxEncodeDct_ CallDdx_(D_dxEncodeDct) +#define DdxDecodeG4_ CallDdx_(D_dxDecodeG4) +#define DdxDecodeDct_ CallDdx_(D_dxDecodeDct) +#define DdxPosCl_ CallDdx_(D_dxPosCl) +#define DdxCheckLicense_ CallDdx_(D_dxCheckLicense) + /* + ** More RM functions + */ +#define DdxRmAllocCmpDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocCmpDataDesc) +#define DdxRmSetAlignment_ CallDdx_(D_dxRmSetAlignment) +#define DdxRmCreateDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmCreateDataDesc) +#define DdxCreatePipeCtx_ (PipeElementCtxPtr)CallDdx_(D_dxCreatePipeCtx) +#define DdxUsingCL_ CallDdx_(D_dxUsingCL) +#define DdxCmpPreferred_ CallDdx_(D_dxCmpPreferred) +#define DdxRmAllocDataArray_ CallDdx_(D_dxRmAllocDataArray) +#define DdxRmAllocCmpPermDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocCmpPermDesc) +#define DdxSchedProcessNoInput_ (PipeElementCtxPtr)CallDdx_(D_dxSchedProcessNoInput) + +/***************************************************************************** +** +** Xie Ddx Setup Index - +** +** FUNCTIONAL DESCRIPTION: +** +** The following symbols define the indices into the dispatch table +** used to call "pipeline create" DDX functions. Each of these +** functions creates a new pipeline element. +** +** WARNING: These indices and the entries in the XieDdxSetup table +** in SmiDdx.c MUST be in the same order. +** +*****************************************************************************/ +#define D_dxCreateArea 0 +#define D_dxCreateArith 1 +#define D_dxCreateChromeCom 2 +#define D_dxCreateChromeSep 3 +#define D_dxCreateCompare 4 +#define D_dxCreateConstrain 5 +#define D_dxCreateCrop 6 +#define D_dxCreateDither 7 +#define D_dxCreateFill 8 +#define D_dxCreateLogical 9 +#define D_dxCreateLuminance 10 +#define D_dxCreateMatchHistogram 11 +#define D_dxCreateMath 12 +#define D_dxCreateMirror 13 +#define D_dxCreatePoint 14 +#define D_dxCreateRotate 15 +#define D_dxCreateScale 16 +#define D_dxCreateTranslate 17 +#define D_dxCreateDecodeDct 18 /* Compression pipeline creates */ +#define D_dxCreateEncodeDct 19 +#define D_dxCreateDecodeG4 20 +#define D_dxCreateEncodeG4 21 + +/***************************************************************************** +** +** Pipeline Create Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the Pipeline Create functions while +** hiding the implementation from the caller. +** +*****************************************************************************/ + /* + ** Pipe create function access macro + ** This macro calls a create function through the + ** xieDdxSetup dispatch table. + ** + ** func = the setup function index from this file. + ** + */ +externalref card32 (*xieDdxSetup[])(); +#define CallCreate_(func) (*(xieDdxSetup)[func]) + /* + ** Image processing pipe element creates + */ +#define DdxCreateArea_ CallCreate_(D_dxCreateArea) +#define DdxCreateArith_ CallCreate_(D_dxCreateArith) +#define DdxCreateChromeCom_ CallCreate_(D_dxCreateChromeCom) +#define DdxCreateChromeSep_ CallCreate_(D_dxCreateChromeSep) +#define DdxCreateCompare_ CallCreate_(D_dxCreateCompare) +#define DdxCreateConstrain_ CallCreate_(D_dxCreateConstrain) +#define DdxCreateCrop_ CallCreate_(D_dxCreateCrop) +#define DdxCreateDither_ CallCreate_(D_dxCreateDither) +#define DdxCreateFill_ CallCreate_(D_dxCreateFill) +#define DdxCreateLogical_ CallCreate_(D_dxCreateLogical) +#define DdxCreateLuminance_ CallCreate_(D_dxCreateLuminance) +#define DdxCreateMatchHistogram_ CallCreate_(D_dxCreateMatchHistogram) +#define DdxCreateMath_ CallCreate_(D_dxCreateMath) +#define DdxCreateMirror_ CallCreate_(D_dxCreateMirror) +#define DdxCreatePoint_ CallCreate_(D_dxCreatePoint) +#define DdxCreateRotate_ CallCreate_(D_dxCreateRotate) +#define DdxCreateScale_ CallCreate_(D_dxCreateScale) +#define DdxCreateTranslate_ CallCreate_(D_dxCreateTranslate) + /* + ** Compression creates, used by Transport + */ +#define DdxCreateDecodeDct_ CallCreate_(D_dxCreateDecodeDct) +#define DdxCreateEncodeDct_ CallCreate_(D_dxCreateEncodeDct) +#define DdxCreateDecodeG4_ CallCreate_(D_dxCreateDecodeG4) +#define DdxCreateEncodeG4_ CallCreate_(D_dxCreateEncodeG4) + +/***************************************************************************** +** +** Ddx Alignment Function Access Index +** +** FUNCTIONAL DESCRIPTION: +** +** The following symbols define the indices into the DDX Alignment +** dispatch table used to call DDX image array alignment functions. +** Each of these functions performs alignments to meet individual +** algorithms or the default DDX needs. +** +** WARNING: These indices and the entries in the XieDdxAlign table +** in SmiDdx.c MUST be in the same order. +** +** +*****************************************************************************/ +#define D_dxAlignArea 0 +#define D_dxAlignArith 1 +#define D_dxAlignChromeCom 2 +#define D_dxAlignChromeSep 3 +#define D_dxAlignCompare 4 +#define D_dxAlignConstrain 5 +#define D_dxAlignCrop 6 +#define D_dxAlignDither 7 +#define D_dxAlignFill 8 +#define D_dxAlignLogical 9 +#define D_dxAlignLuminance 10 +#define D_dxAlignMatchHistogram 11 +#define D_dxAlignMath 12 +#define D_dxAlignMirror 13 +#define D_dxAlignPoint 14 +#define D_dxAlignRotate 15 +#define D_dxAlignScale 16 +#define D_dxAlignTranslate 17 +#define D_dxAlignDecodeDct 18 +#define D_dxAlignEncodeDct 19 +#define D_dxAlignDecodeG4 20 +#define D_dxAlignEncodeG4 21 +#define D_dxAlignDefault 22 +#define D_dxAlignExport 23 + +/***************************************************************************** +** +** DDX Alignment Function Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the DDX image array alignment functions +** +*****************************************************************************/ + /* + ** Align function access macro + ** This macro calls an arbitrary Alignment routine through the + ** xieDdxAlign dispatch table. + ** + ** func = the DDX alignment function index from this file. + ** + */ +externalref card32 (*xieDdxAlign[])(); +#define GetAlign_(func) (xieDdxAlign[func]) + +#define DdxAlignArea_ GetAlign_(D_dxAlignArea) +#define DdxAlignStatsArea_ GetAlign_(D_dxAlignStatsArea) +#define DdxAlignArith_ GetAlign_(D_dxAlignArith) +#define DdxAlignHistogram_ GetAlign_(D_dxAlignHistogram) +#define DdxAlignChromeCom_ GetAlign_(D_dxAlignChromeCom) +#define DdxAlignChromeSep_ GetAlign_(D_dxAlignChromeSep) +#define DdxAlignCompare_ GetAlign_(D_dxAlignCompare) +#define DdxAlignConstrain_ GetAlign_(D_dxAlignConstrain) +#define DdxAlignCrop_ GetAlign_(D_dxAlignCrop) +#define DdxAlignDither_ GetAlign_(D_dxAlignDither) +#define DdxAlignFill_ GetAlign_(D_dxAlignFill) +#define DdxAlignLogical_ GetAlign_(D_dxAlignLogical) +#define DdxAlignLuminance_ GetAlign_(D_dxAlignLuminance) +#define DdxAlignMatchHistogram_ GetAlign_(D_dxAlignMatchHistogram) +#define DdxAlignMath_ GetAlign_(D_dxAlignMath) +#define DdxAlignMirror_ GetAlign_(D_dxAlignMirror) +#define DdxAlignPoint_ GetAlign_(D_dxAlignPoint) +#define DdxAlignStatsPoint_ GetAlign_(D_dxAlignStatsPoint) +#define DdxAlignRotate_ GetAlign_(D_dxAlignRotate) +#define DdxAlignScale_ GetAlign_(D_dxAlignScale) +#define DdxAlignTranslate_ GetAlign_(D_dxAlignTranslate) +#define DdxAlignDecodeDct_ GetAlign_(D_dxAlignDecodeDct) +#define DdxAlignEncodeDct_ GetAlign_(D_dxAlignEncodeDct) +#define DdxAlignDecodeG4_ GetAlign_(D_dxAlignDecodeG4) +#define DdxAlignEncodeG4_ GetAlign_(D_dxAlignEncodeG4) +#define DdxAlignDefault_ GetAlign_(D_dxAlignDefault) +#define DdxAlignExport_ GetAlign_(D_dxAlignExport) + +/***************************************************************************** +** +** Mi Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the "atomic" DDX functions provided +** by a Machine Independent layer of the DDX. +** +*****************************************************************************/ + /* + ** Mi function access macro + ** This macro calls an arbitrary Mi routine through the + ** xieMiProc dispatch table. + ** + ** func = the Mi function index from this file. + ** + */ +externalref card32 (*xieMiProc[])(); +#define CallMi_(func) (*(xieMiProc)[func]) + /* + ** Image functions + */ +#define MiArea_ CallMi_(D_dxArea) +#define MiStatsArea_ CallMi_(D_dxStatsArea) +#define MiArith_ CallMi_(D_dxArith) +#define MiHistogram_ CallMi_(D_dxHistogram) +#define MiChromeCom_ CallMi_(D_dxChromeCom) +#define MiChromeSep_ CallMi_(D_dxChromeSep) +#define MiCompare_ CallMi_(D_dxCompare) +#define MiConstrain_ CallMi_(D_dxConstrain) +#define MiCrop_ CallMi_(D_dxCrop) +#define MiDither_ CallMi_(D_dxDither) +#define MiFill_ CallMi_(D_dxFill) +#define MiLogical_ CallMi_(D_dxLogical) +#define MiLuminance_ CallMi_(D_dxLuminance) +#define MiMatchHistogram_ CallMi_(D_dxMatchHistogram) +#define MiMath_ CallMi_(D_dxMath) +#define MiMirror_ CallMi_(D_dxMirror) +#define MiPoint_ CallMi_(D_dxPoint) +#define MiStatsPoint_ CallMi_(D_dxStatsPoint) +#define MiRotate_ CallMi_(D_dxRotate) +#define MiScale_ CallMi_(D_dxScale) +#define MiTranslate_ CallMi_(D_dxTranslate) + /* + ** Mi specific functions + */ +#define MiInit_ CallMi_(D_dxInit) +#define MiReset_ CallMi_(D_dxReset) +#define MiOptimizePipe_ CallMi_(D_dxOptimizePipe) + /* + ** MI software functions + */ +#define MiConvert_ CallMi_(D_dxConvert) +#define MiCopy_ CallMi_(D_dxCopy) +#define MiGetTyp_ CallMi_(D_dxGetTyp) +#define MiCopyBits_ CallMi_(D_dxCopyBits) +#define MiResolveUdp_ CallMi_(D_dxResolveUdp) + /* + ** Memory management routines + */ +#define MiCalloc_ CallMi_(D_dxCalloc) +#define MiCallocBits_ (unsigned char *)CallMi_(D_dxCallocBits) +#define MiCfree_ CallMi_(D_dxCfree) +#define MiFree_ CallMi_(D_dxFree) +#define MiFreeBits_ (unsigned char *)CallMi_(D_dxFreeBits) +#define MiMalloc_ CallMi_(D_dxMalloc) +#define MiMallocBits_ (unsigned char *)CallMi_(D_dxMallocBits) +#define MiRealloc_ CallMi_(D_dxRealloc) +#define MiReallocBits_ (unsigned char *)CallMi_(D_dxReallocBits) + /* + ** Pipeline support routines + */ +#define MiCreatePipeline_ (Pipe)CallMi_(D_dxCreatePipeline) +#define MiDestroyPipeline_ (int)CallMi_(D_dxDestroyPipeline) +#define MiPipeHasYielded_ (int)CallMi_(D_dxPipeHasYielded) +#define MiInitiatePipeline_ (int)CallMi_(D_dxInitiatePipeline) +#define MiResumePipeline_ (int)CallMi_(D_dxResumePipeline) +#define MiFlushPipeline_ (int)CallMi_(D_dxFlushPipeline) +#define MiAbortPipeline_ (int)CallMi_(D_dxAbortPipeline) + /* + ** Pipeline resource manager routines + */ +#define MiRmAllocData_ (PipeDataPtr)CallMi_(D_dxRmAllocData) +#define MiRmAllocDataDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocDataDesc) +#define MiRmAllocPermDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocPermDesc) +#define MiRmAllocRefDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocRefDesc) +#define MiRmBestDType_ (char)CallMi_(D_dxRmBestDType) +#define MiRmCreateDrain_ (PipeDrainPtr)CallMi_(D_dxRmCreateDrain) +#define MiRmCreateSink_ (PipeSinkPtr)CallMi_(D_dxRmCreateSink) +#define MiRmDeallocData_ (PipeDataPtr)CallMi_(D_dxRmDeallocData) +#define MiRmDeallocDataDesc_ (PipeDataPtr)CallMi_(D_dxRmDeallocDataDesc) +#define MiRmDestroyDrain_ (PipeDrainPtr)CallMi_(D_dxRmDestroyDrain) +#define MiRmDestroySink_ (PipeSinkPtr)CallMi_(D_dxRmDestroySink) +#define MiRmGetData_ (PipeDataPtr)CallMi_(D_dxRmGetData) +#define MiRmGetDType_ (int)CallMi_(D_dxRmGetDType) +#define MiRmGetMaxQuantum_ (int)CallMi_(D_dxRmGetMaxQuantum) +#define MiRmGetQuantum_ (int)CallMi_(D_dxRmGetQuantum) +#define MiRmHasQuantum_ (int)CallMi_(D_dxRmHasQuantum) +#define MiRmInitializePort_ (int)CallMi_(D_dxRmInitializePort) +#define MiRmMergeBuffers_ (PipeDataPtr)CallMi_(D_dxRmMergeBuffers) +#define MiRmObtainQuantum_ (PipeDataPtr)CallMi_(D_dxRmObtainQuantum) +#define MiRmPutData_ (int)CallMi_(D_dxRmPutData) +#define MiRmSetDType_ CallMi_(D_dxRmSetDType) +#define MiRmSetQuantum_ CallMi_(D_dxRmSetQuantum) +#define MiRmSplitBuffers_ (PipeDataPtr)CallMi_(D_dxRmSplitBuffers) + /* + ** Pipe scheduling routines + */ +#define MiSchedProcessComplete_ (PipeElementCtxPtr)CallMi_(D_dxSchedProcessComplete) +#define MiSchedProcessReady_ (PipeElementCtxPtr)CallMi_(D_dxSchedProcessReady) +#define MiSchedOkToRun_ (int)CallMi_(D_dxSchedOkToRun) + /* + ** Change list routines + */ +#define MiBuildChangeList_ CallMi_(D_dxBuildChangeList) +#define MiPutRuns_ CallMi_(D_dxPutRuns) +#define MiFfsLong_ CallMi_(D_dxFfsLong) +#define MiFfcLong_ CallMi_(D_dxFfcLong) + /* + ** Additions + */ +#define MiFillRegion_ CallMi_(D_dxFillRegion) +#define MiConvertCpp_ CallMi_(D_dxConvertCpp) +#define MiCopyCpp_ CallMi_(D_dxCopyCpp) +#define MiEncodeG4_ CallMi_(D_dxEncodeG4) +#define MiEncodeDct_ CallMi_(D_dxEncodeDct) +#define MiDecodeG4_ CallMi_(D_dxDecodeG4) +#define MiDecodeDct_ CallMi_(D_dxDecodeDct) +#define MiPosCl_ CallMi_(D_dxPosCl) +#define MiCheckLicense_ CallMi_(D_dxCheckLicense) + /* + ** More resource manager + */ +#define MiRmAllocCmpDataDesc_ CallMi_(D_dxRmAllocCmpDataDesc) +#define MiRmSetAlignment_ CallMi_(D_dxRmSetAlignment) +#define MiRmCreateDataDesc_ (PipeDataPtr)CallMi_(D_dxRmCreateDataDesc) +#define MiCreatePipeCtx_ (PipeElementCtxPtr)CallMi_(D_dxCreatePipeCtx) +#define MiUsingCL_ CallMi_(D_dxUsingCL) +#define MiCmpPreferred_ CallMi_(D_dxCmpPreferred) +#define MiRmAllocDataArray_ CallMi_(D_dxRmAllocDataArray) +#define MiRmAllocCmpPermDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocCmpPermDesc) +#define MiSchedProcessNoInput_ (PipeElementCtxPtr)CallMi_(D_dxSchedProcessNoInput) + +/***************************************************************************** +** +** Pipeline Create Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the "pipeline create" DDX functions +** provided by a Machine Independent layer of the DDX. +** +*****************************************************************************/ + /* + ** Pipe create function access macro + ** This macro calls a create function through the + ** xieMiSetup dispatch table. + ** + ** func = the setup function index from this file. + ** + */ +externalref card32 (*xieMiSetup[])(); +#define CallMiCreate_(func) (*(xieMiSetup)[func]) + /* + ** Image processing pipe element creates + */ +#define MiCreateArea_ CallMiCreate_(D_dxCreateArea) +#define MiCreateArith_ CallMiCreate_(D_dxCreateArith) +#define MiCreateChromeCom_ CallMiCreate_(D_dxCreateChromeCom) +#define MiCreateChromeSep_ CallMiCreate_(D_dxCreateChromeSep) +#define MiCreateCompare_ CallMiCreate_(D_dxCreateCompare) +#define MiCreateConstrain_ CallMiCreate_(D_dxCreateConstrain) +#define MiCreateCrop_ CallMiCreate_(D_dxCreateCrop) +#define MiCreateDither_ CallMiCreate_(D_dxCreateDither) +#define MiCreateFill_ CallMiCreate_(D_dxCreateFill) +#define MiCreateLogical_ CallMiCreate_(D_dxCreateLogical) +#define MiCreateLuminance_ CallMiCreate_(D_dxCreateLuminance) +#define MiCreateMatchHistogram_ CallMiCreate_(D_dxCreateMatchHistogram) +#define MiCreateMath_ CallMiCreate_(D_dxCreateMath) +#define MiCreateMirror_ CallMiCreate_(D_dxCreateMirror) +#define MiCreatePoint_ CallMiCreate_(D_dxCreatePoint) +#define MiCreateRotate_ CallMiCreate_(D_dxCreateRotate) +#define MiCreateScale_ CallMiCreate_(D_dxCreateScale) +#define MiCreateTranslate_ CallMiCreate_(D_dxCreateTranslate) + /* + ** Compression creates, used by Transport + */ +#define MiCreateDecodeDct_ CallMiCreate_(D_dxCreateDecodeDct) +#define MiCreateEncodeDct_ CallMiCreate_(D_dxCreateEncodeDct) +#define MiCreateDecodeG4_ CallMiCreate_(D_dxCreateDecodeG4) +#define MiCreateEncodeG4_ CallMiCreate_(D_dxCreateEncodeG4) + +/* +** This "endif" MUST be the last line of this file. +*/ +#endif +/* end of XIEDDX -- NO DEFINITIONS ALLOWED BEYOND THIS POINT */ diff --git a/xie/build/dec/X11/extensions/XieFloat.h b/xie/build/dec/X11/extensions/XieFloat.h new file mode 100644 index 0000000..c58f26f --- /dev/null +++ b/xie/build/dec/X11/extensions/XieFloat.h @@ -0,0 +1,99 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ + +/*********************************************************** +Copyright 1990-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/************************************************************************ +** +** FACILITY: +** +** XIE - X11 Image Extension +** +** +** ABSTRACT: +** +** This module contains definitions required by the XIE library +** and XIE server floating point formatting routines. +** +** ENVIRONMENT: +** +** VAX/VMS V5.3 +** ULTRIX V3.1 +** +** AUTHOR(S): +** +** Robert NC Shelley +** +** CREATION DATE: +** +** October 31, 1990 +** +************************************************************************/ + + /* + ** Symbol XIEFLOAT allows XieFloat.h to be included multiple times. + */ +#ifndef XIEFLOAT +#define XIEFLOAT /* the "endif" MUST be the last line of this file */ + +#include /* for CARD8, ..., typedefs */ + + /* + ** Wire floating point format + */ +typedef struct _XieFloatRec { + CARD8 e_sign; + CARD8 m_sign; + CARD16 exponent; + CARD32 mantissa; +} XieFloatRec, *XieFloat; + +extern void MiEncodeDouble(); +extern double MiDecodeDouble(); + +#endif diff --git a/xie/build/dec/X11/extensions/XieLib.h b/xie/build/dec/X11/extensions/XieLib.h new file mode 100644 index 0000000..25409f9 --- /dev/null +++ b/xie/build/dec/X11/extensions/XieLib.h @@ -0,0 +1,372 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ + +/******************************************************************************* +** Copyright 1989-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +** and the Massachusetts Institute of Technology, Cambridge, Massachusetts. +** +** All Rights Reserved +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, +** provided that the above copyright notice appear in all copies and that +** both that copyright notice and this permission notice appear in +** supporting documentation, and that the names of Digital or MIT not be +** used in advertising or publicity pertaining to distribution of the +** software without specific, written prior permission. +** +** DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +** ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +** DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +** ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +** +*******************************************************************************/ + +/******************************************************************************* +** +** FACILITY: +** +** XIE - X11 Image Extension +** +** +** ABSTRACT: +** +** This module contains definitions required by all XIE client side +** layers -- from the application level through the XieLib level. +** +** ENVIRONMENT: +** +** VAX/VMS V5.3 +** ULTRIX V3.1 +** +** AUTHOR(S): +** +** Robert NC Shelley +** +** CREATION DATE: +** +** April 13, 1989 +** +*******************************************************************************/ + + /* + ** Symbol XIELIB allows XieLib.h to be included multiple times. + */ +#ifndef _XIELIB +#define _XIELIB /* the "endif" MUST be the last line of this file */ + +/* +** Include files +*/ +#ifdef VMS +#include /* X11 Library Definitions */ +#else +#include /* X11 Library Definitions */ +#endif +#ifdef VMS +#include /* universal data plane definitions */ +#include /* XIE inter-layer definitions */ +#else +#include /* universal data plane definitions */ +#include /* XIE inter-layer definitions */ +#endif + +/* +** Equated symbols +*/ + /* + ** XieCopyImage, XieGetImage, and XiePutImage image data mode constants. + */ +#define XieK_DataNone 1 /* no buffers, no transport setup, no data copy */ +#define XieK_DataFlo 2 /* prepare a Photoflo for image data transport */ +#define XieK_DataMap 3 /* prepare a Photomap for image data transport */ +#define XieK_DataAlloc 4 /* allocate image buffers containing no data */ +#define XieK_DataCopy 5 /* allocate image buffers and copy data */ +#define XieK_DataShare 6 /* copy pointers to existing image data */ + /* + ** Opaque Xie resource definitions. + */ +typedef unsigned long *XieStream; /* Stream transport context pointer */ +typedef unsigned char + *XiePhotoflo, /* Photoflo: server image pipeline object */ + *XiePhotomap, /* Photomap: permanent server image object */ + *XiePhototap, /* Phototap: ephemeral server image object */ + *XieCpp, /* Cpp: control processing plane */ + *XieRoi, /* Roi: region of interest */ + *XieTmp, /* Tmp: template (eg. convolution kernel) */ + *XiePhoto, /* Any of: XiePhotoflo, XiePhotomap, XiePhototap*/ + *XieIdc, /* Any of: XieCpp, XieRoi, XieTmp, */ + *XieResource; /* Any of: XiePhoto, XieIdc */ + +#ifdef __alpha +#define RES_XID 16 /* offset to XieResource X11 resource-id */ +#define RES_TYPE 24 /* offset to XieResource resource type */ +#define RES_MAPPING 25 /* offset to XiePhoto component mapping */ +#else +#define RES_XID 8 /* offset to XieResource X11 resource-id */ +#define RES_TYPE 12 /* offset to XieResource resource type */ +#define RES_MAPPING 13 /* offset to XiePhoto component mapping */ +#endif +/* +** Macros +*/ + /* + ** Macro for returning a resource's X11-id. + */ +#define XId_(res) (*((XID *)(&((XieResource)(res))[RES_XID]))) + /* + ** Boolean macros for determining a resource's type. + */ +#define IsPhotoflo_(res) (((XieResource)(res))[RES_TYPE]==XieK_Photoflo) +#define IsPhotomap_(res) (((XieResource)(res))[RES_TYPE]==XieK_Photomap) +#define IsPhototap_(res) (((XieResource)(res))[RES_TYPE]==XieK_Phototap) +#define IsCpp_(res) (((XieResource)(res))[RES_TYPE]==XieK_IdcCpp) +#define IsRoi_(res) (((XieResource)(res))[RES_TYPE]==XieK_IdcRoi) +#define IsTmp_(res) (((XieResource)(res))[RES_TYPE]==XieK_IdcTmp) +#define IsPhoto_(res) (IsPhotoflo_(res)||IsPhotomap_(res)||IsPhototap_(res)) +#define IsIdc_(res) (IsCpp_(res)||IsRoi_(res)||IsTmp_(res)) + /* + ** Boolean macros for determining a XiePhotomap's component mapping. + */ +#define IsBitonal_(pho) (((XiePhoto)(pho))[RES_MAPPING]==XieK_Bitonal) +#define IsGrayScale_(pho) (((XiePhoto)(pho))[RES_MAPPING]==XieK_GrayScale) +#define IsRGB_(pho) (((XiePhoto)(pho))[RES_MAPPING]==XieK_RGB) + + /* + ** Return the component count of an XiePhotomap. + */ +#define PhotoCount_(pho) (IsRGB_(pho) ? 3 : 1) + /* + ** Return the number of planes (UdpPtr's) an XieImage "should" contain. + */ +#define PlaneCount_(img) \ + ( CmpOrg_(img) == XieK_BandByPixel ? 1 \ + : CmpOrg_(img) == XieK_BandByPlane ? CmpCnt_(img) \ + : CmpLen_(img,0)+CmpLen_(img,1)+CmpLen_(img,2) ) + /* + ** Return "val" rounded up (if necessary) to a multiple of "mod". + */ +#define Modulo_(val,mod) \ + ((mod) < 2 ? (val) : (((mod) - (val) % (mod)) % (mod) + (val))) + +/* +** Structures +*/ + /* + ** XIE Client Event Structure + */ +typedef struct { + int type; /* see XQueryExtention "first_event"*/ + unsigned long serial; /* X11 serial number */ + Bool send_event; /* Boolean: true if client generated*/ + Display *display; /* X11 display pointer */ + XieResource resource; /* Xie resource-id (source of event)*/ +} XieEventRec, *XieEvent; + /* + ** Image domain context template data for XieCreateTmp / XieQueryTmp. + */ +typedef struct { + long x; /* X coordinate of template entry */ + long y; /* Y coordinate of template entry */ + double value; /* value of template entry */ +} XieTemplateRec, *XieTemplate; + /* + ** Statistics data + */ +typedef struct { + double value; + double minimum; + double maximum; + double mean; + double stddev; + double variance; +} XieStatsRec, *XieStats; + + /* + ** XIE Image structure (client side image descriptor). + */ +typedef struct { + unsigned char Compression; /* compression scheme */ + unsigned char CmpOrg; /* component organization */ + unsigned char CmpMap; /* component mapping */ + unsigned char CmpCnt; /* component count */ + unsigned long CmpLvl[XieK_MaxComponents]; /* levels per component */ + unsigned char CmpLen[XieK_MaxComponents]; /* bits per component */ + unsigned char PxlPol; /* pixel brightness polarity*/ + unsigned char PxlProg; /* pixel progression */ + unsigned char ScnProg; /* scanline progression */ + unsigned char OwnData; /* image array ownership */ + unsigned char Stream; /* Stream transport status */ + XieStream Xport; /* Stream transport context */ + double PxlRatio; /* pixel aspect ratio */ + UdpPtr Plane[XieK_MaxPlanes]; /* data plane pointers */ +} XieImageRec, *XieImage; + /* + ** Access macros for XIE Image structure. + */ +#define Cmpres_(img) ((img)->Compression) +#define CmpOrg_(img) ((img)->CmpOrg) +#define CmpMap_(img) ((img)->CmpMap) +#define CmpCnt_(img) ((img)->CmpCnt) +#define CmpLvl_(img,ind) ((img)->CmpLvl[(ind)]) +#define CmpLen_(img,ind) ((img)->CmpLen[(ind)]) +#define PxlPol_(img) ((img)->PxlPol) +#define PxlProg_(img) ((img)->PxlProg) +#define ScnProg_(img) ((img)->ScnProg) +#define OwnData_(img) ((img)->OwnData) +#define Stream_(img) ((img)->Stream) +#define StreamFinal_(img) (Stream_(img) == XieK_StreamFinal) +#define StreamError_(img) (Stream_(img) == XieK_StreamError) +#define StreamPending_(img) (!(StreamFinal_(img) || StreamError_(img))) +#define PxlRatio_(img) ((img)->PxlRatio) +#define Width_(img) ((img)->Plane[0]->UdpL_PxlPerScn) +#define Height_(img) ((img)->Plane[0]->UdpL_ScnCnt) +#define Plane_(img,ind) ((img)->Plane[(ind)]) +#define uPxlLen_(img,ind) ((img)->Plane[(ind)]->UdpW_PixelLength) +#define uDType_(img,ind) ((img)->Plane[(ind)]->UdpB_DType) +#define uClass_(img,ind) ((img)->Plane[(ind)]->UdpB_Class) +#define uBase_(img,ind) ((img)->Plane[(ind)]->UdpA_Base) +#define uArSize_(img,ind) ((img)->Plane[(ind)]->UdpL_ArSize) +#define uPxlStr_(img,ind) ((img)->Plane[(ind)]->UdpL_PxlStride) +#define uScnStr_(img,ind) ((img)->Plane[(ind)]->UdpL_ScnStride) +#define uX1_(img,ind) ((img)->Plane[(ind)]->UdpL_X1) +#define uX2_(img,ind) ((img)->Plane[(ind)]->UdpL_X2) +#define uY1_(img,ind) ((img)->Plane[(ind)]->UdpL_Y1) +#define uY2_(img,ind) ((img)->Plane[(ind)]->UdpL_Y2) +#define uWidth_(img,ind) ((img)->Plane[(ind)]->UdpL_PxlPerScn) +#define uHeight_(img,ind) ((img)->Plane[(ind)]->UdpL_ScnCnt) +#define uPos_(img,ind) ((img)->Plane[(ind)]->UdpL_Pos) +#define uCmpIdx_(img,ind) ((img)->Plane[(ind)]->UdpL_CompIdx) +#define uLvl_(img,ind) ((img)->Plane[(ind)]->UdpL_Levels) + +/* +** XieLib entry points. +*/ +#ifndef _XieLibEvents +extern unsigned long XieQueryEvents(); +extern void XieSelectEvents(); +#endif +#ifndef _XieLibImage +extern XieImage XieCopyImage(); +extern XieImage XieCreateImage(); +extern XieImage XieFreeImage(); +extern XieImage XieGetImage(); +extern unsigned char XieGetImageData(); +extern XiePhoto XiePutImage(); +extern unsigned char XiePutImageData(); +#endif +#ifndef _XieLibProcess +extern XiePhoto XieArea(); +extern XiePhoto XieAreaStats(); +extern XiePhoto XieArithmetic(); +extern XiePhoto XieChromeCom(); +extern XiePhoto XieChromeSep(); +extern XiePhoto XieCompare(); +extern XiePhoto XieConstrain(); +extern XiePhoto XieCrop(); +extern XiePhoto XieDither(); +extern XiePhoto XieFill(); +extern unsigned long *XieHistogram(); +extern XiePhoto XieLogical(); +extern XiePhoto XieLuminance(); +extern XiePhoto XieMatchHistogram(); +extern XiePhoto XieMath(); +extern XiePhoto XieMirror(); +extern XiePhoto XiePoint(); +extern void XiePointStats(); +extern XiePhoto XieRotate(); +extern XiePhoto XieScale(); +extern XiePhoto XieTranslate(); +#endif +#ifndef _XieLibResource +extern void XieAbortFlo(); +extern void XieBindMapToFlo(); +extern XiePhoto XieClonePhoto(); +extern XieCpp XieCreateCpp(); +extern XiePhoto XieCreatePhoto(); +extern XieRoi XieCreateRoi(); +extern XieTmp XieCreateTmp(); +extern void XieExecuteFlo(); +extern void XieExport(); +extern XieResource XieFindResource(); +extern void XieFreeExport(); +extern XieResource XieFreeResource(); +extern XiePhotomap XieImport(); +extern void XieQueryCpp(); +extern void XieQueryExport(); +extern unsigned long XieQueryFlo(); +extern XiePhoto XieQueryMap(); +extern void XieQueryRoi(); +extern XieTemplate XieQueryTmp(); +extern XiePhoto XieTapFlo(); +#endif +#ifndef _XieLibSession +extern char *XieCheckFunction(); +extern char **XieListFunctions(); +extern void XieQueryOpDefaults(); +extern void XieSetOpDefaults(); +#endif +#ifndef _XieLibTransport +extern void XieAbortStream(); +extern unsigned char XieGetStream(); +extern void XieGetTile(); +extern void XiePutStream(); +extern void XiePutTile(); +extern void XieSetStream(); +#endif +#ifndef _XieLibUtils +extern void *XieCalloc(); +extern unsigned char *XieCallocBits(); +extern void *XieCfree(); +extern void *XieFree(); +extern unsigned char *XieFreeBits(); +extern unsigned char XieIsBitonal(); +extern unsigned char XieIsCpp(); +extern unsigned char XieIsGrayScale(); +extern unsigned char XieIsIdc(); +extern unsigned char XieIsPhoto(); +extern unsigned char XieIsPhotoflo(); +extern unsigned char XieIsPhotomap(); +extern unsigned char XieIsPhototap(); +extern unsigned char XieIsRGB(); +extern unsigned char XieIsRoi(); +extern unsigned char XieIsTmp(); +extern void *XieMalloc(); +extern unsigned char *XieMallocBits(); +extern unsigned long XiePhotoCount(); +extern unsigned long XiePlaneCount(); +extern void *XieRealloc(); +extern unsigned char *XieReallocBits(); +extern unsigned long XieXId(); +#endif + +/* +** This "endif" MUST be the last line of this file. +*/ +#endif /* end of _XIELIB -- NO DEFINITIONS ALLOWED BEYOND THIS POINT */ diff --git a/xie/build/dec/X11/extensions/XieProto.h b/xie/build/dec/X11/extensions/XieProto.h new file mode 100644 index 0000000..2aeac5c --- /dev/null +++ b/xie/build/dec/X11/extensions/XieProto.h @@ -0,0 +1,1228 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ + +/*********************************************************** +Copyright 1989-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/************************************************************************ +** +** FACILITY: +** +** X Image Extension DIX +** +** ABSTRACT: +** +** This module contains definitions required by the XIE wire protocol +** -- XIE library and XIE server DDX layers. +** +** ENVIRONMENT: +** +** VAX/VMS V5.4 +** ULTRIX V4.0 +** +** AUTHOR(S): +** +** Richard J. Piccolo +** Robert NC Shelley +** +** CREATION DATE: +** +** March 1, 1989 +** +************************************************************************/ + + /* + ** Symbol XIEPROTO allows XieProto.h to be included multiple times. + */ +#ifndef XIEPROTO +#define XIEPROTO /* the "endif" MUST be the last line of this file */ + +/* +** Include files +*/ +#ifdef VMS +#include /* XIE inter-layer definitions */ +#include /* XIE device dependant definitions */ +#else +#include /* XIE inter-layer definitions */ +#include /* XIE device dependant definitions */ +#endif + +/* +** Wire protocol constant definitions. +*/ + /* + ** Version number + */ +#define XieK_MajorVersion 2 +#define XieK_MinorVersion 3 + +/******************************************************************************* +** Protocol request packet minor op-codes +*******************************************************************************/ +#define X_ieInitSession 1 +#define X_ieTermSession 2 + +#define X_ieQueryEvents 3 +#define X_ieSelectEvents 4 + +#define X_ieSetOpDefaults 5 +#define X_ieQueryOpDefaults 6 + +#define X_ieCreateByReference 7 +#define X_ieCreateByValue 8 +#define X_ieDeleteResource 9 +#define X_ieQueryResource 10 + +#define X_ieBindPhotomap 11 +#define X_ieAbortPhotoflo 12 +#define X_ieExecutePhotoflo 13 +#define X_ieTapPhotoflo 14 + +#define X_ieAbortTransport 15 +#define X_ieGetStream 16 +#define X_ieGetTile 17 +#define X_iePutStream 18 +#define X_iePutTile 19 +#define X_ieSetTransport 20 + +#define X_ieExport 21 +#define X_ieFreeExport 22 +#define X_ieImport 23 +#define X_ieQueryExport 24 + +#define X_ieArea 25 +#define X_ieAreaStats 26 +#define X_ieArith 27 +#define X_ieCalcHist 28 +#define X_ieChromeCom 29 +#define X_ieChromeSep 30 +#define X_ieCompare 31 +#define X_ieConstrain 32 +#define X_ieCrop 33 +#define X_ieDither 34 +#define X_ieFill 35 +#define X_ieLogical 36 +#define X_ieLuminance 37 +#define X_ieMatchHistogram 38 +#define X_ieMath 39 +#define X_ieMirror 40 +#define X_iePoint 41 +#define X_iePointStats 42 +#define X_ieRotate 43 +#define X_ieScale 44 +#define X_ieTranslate 45 + +#define X_ieLastRequest 46 + +/******************************************************************************* +** Protocol packet size definitions required by Xlibint.h +*******************************************************************************/ +#define sz_xieReq 4 +#define sz_xieInitSessionReq 8 +#define sz_xieTermSessionReq 4 + +#define sz_xieQueryEventsReq 8 +#define sz_xieSelectEventsReq 8 + +#define sz_xieSetOpDefaultsReq 20 +#define sz_xieQueryOpDefaultsReq 4 + +#define sz_xieCreateByReferenceReq 16 +#define sz_xieCreateByValueReq 12 +#define sz_xieCreateCppReq 24 +#define sz_xieCreatePhotoReq 48 +#define sz_xieCreateRoiReq 28 +#define sz_xieCreateTmpReq 24 +#define sz_xieDeleteResourceReq 12 +#define sz_xieQueryResourceReq 12 + +#define sz_xieBindPhotomapReq 12 +#define sz_xieAbortPhotofloReq 8 +#define sz_xieExecutePhotofloReq 8 +#define sz_xieTapPhotofloReq 16 + +#define sz_xieAbortTransportReq 12 +#define sz_xieGetStreamReq 16 +#define sz_xieGetTileReq 32 +#define sz_xiePutStreamReq 16 +#define sz_xiePutTileReq 32 +#define sz_xieSetTransportReq 140 + +#define sz_xieExportReq 64 +#define sz_xieFreeExportReq 8 +#define sz_xieImportReq 20 +#define sz_xieQueryExportReq 16 + +#define sz_xieAreaReq 24 +#define sz_xieAreaStatsReq 20 +#define sz_xieArithReq 36 +#define sz_xieCalcHistReq 16 +#define sz_xieChromeComReq 20 +#define sz_xieChromeSepReq 16 +#define sz_xieCompareReq 36 +#define sz_xieConstrainReq 28 +#define sz_xieCropReq 16 +#define sz_xieDitherReq 24 +#define sz_xieFillReq 28 +#define sz_xieLogicalReq 36 +#define sz_xieLuminanceReq 12 +#define sz_xieMatchHistogramReq 36 +#define sz_xieMathReq 20 +#define sz_xieMirrorReq 16 +#define sz_xiePointReq 20 +#define sz_xiePointStatsReq 20 +#define sz_xieRotateReq 40 +#define sz_xieScaleReq 20 +#define sz_xieTranslateReq 24 + +/******************************************************************************* +** Sub-structures +*******************************************************************************/ + + /* + ** Structure defining the Xie function vector. + */ +typedef struct { + CARD8 function[32]; +} XieFunctionsRec, *XieFunctionVector; + + /* + ** Structure defining IdcTmp template data crossing wire. + */ +typedef struct { + INT32 x; + INT32 y; + XieFloatRec value; +} XieTmpEntryRec, *XieTmpEntry; + +/******************************************************************************* +** Protocol request packets +*******************************************************************************/ + + /* + ** Generic part of all XIE requests + */ +typedef struct { + CARD8 reqType; /* major op-code assigned to extension */ + CARD8 opcode; /* minor op-code == XIE function */ + CARD16 length; /* length in longwords of entire request */ +} xieReq; + + /* + ** Init Session Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieInitSession */ + CARD16 length; + CARD16 major_version; + CARD16 minor_version; +} xieInitSessionReq; + + /* + ** Term Session Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieTermSession */ + CARD16 length; +} xieTermSessionReq; + + /* + ** Query Events Requests + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 event_param; +} xieQueryEventsReq; + + /* + ** Select Events Requests + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 event_mask; +} xieSelectEventsReq; + + /* + ** Set Operational Defaults + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieSetOpDefaults */ + CARD16 length; + CARD8 model; + CARD8 _pad[3]; + CARD32 levels[XieK_MaxComponents]; +} xieSetOpDefaultsReq; + + /* + ** Query Operational Defaults + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieQueryOpDefaults */ + CARD16 length; +} xieQueryOpDefaultsReq; + + /* + ** Create (ie. clone Photo{flo|map}) resource By Reference Request. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByReference*/ + CARD16 length; + CARD32 resource_type; + CARD32 resource_id; /* new Photo{flo|map}-id */ + CARD32 photomap_id; /* existing Photomap-id */ +} xieCreateByReferenceReq; + + /* + ** Generic Create resource By Value Request. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* new resource type */ + CARD32 resource_id; /* new resource identifier */ +} xieCreateByValueReq; + + /* + ** Create Cpp Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* resource type == XieK_IdcCpp */ + CARD32 resource_id; + CARD32 photomap_id; + INT32 x; + INT32 y; +} xieCreateCppReq; + + /* + ** Create Photo{flo|map} from client specified attributes. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* XieK_Photomap or XieK_Photoflo */ + CARD32 resource_id; + CARD32 width; + CARD32 height; + XieFloatRec aspect_ratio; + CARD32 levels[XieK_MaxComponents]; + CARD8 number_of_components; + CARD8 component_mapping; + CARD8 pixel_progression; + CARD8 line_progression; + CARD8 polarity; + CARD8 _pad[3]; +} xieCreatePhotoReq; + + /* + ** Create Roi Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* resource type == XieK_IdcRoi */ + CARD32 resource_id; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; +} xieCreateRoiReq; + + /* + ** Create Tmp Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* resource type == XieK_IdcTmp */ + CARD32 resource_id; + INT32 center_x; + INT32 center_y; + CARD32 data_count; /* number of XieTmpEntryRec's */ +/* XieTmpEntryRec data[data_count] /* list of XieTmpEntryRec */ +} xieCreateTmpReq; + + /* + ** Delete resource request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieDeleteResource */ + CARD16 length; + CARD32 resource_type; + CARD32 resource_id; +} xieDeleteResourceReq; + + /* + ** Query resource request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieQueryResource */ + CARD16 length; + CARD32 resource_type; + CARD32 resource_id; +} xieQueryResourceReq; + + /* + ** Bind an existing Photomap to an existing Photoflo. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieBindPhotomap */ + CARD16 length; + CARD32 photoflo_id; + CARD32 photomap_id; +} xieBindPhotomapReq; + + /* + ** Abort Photoflo request. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieAbortPhotoflo */ + CARD16 length; + CARD32 photoflo_id; +} xieAbortPhotofloReq; + + /* + ** Execute Photoflo Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieExecutePhotoflo */ + CARD16 length; + CARD32 photoflo_id; +} xieExecutePhotofloReq; + + /* + ** Tap Photoflo Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieTapPhotoflo */ + CARD16 length; + CARD32 photoflo_id; + CARD32 photo_id; + BOOL permanent; + CARD8 _pad[3]; +} xieTapPhotofloReq; + + /* + ** Abort transport Request (release transport resources) + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieAbortTransport */ + CARD16 length; + CARD32 photo_id; + CARD32 plane_mask; +} xieAbortTransportReq; + + /* + ** Get Stream Request (transport image data: server --> client) + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieGetStream */ + CARD16 length; + CARD32 photo_id; + CARD32 max_bytes; /* maximum return image data length */ + CARD8 plane_num; + CARD8 _pad[3]; +} xieGetStreamReq; + + /* + ** Get Tile Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieGetTile */ + CARD16 length; + CARD32 photomap_id; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; + CARD32 plane_mask; + BOOL final; + CARD8 _pad[3]; +} xieGetTileReq; + + /* + ** Put Stream Request (transport image data: client --> server) + */ +typedef struct _xiePutStreamReq { + CARD8 reqType; + CARD8 opcode; /* function == X_iePutStream */ + CARD16 length; + CARD32 photo_id; + CARD32 byte_count; /* image plane data length in bytes */ + BOOL final; + CARD8 plane_num; + CARD8 _pad[2]; +} xiePutStreamReq; + + /* + ** Put Tile Request (transport image data: client --> server) + */ +typedef struct _xiePutTileReq { + CARD8 reqType; + CARD8 opcode; /* function == X_iePutTile */ + CARD16 length; + CARD32 photomap_id; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; + CARD32 plane_mask; + BOOL final; + CARD8 _pad[3]; +} xiePutTileReq; + + /* + ** Set transport Request (set transport parameters) + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieSetTransport */ + CARD16 length; + CARD32 photo_id; + CARD32 compression_parameter; + CARD8 compression_scheme; + CARD8 mode; + CARD8 component_organization; + CARD8 _pad; + CARD32 plane_mask; + CARD8 pixel_stride[XieK_MaxPlanes]; + CARD32 scanline_stride[XieK_MaxPlanes]; +} xieSetTransportReq; + + /* + ** Export image data to drawable Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieExport */ + CARD16 length; + CARD32 photo_id; + CARD32 drawable_id; + CARD32 gc_id; + INT32 src_x; + INT32 src_y; + CARD32 width; + CARD32 height; + INT32 dst_x; + INT32 dst_y; + CARD32 photo_lut_id; + CARD32 colormap_id; + XieFloatRec match_limit; + XieFloatRec gray_limit; +} xieExportReq; + + /* + ** Free ExportContext from Photomap Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieFreeExport */ + CARD16 length; + CARD32 photo_id; +} xieFreeExportReq; + + /* + ** Import image data from drawable Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieImport */ + CARD16 length; + CARD32 photomap_id; + CARD32 drawable_id; + CARD32 colormap_id; + CARD8 polarity; + CARD8 _pad[3]; +} xieImportReq; + + /* + ** Query ExportContext Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieQueryExport */ + CARD16 length; + CARD32 photo_id; + CARD32 lut_id; + BOOL get_pixels; + CARD8 _pad[3]; +} xieQueryExportReq; + + /* + ** Area Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 ipcc_id; + CARD32 ipct_id; + CARD8 op1; + CARD8 op2; + CARD8 constrain; + CARD8 _pad; +} xieAreaReq; + + /* + ** Area Statistics Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 edge_size; + CARD8 stat_type; + CARD8 _pad[2]; +} xieAreaStatsReq; + + /* + ** Arith Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieArithmetic */ + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 constants[XieK_MaxComponents]; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 constrain; + CARD16 _pad; +} xieArithReq; + + /* + ** Calculate Histogram Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id; + CARD32 idc_id; + CARD8 by_component; + CARD8 _pad[3]; +} xieCalcHistReq; + + /* + ** Chrominance Combine Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id1; + CARD32 photo_id2; + CARD32 photo_id3; + CARD32 dst_photo_id; +} xieChromeComReq; + + /* + ** Chrominance Separate Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo; + CARD32 dst_photo; + CARD32 component; +} xieChromeSepReq; + + /* + ** Compare Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 constants[XieK_MaxComponents]; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 combine; + CARD16 _pad; +} xieCompareReq; + + /* + ** Constrain Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieConstrain */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD8 model; + CARD8 _pad[3]; + CARD32 levels[XieK_MaxComponents]; + +} xieConstrainReq; + + /* + ** Crop Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCrop */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; +} xieCropReq; + + /* + ** Dither Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieDither */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 levels[XieK_MaxComponents]; +} xieDitherReq; + + /* + ** Fill Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieFill */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 dst_idc_id; + CARD32 constant[XieK_MaxComponents]; +} xieFillReq; + + /* + ** Logical Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieLogical */ + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 constants[XieK_MaxComponents]; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 _pad[3]; + } xieLogicalReq; + + /* + ** Luminance Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieLuminance */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; +} xieLuminanceReq; + + /* + ** Math Function Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 constrain; + CARD16 _pad; +} xieMathReq; + + /* + ** Match Histogram Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id1; + CARD32 photo_id2; + CARD32 idc_id; + XieFloatRec param1; + XieFloatRec param2; + CARD8 h_shape; + CARD8 _pad[3]; +} xieMatchHistogramReq; + + /* + ** Mirror Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieMirror */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + BOOL x_mirror; + BOOL y_mirror; + CARD8 _pad[2]; +} xieMirrorReq; + + /* + ** Point Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD32 trans_photo_id; +} xiePointReq; + + /* + ** Point Statistics Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id; + INT32 x; + INT32 y; + CARD8 height; + CARD8 width; + CARD8 _pad[2]; +} xiePointStatsReq; + + /* + ** Rotate Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieRotate */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + XieFloatRec angle; + CARD32 width; + CARD32 height; + CARD32 fill[XieK_MaxComponents]; +} xieRotateReq; + + /* + ** Scale Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieScale */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 width; + CARD32 height; +} xieScaleReq; + + /* + ** Translate Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieTranslate */ + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 src_idc_id; + CARD32 dst_photo_id; + CARD32 dst_idc_id; +} xieTranslateReq; + +#ifdef NOT_YET_IMPLEMENTED +/************ NONE OF THE FOLLOWING REQUESTS HAVE BEEN IMPLEMENTED ************/ + /* + ** Display Sequence Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 window_id; + CARD16 frame_count; + CARD16 frame_timing; + CARD8 forward; + CARD8 number_of_pixmaps; +} xieDisplaySeqReq; + +/**************************** END OF UNIMPLEMENTED REQUESTS *******************/ +#endif + +/******************************************************************************* +** Events +*******************************************************************************/ + /* + ** Send Xie Event + */ +typedef struct { + CARD8 type; + CARD8 detail; + CARD16 sequenceNumber; + CARD32 resource_id; + CARD8 _pad[24]; +} xieSendEvent; + +/******************************************************************************* +** Replies +*******************************************************************************/ + /* + ** Reply for Init Session + */ +typedef struct { + INT8 type; + CARD8 success; + CARD16 sequenceNumber; + CARD32 length; + CARD16 major_version; + CARD16 minor_version; + CARD32 service_class; /* not implemented */ + CARD8 _pad[16]; +} xieInitSessionReply; + + /* + ** Reply for Query Events + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 event_mask; + CARD8 _pad[20]; +} xieQueryEventsReply; + + /* + ** Reply for Query Operational Defaults + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 model; + CARD8 _pad[3]; + CARD32 levels[XieK_MaxComponents]; + CARD8 _pad1[8]; +} xieQueryOpDefaultsReply; + + /* + ** Reply for Query Resource: resource type == Photoflo + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 status; + CARD8 _pad[20]; +} xieQueryPhotofloReply; + + /* + ** Reply for Query Resource: resource type == Photo{map|tap} + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 width; + CARD32 height; + XieFloatRec aspect_ratio; + CARD8 polarity; + CARD8 pixel_progression; + CARD8 line_progression; + BOOL constrained; + CARD8 component_mapping; + CARD8 component_count; + CARD8 _pad[2]; + CARD32 levels[XieK_MaxComponents]; + CARD32 photo_id; +} xieQueryPhotomapReply; + + /* + ** Reply for Query Resource: resource type == Idc of type XieK_Cpp + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + INT32 x; + INT32 y; + CARD32 photomap_id; + CARD8 _pad[12]; +} xieQueryCppReply; + + /* + ** Reply for Query Resource: resource type == Idc of type XieK_Roi + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; + CARD8 _pad[8]; +} xieQueryRoiReply; + + /* + ** Reply for Query Resource: resource type == Idc of type XieK_Tmp + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* length of entries: long words */ + INT32 center_x; + INT32 center_y; + CARD32 data_count; /* number of XieTmpEntryRec's to */ + CARD8 _pad[12]; /* follow xieQueryTmpReply as data */ +} xieQueryTmpReply; + + /* + ** Reply for Get Stream + */ +typedef struct { + INT8 type; + CARD8 status; + CARD16 sequenceNumber; + CARD32 length; /* length of image data: longwords */ + CARD32 byte_count; /* image plane data length in bytes */ + CARD8 _pad[20]; +} xieGetStreamReply; + + /* + ** Reply for Get Tile + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* length of image data: longwords */ + CARD8 _pad[24]; +} xieGetTileReply; + + /* + ** Reply for QueryExport -- returns LUT and list of allocated pixels + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* number of pixels being returned */ + CARD32 pixel_count; + CARD32 lut_id; + CARD8 lut_mapping; + CARD8 _pad[15]; +} xieQueryExportReply; + + /* + ** Reply for CalcHistogram -- returns frequency distribution data + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* size of histogram list in longs */ + CARD8 _pad[24]; +} xieCalcHistReply; + + /* + ** Reply for Point Statistics + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 _pad[24]; +} xiePointStatsReply; + +/* the following structure is used for Point Statistics */ + +typedef struct { + XieFloatRec pixel; + XieFloatRec minimum; + XieFloatRec maximum; + XieFloatRec mean; + XieFloatRec std_dev; + XieFloatRec variance; +} xiePointStatsData, *xiePointStatsDataPtr; + + +#ifdef NOT_YET_IMPLEMENTED +/************ NONE OF THE FOLLOWING REPLIES HAVE BEEN IMPLEMENTED *************/ + +typedef struct { + CARD16 screen_width_millimeters; + CARD16 screen_height_millimeters; + CARD16 screen_width_pixels; + CARD16 screen_height_pixels; + CARD16 screen_depth; + CARD16 screen_luts_size; + CARD8 screen_number; + CARD8 screen_luts; + CARD8 screen_brightness_control; + CARD8 screen_contrast_control; + CARD8 screen_hue_control; + CARD8 _pad[5]; +} screen_data; + +typedef struct { + CARD32 minimum; + CARD32 maximum; + CARD32 mean; + CARD32 std_dev; + CARD32 variance; +} statistics_data; + +/* Reply for Dot Product */ + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 _pad[6]; +} xieDotProductReply; + +/*** following display stuff may be deleted or expanded */ + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 idc_type; + CARD8 skip_or_show; + CARD32 pixmap; + CARD16 _pad; +} xieSingleStaticReply; + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 idc_type; + CARD8 map_x_tiles; + CARD8 map_y_tiles; + CARD32 current_frame; + CARD32 number_of_display_frames; +} xieSpatialMapReply; + +typedef struct { + CARD32 pixmap; + CARD8 skip_or_show; + CARD8 _pad[3]; +} display_frame; + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 current_frame; + CARD32 number_of_display_frames; + CARD8 idc_type; + CARD8 map_x_tiles; + CARD8 map_y_tiles; + CARD8 _pad[14]; +} xieTimeSequenceReply; + +/**************************** END OF UNIMPLEMENTED REPLIES ********************/ +#endif +/* +** This "endif" MUST be the last line of this file. +*/ +#endif /* end of XIEPROTO -- NO DEFINITIONS ALLOWED BEYOND THIS POINT */ + diff --git a/xie/build/dec/X11/extensions/XieUdpDef.h b/xie/build/dec/X11/extensions/XieUdpDef.h new file mode 100644 index 0000000..44d88ff --- /dev/null +++ b/xie/build/dec/X11/extensions/XieUdpDef.h @@ -0,0 +1,118 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/********************************************************************************************************************************/ +/* Created 23-MAY-1992 03:11:09 by VAX SDL V3.2-12 Source: 12-JUL-1990 18:14:51 VNRESD$:[XIESMI.SRC]XIEUDPDEF.SDL;1 */ +/********************************************************************************************************************************/ +/******************************************************************************* */ +/** Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts, */ +/** and the Massachusetts Institute of Technology, Cambridge, Massachusetts. */ +/** */ +/** All Rights Reserved */ +/** */ +/** Permission to use, copy, modify, and distribute this software and its */ +/** documentation for any purpose and without fee is hereby granted, */ +/** provided that the above copyright notice appear in all copies and that */ +/** both that copyright notice and this permission notice appear in */ +/** supporting documentation, and that the names of Digital or MIT not be */ +/** used in advertising or publicity pertaining to distribution of the */ +/** software without specific, written prior permission. */ +/** */ +/** DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ +/** ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL */ +/** DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR */ +/** ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, */ +/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ +/** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS */ +/** SOFTWARE. */ +/** */ +/******************************************************************************* */ +/******************************************************************************* */ +/** */ +/** FACILITY: */ +/** */ +/** Sample Machine Independant DDX */ +/** X Image Extensions */ +/** */ +/** ABSTRACT: */ +/** */ +/** This include file defines low level image data representation */ +/** structures. */ +/** */ +/** ENVIRONMENT: */ +/** */ +/** VAX/VMS V5.3 */ +/** ULTRIX V3.1 */ +/** */ +/** AUTHOR(S): */ +/** */ +/** John Weber */ +/** */ +/** CREATION DATE: */ +/** */ +/** August 12, 1989 */ +/** */ +/** MODIFICATION HISTORY: */ +/** */ +/******************************************************************************* */ + +/*** MODULE XieUdpDef ***/ +#ifndef UDPDEF +#define UDPDEF +struct UDP { + unsigned short int UdpW_PixelLength; + unsigned char UdpB_DType; + unsigned char UdpB_Class; + unsigned char *UdpA_Base; + unsigned long int UdpL_ArSize; + unsigned long int UdpL_PxlStride; + unsigned long int UdpL_ScnStride; + long int UdpL_X1; + long int UdpL_X2; + long int UdpL_Y1; + long int UdpL_Y2; + unsigned long int UdpL_PxlPerScn; + unsigned long int UdpL_ScnCnt; + long int UdpL_Pos; + unsigned long int UdpL_CompIdx; + unsigned long int UdpL_Levels; + } ; +typedef struct UDP UdpRec, *UdpPtr; +#define UdpK_DTypeUndefined 0 +#define UdpK_DTypeMin 1 +#define UdpK_DTypeBU 1 +#define UdpK_DTypeWU 2 +#define UdpK_DTypeLU 3 +#define UdpK_DTypeF 4 +#define UdpK_DTypeC 5 +#define UdpK_DTypeVU 6 +#define UdpK_DTypeV 7 +#define UdpK_DTypeCL 8 +#define UdpK_DTypeMax 8 +#define UdpK_ClassUBA 1 +#define UdpK_ClassUBS 2 +#define UdpK_ClassA 3 +#define UdpK_ClassCL 4 +#endif /* UDPDEF */ diff --git a/xie/build/dec/XI.h b/xie/build/dec/XI.h new file mode 100644 index 0000000..0c4c44b --- /dev/null +++ b/xie/build/dec/XI.h @@ -0,0 +1,263 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* $Header: /usr/sde/x11/rcs/x11/src/./extensions/include/XI.h,v 1.2 91/12/15 12:42:16 devrcs Exp $ */ + +/************************************************************ +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, California, and the +Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett-Packard or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +********************************************************/ + +/* Definitions used by the server, library and client */ + +#ifndef _XI_H_ + +#define _XI_H_ + +#define sz_xGetExtensionVersionReq 8 +#define sz_xGetExtensionVersionReply 32 +#define sz_xListInputDevicesReq 4 +#define sz_xListInputDevicesReply 32 +#define sz_xOpenDeviceReq 8 +#define sz_xOpenDeviceReply 32 +#define sz_xCloseDeviceReq 8 +#define sz_xSetDeviceModeReq 8 +#define sz_xSetDeviceModeReply 32 +#define sz_xSelectExtensionEventReq 12 +#define sz_xGetSelectedExtensionEventsReq 8 +#define sz_xGetSelectedExtensionEventsReply 32 +#define sz_xChangeDeviceDontPropagateListReq 12 +#define sz_xGetDeviceDontPropagateListReq 8 +#define sz_xGetDeviceDontPropagateListReply 32 +#define sz_xGetDeviceMotionEventsReq 16 +#define sz_xGetDeviceMotionEventsReply 32 +#define sz_xChangeKeyboardDeviceReq 8 +#define sz_xChangeKeyboardDeviceReply 32 +#define sz_xChangePointerDeviceReq 8 +#define sz_xChangePointerDeviceReply 32 +#define sz_xGrabDeviceReq 20 +#define sz_xGrabDeviceReply 32 +#define sz_xUngrabDeviceReq 12 +#define sz_xGrabDeviceKeyReq 20 +#define sz_xGrabDeviceKeyReply 32 +#define sz_xUngrabDeviceKeyReq 16 +#define sz_xGrabDeviceButtonReq 20 +#define sz_xGrabDeviceButtonReply 32 +#define sz_xUngrabDeviceButtonReq 16 +#define sz_xAllowDeviceEventsReq 12 +#define sz_xGetDeviceFocusReq 8 +#define sz_xGetDeviceFocusReply 32 +#define sz_xSetDeviceFocusReq 16 +#define sz_xGetFeedbackControlReq 8 +#define sz_xGetFeedbackControlReply 32 +#define sz_xChangeFeedbackControlReq 12 +#define sz_xGetDeviceKeyMappingReq 8 +#define sz_xGetDeviceKeyMappingReply 32 +#define sz_xChangeDeviceKeyMappingReq 8 +#define sz_xGetDeviceModifierMappingReq 8 +#define sz_xSetDeviceModifierMappingReq 8 +#define sz_xSetDeviceModifierMappingReply 32 +#define sz_xGetDeviceButtonMappingReq 8 +#define sz_xGetDeviceButtonMappingReply 32 +#define sz_xSetDeviceButtonMappingReq 8 +#define sz_xSetDeviceButtonMappingReply 32 +#define sz_xQueryDeviceStateReq 8 +#define sz_xQueryDeviceStateReply 32 +#define sz_xSendExtensionEventReq 16 +#define sz_xDeviceBellReq 8 +#define sz_xSetDeviceValuatorsReq 8 +#define sz_xSetDeviceValuatorsReply 32 +#define sz_xGetDeviceControlReq 8 +#define sz_xGetDeviceControlReply 32 +#define sz_xChangeDeviceControlReq 8 +#define sz_xChangeDeviceControlReply 32 + +#define INAME "XInputExtension" + +#define XI_KEYBOARD "KEYBOARD" +#define XI_MOUSE "MOUSE" +#define XI_TABLET "TABLET" +#define XI_TOUCHSCREEN "TOUCHSCREEN" +#define XI_TOUCHPAD "TOUCHPAD" +#define XI_BARCODE "BARCODE" +#define XI_BUTTONBOX "BUTTONBOX" +#define XI_KNOB_BOX "KNOB_BOX" +#define XI_ONE_KNOB "ONE_KNOB" +#define XI_NINE_KNOB "NINE_KNOB" +#define XI_TRACKBALL "TRACKBALL" +#define XI_QUADRATURE "QUADRATURE" +#define XI_ID_MODULE "ID_MODULE" +#define XI_SPACEBALL "SPACEBALL" +#define XI_DATAGLOVE "DATAGLOVE" +#define XI_EYETRACKER "EYETRACKER" +#define XI_CURSORKEYS "CURSORKEYS" +#define XI_FOOTMOUSE "FOOTMOUSE" + +#define Dont_Check 0 +#define XInput_Initial_Release 1 +#define XInput_Add_XDeviceBell 2 +#define XInput_Add_XSetDeviceValuators 3 +#define XInput_Add_XChangeDeviceControl 4 + +#define XI_Absent 0 +#define XI_Present 1 + +#define XI_Initial_Release_Major 1 +#define XI_Initial_Release_Minor 0 + +#define XI_Add_XDeviceBell_Major 1 +#define XI_Add_XDeviceBell_Minor 1 + +#define XI_Add_XSetDeviceValuators_Major 1 +#define XI_Add_XSetDeviceValuators_Minor 2 + +#define XI_Add_XChangeDeviceControl_Major 1 +#define XI_Add_XChangeDeviceControl_Minor 3 + +#define DEVICE_RESOLUTION 1 + +#define NoSuchExtension 1 + +#define COUNT 0 +#define CREATE 1 + +#define NewPointer 0 +#define NewKeyboard 1 + +#define XPOINTER 0 +#define XKEYBOARD 1 + +#define UseXKeyboard 0xFF + +#define IsXPointer 0 +#define IsXKeyboard 1 +#define IsXExtensionDevice 2 + +#define AsyncThisDevice 0 +#define SyncThisDevice 1 +#define ReplayThisDevice 2 +#define AsyncOtherDevices 3 +#define AsyncAll 4 +#define SyncAll 5 + +#define FollowKeyboard 3 +#ifndef RevertToFollowKeyboard +#define RevertToFollowKeyboard 3 +#endif + +#define DvAccelNum (1L << 0) +#define DvAccelDenom (1L << 1) +#define DvThreshold (1L << 2) + +#define DvKeyClickPercent (1L<<0) +#define DvPercent (1L<<1) +#define DvPitch (1L<<2) +#define DvDuration (1L<<3) +#define DvLed (1L<<4) +#define DvLedMode (1L<<5) +#define DvKey (1L<<6) +#define DvAutoRepeatMode (1L<<7) + +#define DvString (1L << 0) + +#define DvInteger (1L << 0) + +#define DeviceMode (1L << 0) +#define Relative 0 +#define Absolute 1 + +#define ProximityState (1L << 1) +#define InProximity (0L << 1) +#define OutOfProximity (1L << 1) + +#define AddToList 0 +#define DeleteFromList 1 + +#define KeyClass 0 +#define ButtonClass 1 +#define ValuatorClass 2 +#define FeedbackClass 3 +#define ProximityClass 4 +#define FocusClass 5 +#define OtherClass 6 + +#define KbdFeedbackClass 0 +#define PtrFeedbackClass 1 +#define StringFeedbackClass 2 +#define IntegerFeedbackClass 3 +#define LedFeedbackClass 4 +#define BellFeedbackClass 5 + +#define _devicePointerMotionHint 0 +#define _deviceButton1Motion 1 +#define _deviceButton2Motion 2 +#define _deviceButton3Motion 3 +#define _deviceButton4Motion 4 +#define _deviceButton5Motion 5 +#define _deviceButtonMotion 6 +#define _deviceButtonGrab 7 +#define _deviceOwnerGrabButton 8 +#define _noExtensionEvent 9 + +#define XI_BadDevice 0 +#define XI_BadEvent 1 +#define XI_BadMode 2 +#define XI_DeviceBusy 3 +#define XI_BadClass 4 + +typedef unsigned long XEventClass; + +/******************************************************************* + * + * Extension version structure. + * + */ + +typedef struct { + int present; + short major_version; + short minor_version; +} XExtensionVersion; + +#endif /* _XI_H_ */ diff --git a/xie/build/dec/XInput.h b/xie/build/dec/XInput.h new file mode 100644 index 0000000..a897842 --- /dev/null +++ b/xie/build/dec/XInput.h @@ -0,0 +1,849 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* $Header: /usr/sde/x11/rcs/x11/src/./extensions/include/XInput.h,v 1.2 91/12/15 12:42:16 devrcs Exp $ */ + +/************************************************************ +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, California, and the +Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett-Packard or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +********************************************************/ + +/* Definitions used by the library and client */ + +#ifndef _XINPUT_H_ +#define _XINPUT_H_ + +#ifndef _XLIB_H_ +#include +#endif + +#ifndef _XI_H_ +#include "XI.h" +#endif + +#define _deviceKeyPress 0 +#define _deviceKeyRelease 1 + +#define _deviceButtonPress 0 +#define _deviceButtonRelease 1 + +#define _deviceMotionNotify 0 + +#define _deviceFocusIn 0 +#define _deviceFocusOut 1 + +#define _proximityIn 0 +#define _proximityOut 1 + +#define _deviceStateNotify 0 +#define _deviceMappingNotify 1 +#define _changeDeviceNotify 2 + +#define FindTypeAndClass(d,type,_class,classid,offset) \ + { int i; XInputClassInfo *ip; \ + type = 0; _class = 0; \ + for (i=0, ip= ((XDevice *) d)->classes; \ + i< ((XDevice *) d)->num_classes; \ + i++, ip++) \ + if (ip->input_class == classid) \ + {type = ip->event_type_base + offset; \ + _class = ((XDevice *) d)->device_id << 8 | type;}} + +#define DeviceKeyPress(d,type,_class) \ + FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyPress) + +#define DeviceKeyRelease(d,type,_class) \ + FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyRelease) + +#define DeviceButtonPress(d,type,_class) \ + FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonPress) + +#define DeviceButtonRelease(d,type,_class) \ + FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonRelease) + +#define DeviceMotionNotify(d,type,_class) \ + FindTypeAndClass(d, type, _class, ValuatorClass, _deviceMotionNotify) + +#define DeviceFocusIn(d,type,_class) \ + FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusIn) + +#define DeviceFocusOut(d,type,_class) \ + FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusOut) + +#define ProximityIn(d,type,_class) \ + FindTypeAndClass(d, type, _class, ProximityClass, _proximityIn) + +#define ProximityOut(d,type,_class) \ + FindTypeAndClass(d, type, _class, ProximityClass, _proximityOut) + +#define DeviceStateNotify(d,type,_class) \ + FindTypeAndClass(d, type, _class, OtherClass, _deviceStateNotify) + +#define DeviceMappingNotify(d,type,_class) \ + FindTypeAndClass(d, type, _class, OtherClass, _deviceMappingNotify) + +#define ChangeDeviceNotify(d,type,_class) \ + FindTypeAndClass(d, type, _class, OtherClass, _changeDeviceNotify) + +#define DevicePointerMotionHint(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _devicePointerMotionHint;} + +#define DeviceButton1Motion(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;} + +#define DeviceButton2Motion(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;} + +#define DeviceButton3Motion(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;} + +#define DeviceButton4Motion(d,type,class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;} + +#define DeviceButton5Motion(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;} + +#define DeviceButtonMotion(d,type,class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;} + +#define DeviceOwnerGrabButton(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;} + +#define DeviceButtonPressGrab(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;} + +#define NoExtensionEvent(d,type,_class) \ + { _class = ((XDevice *) d)->device_id << 8 | _noExtensionEvent;} + +#define BadDevice(dpy,error) _xibaddevice(dpy, &error) + +#define BadClass(dpy,error) _xibadclass(dpy, &error) + +#define BadEvent(dpy,error) _xibadevent(dpy, &error) + +#define BadMode(dpy,error) _xibadmode(dpy, &error) + +#define DeviceBusy(dpy,error) _xidevicebusy(dpy, &error) + +/*************************************************************** + * + * DeviceKey events. These events are sent by input devices that + * support input class Keys. + * The location of the X pointer is reported in the coordinate + * fields of the x,y and x_root,y_root fields. + * + */ + +typedef struct + { + int type; /* of event */ + unsigned long serial; /* # of last request processed */ + Bool send_event; /* true if from SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* "event" window reported relative to */ + XID deviceid; + Window root; /* root window event occured on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* x, y coordinates in event window */ + int x_root; /* coordinates relative to root */ + int y_root; /* coordinates relative to root */ + unsigned int state; /* key or button mask */ + unsigned int keycode; /* detail */ + Bool same_screen; /* same screen flag */ + unsigned int device_state; /* device key or button mask */ + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; + } XDeviceKeyEvent; + +typedef XDeviceKeyEvent XDeviceKeyPressedEvent; +typedef XDeviceKeyEvent XDeviceKeyReleasedEvent; + +/******************************************************************* + * + * DeviceButton events. These events are sent by extension devices + * that support input class Buttons. + * + */ + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* "event" window reported relative to */ + XID deviceid; + Window root; /* root window that the event occured on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* x, y coordinates in event window */ + int x_root; /* coordinates relative to root */ + int y_root; /* coordinates relative to root */ + unsigned int state; /* key or button mask */ + unsigned int button; /* detail */ + Bool same_screen; /* same screen flag */ + unsigned int device_state; /* device key or button mask */ + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; + } XDeviceButtonEvent; + +typedef XDeviceButtonEvent XDeviceButtonPressedEvent; +typedef XDeviceButtonEvent XDeviceButtonReleasedEvent; + +/******************************************************************* + * + * DeviceMotionNotify event. These events are sent by extension devices + * that support input class Valuators. + * + */ + +typedef struct + { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* "event" window reported relative to */ + XID deviceid; + Window root; /* root window that the event occured on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* x, y coordinates in event window */ + int x_root; /* coordinates relative to root */ + int y_root; /* coordinates relative to root */ + unsigned int state; /* key or button mask */ + char is_hint; /* detail */ + Bool same_screen; /* same screen flag */ + unsigned int device_state; /* device key or button mask */ + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; + } XDeviceMotionEvent; + +/******************************************************************* + * + * DeviceFocusChange events. These events are sent when the focus + * of an extension device that can be focused is changed. + * + */ + +typedef struct + { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* "event" window reported relative to */ + XID deviceid; + int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ + int detail; + /* + * NotifyAncestor, NotifyVirtual, NotifyInferior, + * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer, + * NotifyPointerRoot, NotifyDetailNone + */ + Time time; + } XDeviceFocusChangeEvent; + +typedef XDeviceFocusChangeEvent XDeviceFocusInEvent; +typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent; + +/******************************************************************* + * + * ProximityNotify events. These events are sent by those absolute + * positioning devices that are capable of generating proximity information. + * + */ + +typedef struct + { + int type; /* ProximityIn or ProximityOut */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + XID deviceid; + Window root; + Window subwindow; + Time time; + int x, y; + int x_root, y_root; + unsigned int state; + Bool same_screen; + unsigned int device_state; /* device key or button mask */ + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; + } XProximityNotifyEvent; +typedef XProximityNotifyEvent XProximityInEvent; +typedef XProximityNotifyEvent XProximityOutEvent; + +/******************************************************************* + * + * DeviceStateNotify events are generated on EnterWindow and FocusIn + * for those clients who have selected DeviceState. + * + */ + +typedef struct + { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + } XInputClass; + +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + XID deviceid; + Time time; + int num_classes; + char data[64]; +} XDeviceStateNotifyEvent; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + unsigned char num_valuators; + unsigned char mode; + int valuators[6]; +} XValuatorStatus; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + short num_keys; + char keys[32]; +} XKeyStatus; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + short num_buttons; + char buttons[32]; +} XButtonStatus; + +/******************************************************************* + * + * DeviceMappingNotify event. This event is sent when the key mapping, + * modifier mapping, or button mapping of an extension device is changed. + * + */ + +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* unused */ + XID deviceid; + Time time; + int request; /* one of MappingModifier, MappingKeyboard, + MappingPointer */ + int first_keycode;/* first keycode */ + int count; /* defines range of change w. first_keycode*/ +} XDeviceMappingEvent; + +/******************************************************************* + * + * ChangeDeviceNotify event. This event is sent when an + * XChangeKeyboard or XChangePointer request is made. + * + */ + +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* unused */ + XID deviceid; + Time time; + int request; /* NewPointer or NewKeyboard */ +} XChangeDeviceNotifyEvent; + +/******************************************************************* + * + * Control structures for input devices that support input class + * Feedback. These are used by the XGetFeedbackControl and + * XChangeFeedbackControl functions. + * + */ + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; +} XFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int click; + int percent; + int pitch; + int duration; + int led_mask; + int global_auto_repeat; + char auto_repeats[32]; +} XKbdFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int accelNum; + int accelDenom; + int threshold; +} XPtrFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int resolution; + int minVal; + int maxVal; +} XIntegerFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int max_symbols; + int num_syms_supported; + KeySym *syms_supported; +} XStringFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int percent; + int pitch; + int duration; +} XBellFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int led_values; + int led_mask; +} XLedFeedbackState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; +} XFeedbackControl; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int accelNum; + int accelDenom; + int threshold; +} XPtrFeedbackControl; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int click; + int percent; + int pitch; + int duration; + int led_mask; + int led_value; + int key; + int auto_repeat_mode; +} XKbdFeedbackControl; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int num_keysyms; + KeySym *syms_to_display; +} XStringFeedbackControl; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int int_to_display; +} XIntegerFeedbackControl; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int percent; + int pitch; + int duration; +} XBellFeedbackControl; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + XID id; + int led_mask; + int led_values; +} XLedFeedbackControl; + +/******************************************************************* + * + * Device control structures. + * + */ + +typedef struct { + XID control; + int length; +} XDeviceControl; + +typedef struct { + XID control; + int length; + int first_valuator; + int num_valuators; + int *resolutions; +} XDeviceResolutionControl; + +typedef struct { + XID control; + int length; + int num_valuators; + int *resolutions; + int *min_resolutions; + int *max_resolutions; +} XDeviceResolutionState; + +/******************************************************************* + * + * An array of XDeviceList structures is returned by the + * XListInputDevices function. Each entry contains information + * about one input device. Among that information is an array of + * pointers to structures that describe the characteristics of + * the input device. + * + */ + +typedef struct _XAnyClassinfo *XAnyClassPtr; + +typedef struct _XAnyClassinfo { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + } XAnyClassInfo; + +typedef struct _XDeviceInfo *XDeviceInfoPtr; + +typedef struct _XDeviceInfo + { + XID id; + Atom type; + char *name; + int num_classes; + int use; + XAnyClassPtr inputclassinfo; + } XDeviceInfo; + +typedef struct _XKeyInfo *XKeyInfoPtr; + +typedef struct _XKeyInfo + { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + unsigned short min_keycode; + unsigned short max_keycode; + unsigned short num_keys; + } XKeyInfo; + +typedef struct _XButtonInfo *XButtonInfoPtr; + +typedef struct _XButtonInfo { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + short num_buttons; + } XButtonInfo; + +typedef struct _XAxisInfo *XAxisInfoPtr; + +typedef struct _XAxisInfo { + int resolution; + int min_value; + int max_value; + } XAxisInfo; + +typedef struct _XValuatorInfo *XValuatorInfoPtr; + +typedef struct _XValuatorInfo + { +#if defined(__cplusplus) || defined(c_plusplus) + XID c_class; +#else + XID class; +#endif + int length; + unsigned char num_axes; + unsigned char mode; + unsigned long motion_buffer; + XAxisInfoPtr axes; + } XValuatorInfo; + + +/******************************************************************* + * + * An XDevice structure is returned by the XOpenDevice function. + * It contains an array of pointers to XInputClassInfo structures. + * Each contains information about a class of input supported by the + * device, including a pointer to an array of data for each type of event + * the device reports. + * + */ + + +typedef struct { + unsigned char input_class; + unsigned char event_type_base; +} XInputClassInfo; + +typedef struct { + XID device_id; + int num_classes; + XInputClassInfo *classes; +} XDevice; + + +/******************************************************************* + * + * The following structure is used to return information for the + * XGetSelectedExtensionEvents function. + * + */ + +typedef struct { + XEventClass event_type; + XID device; +} XEventList; + +/******************************************************************* + * + * The following structure is used to return motion history data from + * an input device that supports the input class Valuators. + * This information is returned by the XGetDeviceMotionEvents function. + * + */ + +typedef struct { + Time time; + int *data; +} XDeviceTimeCoord; + + +/******************************************************************* + * + * Device state structure. + * This is returned by the XQueryDeviceState request. + * + */ + +typedef struct { + XID device_id; + int num_classes; + XInputClass *data; +} XDeviceState; + +/******************************************************************* + * + * Note that the mode field is a bitfield that reports the Proximity + * status of the device as well as the mode. The mode field should + * be OR'd with the mask DeviceMode and compared with the values + * Absolute and Relative to determine the mode, and should be OR'd + * with the mask ProximityState and compared with the values InProximity + * and OutOfProximity to determine the proximity state. + * + */ + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + unsigned char num_valuators; + unsigned char mode; + int *valuators; +} XValuatorState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + short num_keys; + char keys[32]; +} XKeyState; + +typedef struct { +#if defined(__cplusplus) || defined(c_plusplus) + unsigned char c_class; +#else + unsigned char class; +#endif + unsigned char length; + short num_buttons; + char buttons[32]; +} XButtonState; + +/******************************************************************* + * + * Function definitions. + * + */ + +XDevice *XOpenDevice(); +XDeviceInfo *XListInputDevices(); +XDeviceTimeCoord *XGetDeviceMotionEvents(); +KeySym *XGetDeviceKeyMapping(); +XModifierKeymap *XGetDeviceModifierMapping(); +XFeedbackState *XGetFeedbackControl(); +XExtensionVersion *XGetExtensionVersion(); +XDeviceState *XQueryDeviceState(); +XEventClass *XGetDeviceDontPropagateList(); +#endif /* _XINPUT_H_ */ diff --git a/xie/build/dec/XIproto.h b/xie/build/dec/XIproto.h new file mode 100644 index 0000000..ac4dd00 --- /dev/null +++ b/xie/build/dec/XIproto.h @@ -0,0 +1,1425 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* $Header: /usr/sde/x11/rcs/x11/src/./extensions/include/XIproto.h,v 1.2 91/12/15 12:42:16 devrcs Exp $ */ + +/************************************************************ +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, California, and the +Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett-Packard or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +********************************************************/ + +#ifndef _XIPROTO_H +#define _XIPROTO_H + +#ifndef NEED_EVENTS +#define NEED_EVENTS +#endif +#ifndef NEED_REPLIES +#define NEED_REPLIES +#endif +#include +#include + +/********************************************************* + * + * number of events, errors, and extension name. + * + */ + +#define MORE_EVENTS 0x80 +#define DEVICE_BITS 0x7F + +#define InputClassBits 0x3F /* bits in mode field for input classes */ +#define ModeBitsShift 6 /* amount to shift the remaining bits */ + +#define numInputClasses 7 + +#define IEVENTS 15 +#define IERRORS 5 + +#define CLIENT_REQ 1 + +typedef struct _XExtEventInfo + { + Mask mask; + BYTE type; + BYTE word; + } XExtEventInfo; + +typedef unsigned char *Pointer; + +struct tmask + { + Mask mask; + Pointer dev; + }; + +/********************************************************* + * + * Event constants used by library. + * + */ + +#define XI_DeviceValuator 0 +#define XI_DeviceKeyPress 1 +#define XI_DeviceKeyRelease 2 +#define XI_DeviceButtonPress 3 +#define XI_DeviceButtonRelease 4 +#define XI_DeviceMotionNotify 5 +#define XI_DeviceFocusIn 6 +#define XI_DeviceFocusOut 7 +#define XI_ProximityIn 8 +#define XI_ProximityOut 9 +#define XI_DeviceStateNotify 10 +#define XI_DeviceMappingNotify 11 +#define XI_ChangeDeviceNotify 12 +#define XI_DeviceKeystateNotify 13 +#define XI_DeviceButtonstateNotify 14 + +/********************************************************* + * + * Protocol request constants + * + */ + +#define X_GetExtensionVersion 1 +#define X_ListInputDevices 2 +#define X_OpenDevice 3 +#define X_CloseDevice 4 +#define X_SetDeviceMode 5 +#define X_SelectExtensionEvent 6 +#define X_GetSelectedExtensionEvents 7 +#define X_ChangeDeviceDontPropagateList 8 +#define X_GetDeviceDontPropagateList 9 +#define X_GetDeviceMotionEvents 10 +#define X_ChangeKeyboardDevice 11 +#define X_ChangePointerDevice 12 +#define X_GrabDevice 13 +#define X_UngrabDevice 14 +#define X_GrabDeviceKey 15 +#define X_UngrabDeviceKey 16 +#define X_GrabDeviceButton 17 +#define X_UngrabDeviceButton 18 +#define X_AllowDeviceEvents 19 +#define X_GetDeviceFocus 20 +#define X_SetDeviceFocus 21 +#define X_GetFeedbackControl 22 +#define X_ChangeFeedbackControl 23 +#define X_GetDeviceKeyMapping 24 +#define X_ChangeDeviceKeyMapping 25 +#define X_GetDeviceModifierMapping 26 +#define X_SetDeviceModifierMapping 27 +#define X_GetDeviceButtonMapping 28 +#define X_SetDeviceButtonMapping 29 +#define X_QueryDeviceState 30 +#define X_SendExtensionEvent 31 +#define X_DeviceBell 32 +#define X_SetDeviceValuators 33 +#define X_GetDeviceControl 34 +#define X_ChangeDeviceControl 35 + +/********************************************************* + * + * Protocol request and reply structures. + * + * GetExtensionVersion. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GetExtensionVersion */ + CARD16 length B16; + CARD16 nbytes B16; + CARD8 pad1, pad2; +} xGetExtensionVersionReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetExtensionVersion */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 major_version B16; + CARD16 minor_version B16; + BOOL present; + CARD8 pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; +} xGetExtensionVersionReply; + +/********************************************************* + * + * ListInputDevices. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_ListInputDevices */ + CARD16 length B16; +} xListInputDevicesReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_ListInputDevices */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 ndevices B32; + CARD8 pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xListInputDevicesReply; + +typedef struct _xDeviceInfo *xDeviceInfoPtr; + +typedef struct _xAnyClassinfo *xAnyClassPtr; + +typedef struct _xAnyClassinfo { + CARD8 class; + CARD8 length; + } xAnyClassInfo; + +typedef struct _xDeviceInfo { + CARD32 type B32; + CARD8 id; + CARD8 num_classes; + CARD8 use; + CARD8 pad1; + } xDeviceInfo; + +typedef struct _xKeyInfo *xKeyInfoPtr; + +typedef struct _xKeyInfo { + CARD8 class; + CARD8 length; + KeyCode min_keycode; + KeyCode max_keycode; + CARD16 num_keys B16; + CARD8 pad1,pad2; + } xKeyInfo; + +typedef struct _xButtonInfo *xButtonInfoPtr; + +typedef struct _xButtonInfo { + CARD8 class; + CARD8 length; + CARD16 num_buttons B16; + } xButtonInfo; + +typedef struct _xValuatorInfo *xValuatorInfoPtr; + +typedef struct _xValuatorInfo { + CARD8 class; + CARD8 length; + CARD8 num_axes; + CARD8 mode; + CARD32 motion_buffer_size B32; + } xValuatorInfo; + +typedef struct _xAxisInfo *xAxisInfoPtr; + +typedef struct _xAxisInfo { + CARD32 resolution B32; + CARD32 min_value B32; + CARD32 max_value B32; + } xAxisInfo; + +/********************************************************* + * + * OpenDevice. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_OpenDevice */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xOpenDeviceReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_OpenDevice */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 num_classes; + BYTE pad1, pad2, pad3; + CARD32 pad00 B32; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + } xOpenDeviceReply; + +typedef struct { + CARD8 class; + CARD8 event_type_base; + } xInputClassInfo; + +/********************************************************* + * + * CloseDevice. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_CloseDevice */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xCloseDeviceReq; + +/********************************************************* + * + * SetDeviceMode. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_SetDeviceMode */ + CARD16 length B16; + CARD8 deviceid; + CARD8 mode; + BYTE pad1, pad2; +} xSetDeviceModeReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_SetDeviceMode */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xSetDeviceModeReply; + +/********************************************************* + * + * SelectExtensionEvent. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_SelectExtensionEvent */ + CARD16 length B16; + Window window B32; + CARD16 count B16; + CARD16 pad00 B16; +} xSelectExtensionEventReq; + +/********************************************************* + * + * GetSelectedExtensionEvent. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_GetSelectedExtensionEvents */ + CARD16 length B16; + Window window B32; +} xGetSelectedExtensionEventsReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* GetSelectedExtensionEvents */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 this_client_count B16; + CARD16 all_clients_count B16; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xGetSelectedExtensionEventsReply; + +/********************************************************* + * + * ChangeDeviceDontPropagateList. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_ChangeDeviceDontPropagateList */ + CARD16 length B16; + Window window B32; + CARD16 count B16; + CARD8 mode; + BYTE pad; +} xChangeDeviceDontPropagateListReq; + +/********************************************************* + * + * GetDeviceDontPropagateList. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_GetDeviceDontPropagateList */ + CARD16 length B16; + Window window B32; +} xGetDeviceDontPropagateListReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* GetDeviceDontPropagateList */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 count B16; + CARD16 pad00 B16; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; + } xGetDeviceDontPropagateListReply; + +/********************************************************* + * + * GetDeviceMotionEvents. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GetDeviceMotionEvents*/ + CARD16 length B16; + Time start B32; + Time stop B32; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xGetDeviceMotionEventsReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetDeviceMotionEvents */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 nEvents B32; + CARD8 axes; + CARD8 mode; + BYTE pad1, pad2; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; +} xGetDeviceMotionEventsReply; + +/********************************************************* + * + * ChangeKeyboardDevice. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_ChangeKeyboardDevice */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xChangeKeyboardDeviceReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_ChangeKeyboardDevice*/ + CARD16 sequenceNumber B16; + CARD32 length B32; /* 0 */ + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; + } xChangeKeyboardDeviceReply; + +/********************************************************* + * + * ChangePointerDevice. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_ChangePointerDevice */ + CARD16 length B16; + CARD8 xaxis; + CARD8 yaxis; + CARD8 deviceid; + BYTE pad1; +} xChangePointerDeviceReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_ChangePointerDevice */ + CARD16 sequenceNumber B16; + CARD32 length B32; /* 0 */ + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; + } xChangePointerDeviceReply; + +/********************************************************* + * + * GrabDevice. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GrabDevice */ + CARD16 length B16; + Window grabWindow B32; + Time time B32; + CARD16 event_count B16; + CARD8 this_device_mode; + CARD8 other_devices_mode; + BOOL ownerEvents; + CARD8 deviceid; + CARD16 pad01 B16; +} xGrabDeviceReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GrabDevice */ + CARD16 sequenceNumber B16; + CARD32 length B32; /* 0 */ + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; + } xGrabDeviceReply; + +/********************************************************* + * + * UngrabDevice. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_UnGrabDevice */ + CARD16 length B16; + Time time B32; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xUngrabDeviceReq; + +/********************************************************* + * + * GrabDeviceKey. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GrabDeviceKey */ + CARD16 length B16; + Window grabWindow B32; + CARD16 event_count B16; + CARD16 modifiers B16; + CARD8 modifier_device; + CARD8 grabbed_device; + CARD8 key; + BYTE this_device_mode; + BYTE other_devices_mode; + BOOL ownerEvents; + BYTE pad1, pad2; +} xGrabDeviceKeyReq; + +/********************************************************* + * + * UngrabDeviceKey. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_UngrabDeviceKey */ + CARD16 length B16; + Window grabWindow B32; + CARD16 modifiers B16; + CARD8 modifier_device; + CARD8 key; + CARD8 grabbed_device; + BYTE pad1, pad2, pad3; +} xUngrabDeviceKeyReq; + +/********************************************************* + * + * GrabDeviceButton. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GrabDeviceButton */ + CARD16 length B16; + Window grabWindow B32; + CARD8 grabbed_device; + CARD8 modifier_device; + CARD16 event_count B16; + CARD16 modifiers B16; + BYTE this_device_mode; + BYTE other_devices_mode; + CARD8 button; + BOOL ownerEvents; + BYTE pad1, pad2; +} xGrabDeviceButtonReq; + +/********************************************************* + * + * UngrabDeviceButton. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_UngrabDeviceButton */ + CARD16 length B16; + Window grabWindow B32; + CARD16 modifiers B16; + CARD8 modifier_device; + CARD8 button; + CARD8 grabbed_device; + BYTE pad1, pad2, pad3; +} xUngrabDeviceButtonReq; + +/********************************************************* + * + * AllowDeviceEvents. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_AllowDeviceEvents */ + CARD16 length B16; + Time time B32; + CARD8 mode; + CARD8 deviceid; + BYTE pad1, pad2; +} xAllowDeviceEventsReq; + +/********************************************************* + * + * GetDeviceFocus. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GetDeviceFocus */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xGetDeviceFocusReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetDeviceFocus */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 focus B32; + Time time B32; + CARD8 revertTo; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + } xGetDeviceFocusReply; + +/********************************************************* + * + * SetDeviceFocus. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_SetDeviceFocus */ + CARD16 length B16; + Window focus B32; + Time time B32; + CARD8 revertTo; + CARD8 device; + CARD16 pad01 B16; +} xSetDeviceFocusReq; + +/********************************************************* + * + * GetFeedbackControl. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_GetFeedbackControl */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xGetFeedbackControlReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetFeedbackControl */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 num_feedbacks B16; + CARD16 pad01 B16; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; + CARD32 pad06 B32; +} xGetFeedbackControlReply; + +typedef struct { + CARD8 class; /* feedback class */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ +} xFeedbackState; + +typedef struct { + CARD8 class; + CARD8 id; + CARD16 length B16; + CARD16 pitch B16; + CARD16 duration B16; + CARD32 led_mask B32; + CARD32 led_values B32; + BOOL global_auto_repeat; + CARD8 click; + CARD8 percent; + BYTE pad; + BYTE auto_repeats[32]; +} xKbdFeedbackState; + +typedef struct { + CARD8 class; + CARD8 id; + CARD16 length B16; + CARD8 pad1,pad2; + CARD16 accelNum B16; + CARD16 accelDenom B16; + CARD16 threshold B16; +} xPtrFeedbackState; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; + CARD16 length B16; /* feedback length */ + CARD32 resolution B32; + INT32 min_value B32; + INT32 max_value B32; +} xIntegerFeedbackState; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; + CARD16 length B16; /* feedback length */ + CARD16 max_symbols B16; + CARD16 num_syms_supported B16; +} xStringFeedbackState; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; + CARD16 length B16; /* feedback length */ + CARD8 percent; + BYTE pad1, pad2, pad3; + CARD16 pitch B16; + CARD16 duration B16; +} xBellFeedbackState; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; + CARD16 length B16; /* feedback length */ + CARD32 led_mask B32; + CARD32 led_values B32; +} xLedFeedbackState; + +/********************************************************* + * + * ChangeFeedbackControl. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_ChangeFeedbackControl */ + CARD16 length B16; + CARD32 mask B32; + CARD8 deviceid; + CARD8 feedbackid; + BYTE pad1, pad2; +} xChangeFeedbackControlReq; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ +} xFeedbackCtl; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback length */ + CARD16 length B16; /* feedback length */ + KeyCode key; + CARD8 auto_repeat_mode; + INT8 click; + INT8 percent; + INT16 pitch B16; + INT16 duration B16; + CARD32 led_mask B32; + CARD32 led_values B32; +} xKbdFeedbackCtl; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ + CARD8 pad1,pad2; + INT16 num B16; + INT16 denom B16; + INT16 thresh B16; +} xPtrFeedbackCtl; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ + INT32 int_to_display B32; +} xIntegerFeedbackCtl; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ + CARD8 pad1,pad2; + CARD16 num_keysyms B16; +} xStringFeedbackCtl; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ + INT8 percent; + BYTE pad1, pad2, pad3; + INT16 pitch B16; + INT16 duration B16; +} xBellFeedbackCtl; + +typedef struct { + CARD8 class; /* feedback class id */ + CARD8 id; /* feedback id */ + CARD16 length B16; /* feedback length */ + CARD32 led_mask B32; + CARD32 led_values B32; +} xLedFeedbackCtl; + +/********************************************************* + * + * GetDeviceKeyMapping. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GetDeviceKeyMapping */ + CARD16 length B16; + CARD8 deviceid; + KeyCode firstKeyCode; + CARD8 count; + BYTE pad1; +} xGetDeviceKeyMappingReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetDeviceKeyMapping */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 keySymsPerKeyCode; + CARD8 pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xGetDeviceKeyMappingReply; + +/********************************************************* + * + * ChangeDeviceKeyMapping. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_ChangeDeviceKeyMapping */ + CARD16 length B16; + CARD8 deviceid; + KeyCode firstKeyCode; + CARD8 keySymsPerKeyCode; + CARD8 keyCodes; +} xChangeDeviceKeyMappingReq; + +/********************************************************* + * + * GetDeviceModifierMapping. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GetDeviceModifierMapping */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xGetDeviceModifierMappingReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetDeviceModifierMapping */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 numKeyPerModifier; + CARD8 pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xGetDeviceModifierMappingReply; + +/********************************************************* + * + * SetDeviceModifierMapping. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_SetDeviceModifierMapping */ + CARD16 length B16; + CARD8 deviceid; + CARD8 numKeyPerModifier; + CARD16 pad1 B16; +} xSetDeviceModifierMappingReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_SetDeviceModifierMapping */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 success; + CARD8 pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xSetDeviceModifierMappingReply; + +/********************************************************* + * + * GetDeviceButtonMapping. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_GetDeviceButtonMapping */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xGetDeviceButtonMappingReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetDeviceButtonMapping */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 nElts; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xGetDeviceButtonMappingReply; + +/********************************************************* + * + * SetDeviceButtonMapping. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* X_SetDeviceButtonMapping */ + CARD16 length B16; + CARD8 deviceid; + CARD8 map_length; + BYTE pad1, pad2; +} xSetDeviceButtonMappingReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_SetDeviceButtonMapping */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 status; + BYTE pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xSetDeviceButtonMappingReply; + +/********************************************************* + * + * QueryDeviceState. + * + */ + +typedef struct { + CARD8 reqType; + CARD8 ReqType; /* always X_QueryDeviceState */ + CARD16 length B16; + CARD8 deviceid; + BYTE pad1, pad2, pad3; +} xQueryDeviceStateReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_QueryDeviceState */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 num_classes; + BYTE pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xQueryDeviceStateReply; + +typedef struct { + CARD8 class; + CARD8 length; + CARD8 num_keys; + BYTE pad1; + CARD8 keys[32]; +} xKeyState; + +typedef struct { + CARD8 class; + CARD8 length; + CARD8 num_buttons; + BYTE pad1; + CARD8 buttons[32]; +} xButtonState; + +typedef struct { + CARD8 class; + CARD8 length; + CARD8 num_valuators; + CARD8 mode; +} xValuatorState; + +/********************************************************* + * + * SendExtensionEvent. + * THIS REQUEST MUST BE KEPT A MULTIPLE OF 8 BYTES IN LENGTH! + * MORE EVENTS MAY FOLLOW AND THEY MUST BE QUAD-ALIGNED! + * + */ + +typedef struct { + CARD8 reqType; + CARD8 ReqType; /* always X_SendExtensionEvent */ + CARD16 length B16; + Window destination B32; + CARD8 deviceid; + BOOL propagate; + CARD16 count B16; + CARD8 num_events; + BYTE pad1,pad2,pad3; +} xSendExtensionEventReq; + +/********************************************************* + * + * DeviceBell. + * + */ + +typedef struct { + CARD8 reqType; + CARD8 ReqType; /* always X_DeviceBell */ + CARD16 length B16; + CARD8 deviceid; + CARD8 feedbackid; + CARD8 feedbackclass; + INT8 percent; +} xDeviceBellReq; + +/********************************************************* + * + * SetDeviceValuators. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_SetDeviceValuators */ + CARD16 length B16; + CARD8 deviceid; + CARD8 first_valuator; + CARD8 num_valuators; + BYTE pad1; +} xSetDeviceValuatorsReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_SetDeviceValuators */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xSetDeviceValuatorsReply; + +/********************************************************* + * + * GetDeviceControl. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_GetDeviceControl */ + CARD16 length B16; + CARD16 control B16; + CARD8 deviceid; + BYTE pad2; +} xGetDeviceControlReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_GetDeviceControl */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xGetDeviceControlReply; + +typedef struct { + CARD16 control B16; /* control type */ + CARD16 length B16; /* control length */ +} xDeviceState; + +typedef struct { + CARD16 control B16; /* control type */ + CARD16 length B16; /* control length */ + CARD32 num_valuators B32; /* number of valuators */ +} xDeviceResolutionState; + +/********************************************************* + * + * ChangeDeviceControl. + * + */ + +typedef struct { + CARD8 reqType; /* input extension major code */ + CARD8 ReqType; /* always X_ChangeDeviceControl */ + CARD16 length B16; + CARD16 control B16; + CARD8 deviceid; + CARD8 num_valuators; +} xChangeDeviceControlReq; + +typedef struct { + CARD8 repType; /* X_Reply */ + CARD8 RepType; /* always X_ChangeDeviceControl */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 status; + BYTE pad1, pad2, pad3; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; +} xChangeDeviceControlReply; + +typedef struct { + CARD16 control B16; /* control type */ + CARD16 length B16; /* control length */ +} xDeviceCtl; + +typedef struct { + CARD16 control B16; /* control type */ + CARD16 length B16; /* control length */ + CARD8 first_valuator; /* first valuator to change */ + CARD8 num_valuators; /* number of valuators to change*/ + CARD8 pad1,pad2; +} xDeviceResolutionCtl; + +/********************************************************** + * + * Input extension events. + * + * DeviceValuator + * + */ + +typedef struct + { + BYTE type; + CARD8 deviceid; + CARD16 sequenceNumber B16; + KeyButMask device_state B16; + CARD8 num_valuators; + CARD8 first_valuator; + INT32 valuator0 B32; + INT32 valuator1 B32; + INT32 valuator2 B32; + INT32 valuator3 B32; + INT32 valuator4 B32; + INT32 valuator5 B32; + } deviceValuator; + +/********************************************************** + * + * DeviceKeyButtonPointer. + * + * Used for: DeviceKeyPress, DeviceKeyRelease, + * DeviceButtonPress, DeviceButtonRelease, + * ProximityIn, ProximityOut + * DeviceMotionNotify, + * + */ + +typedef struct + { + BYTE type; + BYTE detail; + CARD16 sequenceNumber B16; + Time time B32; + Window root B32; + Window event B32; + Window child B32; + INT16 root_x B16; + INT16 root_y B16; + INT16 event_x B16; + INT16 event_y B16; + KeyButMask state B16; + BOOL same_screen; + CARD8 deviceid; + } deviceKeyButtonPointer; + +/********************************************************** + * + * DeviceFocus. + * + */ + +typedef struct + { + BYTE type; + BYTE detail; + CARD16 sequenceNumber B16; + Time time B32; + Window window B32; + BYTE mode; + CARD8 deviceid; + BYTE pad1, pad2; + CARD32 pad00 B32; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + } deviceFocus; + +/********************************************************** + * + * DeviceStateNotify. + * + * Note that the two high-order bits in the classes_reported + * field are the proximity state (InProximity or OutOfProximity), + * and the device mode (Absolute or Relative), respectively. + * + */ + +typedef struct + { + BYTE type; + BYTE deviceid; + CARD16 sequenceNumber B16; + Time time B32; + CARD8 num_keys; + CARD8 num_buttons; + CARD8 num_valuators; + CARD8 classes_reported; + CARD8 buttons[4]; + CARD8 keys[4]; + INT32 valuator0 B32; + INT32 valuator1 B32; + INT32 valuator2 B32; + } deviceStateNotify; + +/********************************************************** + * + * DeviceKeyStateNotify. + * + */ + +typedef struct + { + BYTE type; + BYTE deviceid; + CARD16 sequenceNumber B16; + CARD8 keys[28]; + } deviceKeyStateNotify; + +/********************************************************** + * + * DeviceButtonStateNotify. + * + */ + +typedef struct + { + BYTE type; + BYTE deviceid; + CARD16 sequenceNumber B16; + CARD8 buttons[28]; + } deviceButtonStateNotify; + +/********************************************************** + * + * DeviceMappingNotify. + * Fields must be kept in sync with core mappingnotify event. + * + */ + +typedef struct + { + BYTE type; + BYTE deviceid; + CARD16 sequenceNumber B16; + CARD8 request; + KeyCode firstKeyCode; + CARD8 count; + BYTE pad1; + Time time B32; + CARD32 pad00 B32; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + } deviceMappingNotify; + +/********************************************************** + * + * ChangeDeviceNotify. + * + */ + +typedef struct + { + BYTE type; + BYTE deviceid; + CARD16 sequenceNumber B16; + Time time B32; + CARD8 request; + BYTE pad1, pad2, pad3; + CARD32 pad00 B32; + CARD32 pad01 B32; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + } changeDeviceNotify; + +#endif diff --git a/xie/build/dec/XShm.h b/xie/build/dec/XShm.h new file mode 100644 index 0000000..485fb87 --- /dev/null +++ b/xie/build/dec/XShm.h @@ -0,0 +1,174 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/************************************************************ +Copyright 1989 by The Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +no- tice appear in all copies and that both that copyright +no- tice and this permission notice appear in supporting +docu- mentation, and that the name of MIT not be used in +advertising or publicity pertaining to distribution of the +software without specific prior written permission. +M.I.T. makes no representation about the suitability of +this software for any purpose. It is provided "as is" +without any express or implied warranty. + +********************************************************/ + +/* THIS IS NOT AN X CONSORTIUM STANDARD */ + +/* $XConsortium: XShm.h,v 1.5 91/07/12 09:54:34 rws Exp $ */ + +#ifndef _XSHM_H_ +#define _XSHM_H_ + +#include + +#define X_ShmQueryVersion 0 +#define X_ShmAttach 1 +#define X_ShmDetach 2 +#define X_ShmPutImage 3 +#define X_ShmGetImage 4 +#define X_ShmCreatePixmap 5 + +#define ShmCompletion 0 +#define ShmNumberEvents (ShmCompletion + 1) + +#define BadShmSeg 0 +#define ShmNumberErrors (BadShmSeg + 1) + +typedef unsigned int ShmSeg; + +#ifndef _XSHM_SERVER_ +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Drawable drawable; /* drawable of request */ + int major_code; /* ShmReqCode */ + int minor_code; /* X_ShmPutImage */ + ShmSeg shmseg; /* the ShmSeg used in the request */ + unsigned long offset; /* the offset into ShmSeg used in the request */ +} XShmCompletionEvent; + +typedef struct { + ShmSeg shmseg; /* resource id */ + int shmid; /* kernel id */ + char *shmaddr; /* address in client */ + Bool readOnly; /* how the server should attach it */ +} XShmSegmentInfo; + +_XFUNCPROTOBEGIN + +Bool XShmQueryVersion( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* majorVersion */, + int* /* minorVersion */, + Bool* /* sharedPixmaps */ +#endif +); + +int XShmPixmapFormat( +#if NeedFunctionPrototypes + Display* /* dpy */ +#endif +); + +Status XShmAttach( +#if NeedFunctionPrototypes + Display* /* dpy */, + XShmSegmentInfo* /* shminfo */ +#endif +); + +Status XShmDetach( +#if NeedFunctionPrototypes + Display* /* dpy */, + XShmSegmentInfo* /* shminfo */ +#endif +); + +Status XShmPutImage( +#if NeedFunctionPrototypes + Display* /* dpy */, + Drawable /* d */, + GC /* gc */, + XImage* /* image */, + int /* src_x */, + int /* src_y */, + int /* dst_x */, + int /* dst_y */, + unsigned int /* src_width */, + unsigned int /* src_height */, + Bool /* send_event */ +#endif +); + +Status XShmGetImage( +#if NeedFunctionPrototypes + Display* /* dpy */, + Drawable /* d */, + XImage* /* image */, + int /* x */, + int /* y */, + unsigned long /* plane_mask */ +#endif +); + +XImage *XShmCreateImage( +#if NeedFunctionPrototypes + Display* /* dpy */, + Visual* /* visual */, + unsigned int /* depth */, + int /* format */, + char* /* data */, + XShmSegmentInfo* /* shminfo */, + unsigned int /* width */, + unsigned int /* height */ +#endif +); + +Pixmap XShmCreatePixmap( +#if NeedFunctionPrototypes + Display* /* dpy */, + Drawable /* d */, + char* /* data */, + XShmSegmentInfo* /* shminfo */, + unsigned int /* width */, + unsigned int /* height */, + unsigned int /* depth */ +#endif +); + +_XFUNCPROTOEND + +#endif + +#endif diff --git a/xie/build/dec/XTest.h b/xie/build/dec/XTest.h new file mode 100644 index 0000000..0e7a71f --- /dev/null +++ b/xie/build/dec/XTest.h @@ -0,0 +1,151 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* $XConsortium: XTest.h,v 1.4 92/04/20 13:13:54 rws Exp $ */ +/* + +Copyright 1992 by the Massachusetts Institute of Technology + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. M.I.T. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +*/ + +#ifndef _XTEST_H_ +#define _XTEST_H_ + +#include + +#define X_XTestGetVersion 0 +#define X_XTestCompareCursor 1 +#define X_XTestFakeInput 2 + +#define XTestNumberEvents 0 + +#define XTestNumberErrors 0 + +#define XTestMajorVersion 2 +#define XTestMinorVersion 1 + +#define XTestExtensionName "XTEST" + +#ifndef _XTEST_SERVER_ + +_XFUNCPROTOBEGIN + +Bool XTestQueryExtension( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* event_basep */, + int* /* error_basep */, + int* /* majorp */, + int* /* minorp */ +#endif +); + +Bool XTestCompareCursorWithWindow( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* window */, + Cursor /* cursor */ +#endif +); + +Bool XTestCompareCurrentCursorWithWindow( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* window */ +#endif +); + +extern XTestFakeKeyEvent( +#if NeedFunctionPrototypes + Display* /* dpy */, + unsigned int /* keycode */, + Bool /* is_press */, + unsigned long /* delay */ +#endif +); + +extern XTestFakeButtonEvent( +#if NeedFunctionPrototypes + Display* /* dpy */, + unsigned int /* button */, + Bool /* is_press */, + unsigned long /* delay */ +#endif +); + +extern XTestFakeMotionEvent( +#if NeedFunctionPrototypes + Display* /* dpy */, + int /* screen */, + int /* x */, + int /* y */, + unsigned long /* delay */ +#endif +); + +extern XTestFakeRelativeMotionEvent( +#if NeedFunctionPrototypes + Display* /* dpy */, + int /* x */, + int /* y */, + unsigned long /* delay */ +#endif +); + +void XTestSetGContextOfGC( +#if NeedFunctionPrototypes + GC /* gc */, + GContext /* gid */ +#endif +); + +void XTestSetVisualIDOfVisual( +#if NeedFunctionPrototypes + Visual* /* visual */, + VisualID /* visualid */ +#endif +); + +Status XTestDiscard( +#if NeedFunctionPrototypes + Display* /* dpy */ +#endif +); + +_XFUNCPROTOEND + +#endif /* _XTEST_SERVER_ */ + +#endif diff --git a/xie/build/dec/Xext.h b/xie/build/dec/Xext.h new file mode 100644 index 0000000..0e277f2 --- /dev/null +++ b/xie/build/dec/Xext.h @@ -0,0 +1,74 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* + * $XConsortium: Xext.h,v 1.2 91/07/12 10:28:17 rws Exp $ + * + * Copyright 1989 Massachusetts Institute of Technology + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _XEXT_H_ +#define _XEXT_H_ + +#include + +_XFUNCPROTOBEGIN + +extern int (*XSetExtensionErrorHandler())( +#if NeedFunctionPrototypes + int (*handler)() +#endif +); + +extern int XMissingExtension( +#if NeedFunctionPrototypes + Display* /* dpy */, + _Xconst char* /* ext_name */ +#endif +); + +_XFUNCPROTOEND + +#define X_EXTENSION_UNKNOWN "unknown" +#define X_EXTENSION_MISSING "missing" + +#endif /* _XEXT_H_ */ diff --git a/xie/build/dec/XieAppl.h b/xie/build/dec/XieAppl.h new file mode 100644 index 0000000..1908e40 --- /dev/null +++ b/xie/build/dec/XieAppl.h @@ -0,0 +1,295 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/******************************************************************************* +** Copyright 1989-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +** and the Massachusetts Institute of Technology, Cambridge, Massachusetts. +** +** All Rights Reserved +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, +** provided that the above copyright notice appear in all copies and that +** both that copyright notice and this permission notice appear in +** supporting documentation, and that the names of Digital or MIT not be +** used in advertising or publicity pertaining to distribution of the +** software without specific, written prior permission. +** +** DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +** ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +** DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +** ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +** +*******************************************************************************/ + +/************************************************************************ +** +** FACILITY: +** +** X Image Extension +** Sample Machine Independant DDX +** +** ABSTRACT: +** +** The Xie module contains definitions used by all of the XIE layers +** -- from the applications level through the XIE server levels. +** +** ENVIRONMENT: +** +** VAX/VMS V5.3 +** ULTRIX V3.1 +** +** AUTHOR(S): +** +** Richard J. Piccolo +** Robert NC Shelley +** +** CREATION DATE: +** +** April 20, 1989 +** +************************************************************************/ + + /* + ** Symbol XIEAPPL allows XieAppl.h to be included multiple times. + */ +#ifndef XIEAPPL +#define XIEAPPL /* The "endif" MUST be the last line of this file. */ + +/***************************************************************************** +** Constants +*****************************************************************************/ + /* + ** X Image Extension name string + */ +#define XieS_Name "Xie" + + /* + ** Number of supported Events and Errors + */ +#define XieK_NumErrors 0 +#define XieK_NumEvents 3 + /* + ** Xie Event constants + */ +#define XieK_ComputationEvent 0 +#define XieK_PhotofloEvent 1 +#define XieK_DisplayEvent 2 + /* + ** Xie Event masks + */ +#define XieM_ComputationEvent (1< +#else +#include +#endif +#endif /* XIEAPPL */ + +/* +** MACRO definitions +*/ + /* + ** Return the minimum number of bits required to contain the specified + ** number of levels. Levels == 0 indicates unconstrained data of type + ** float. <<<< remember to include math.h >>>> + */ +#define BitsFromLevels_(levels) \ + ((levels) > 2 ? ((int)(ceil(log10((double)levels)/log10(2.0)))) : \ + (levels) > 0 ? 1 : sizeof(float) * 8) + /* + ** Determine if a value is a valid pointer or an error code. + ** <<<< remember to include X.h >>>> + */ +#ifdef BadImplementation +#define IsPointer_(ptr) (((unsigned long)(ptr)) > BadImplementation) +#endif + /* + ** Convenience macros for accessing generic UdpPtr fields. + */ +#define upPxlLen_(udp) ((udp)->UdpW_PixelLength) +#define upDType_(udp) ((udp)->UdpB_DType) +#define upClass_(udp) ((udp)->UdpB_Class) +#define upBase_(udp) ((udp)->UdpA_Base) +#define upArSize_(udp) ((udp)->UdpL_ArSize) +#define upPxlStr_(udp) ((udp)->UdpL_PxlStride) +#define upScnStr_(udp) ((udp)->UdpL_ScnStride) +#define upX1_(udp) ((udp)->UdpL_X1) +#define upX2_(udp) ((udp)->UdpL_X2) +#define upY1_(udp) ((udp)->UdpL_Y1) +#define upY2_(udp) ((udp)->UdpL_Y2) +#define upWidth_(udp) ((udp)->UdpL_PxlPerScn) +#define upHeight_(udp) ((udp)->UdpL_ScnCnt) +#define upPos_(udp) ((udp)->UdpL_Pos) +#define upCmpIdx_(udp) ((udp)->UdpL_CompIdx) +#define upLvl_(udp) ((udp)->UdpL_Levels) + /* + ** Convenience macros for accessing generic UdpRec fields. + */ +#define urPxlLen_(udp) ((udp).UdpW_PixelLength) +#define urDType_(udp) ((udp).UdpB_DType) +#define urClass_(udp) ((udp).UdpB_Class) +#define urBase_(udp) ((udp).UdpA_Base) +#define urArSize_(udp) ((udp).UdpL_ArSize) +#define urPxlStr_(udp) ((udp).UdpL_PxlStride) +#define urScnStr_(udp) ((udp).UdpL_ScnStride) +#define urX1_(udp) ((udp).UdpL_X1) +#define urX2_(udp) ((udp).UdpL_X2) +#define urY1_(udp) ((udp).UdpL_Y1) +#define urY2_(udp) ((udp).UdpL_Y2) +#define urWidth_(udp) ((udp).UdpL_PxlPerScn) +#define urHeight_(udp) ((udp).UdpL_ScnCnt) +#define urPos_(udp) ((udp).UdpL_Pos) +#define urCmpIdx_(udp) ((udp).UdpL_CompIdx) +#define urLvl_(udp) ((udp).UdpL_Levels) + + /* + ** The _MD forms access memory in machine-dependant (bigendian or + ** littleendian) format. The other forms access memory in + ** image format, which is always little endian. + */ +#ifdef vax +#define READ32_(address) \ + (*((int *)(address))) +#define READ32_MD READ32_ +#else + /* + ** For machine architectures that can't access longwords + ** on non-longword aligned boundaries. + ** The (unsigned int) casts seem redundant, but they are needed + ** to make the ULTRIX/RISC compiler happy. + */ +#define READ32_(address) \ + ((unsigned int) *((unsigned char *)(address)) + \ + ((unsigned int) *(((unsigned char *)(address))+1)<< 8) + \ + ((unsigned int) *(((unsigned char *)(address))+2)<<16) + \ + ((unsigned int) *(((unsigned char *)(address))+3)<<24)) +#endif + +#ifdef BIGENDIAN +#define READ32_MD(address) \ + (*(((unsigned char *)(address))+3) + \ + (*(((unsigned char *)(address))+2)<< 8) + \ + (*(((unsigned char *)(address))+1)<<16) + \ + (* ((unsigned char *)(address)) <<24)) +#else +#define READ32_MD READ32_ +#endif + +#define GET_VALUE_(base,offset,mask) \ + (READ32_((base)+((offset)>>3))>>((offset)&7)&(mask)) +#define GET_VALUE_MD(base,offset,mask) \ + (READ32_MD((base)+((offset)>>3))>>((offset)&7)&(mask)) + +#ifdef vax +#define WRITE32_(address,value) \ + (*((int *)(address)) = (int)(value)) +#define WRITE32_MD WRITE32_ +#else +#define WRITE32_(address,value) \ + ((* ((unsigned char *)(address)) = ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+1) = (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+2) = (((int)(value))>>16)&0xff), \ + (*(((unsigned char *)(address))+3) = (((int)(value))>>24)&0xff)) +#ifdef BIGENDIAN +#define WRITE32_MD(address,value) \ + ((*(((unsigned char *)(address))+3) = ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+2) = (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+1) = (((int)(value))>>16)&0xff), \ + (* ((unsigned char *)(address)) = (((int)(value))>>24)&0xff)) +#else +#define WRITE32_MD WRITE32_ +#endif +#endif + +#ifdef vax +#define XOR_WRITE32_(address,value) \ + (*((int *)(address)) ^= (int)(value)) +#define XOR_WRITE32_MD XOR_WRITE32_ +#else +#define XOR_WRITE32_(address,value) \ + ((* ((unsigned char *)(address)) ^= ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+1) ^= (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+2) ^= (((int)(value))>>16)&0xff), \ + (*(((unsigned char *)(address))+3) ^= (((int)(value))>>24)&0xff)) +#ifdef BIGENDIAN +#define XOR_WRITE32_MD(address,value) \ + ((*(((unsigned char *)(address))+3) ^= ((int)(value)) &0xff), \ + (*(((unsigned char *)(address))+2) ^= (((int)(value))>> 8)&0xff), \ + (*(((unsigned char *)(address))+1) ^= (((int)(value))>>16)&0xff), \ + (*(((unsigned char *)(address)) ^= (((int)(value))>>24)&0xff)) +#else +#define XOR_WRITE32_MD XOR_WRITE32_ +#endif +#endif + +#define PUT_VALUE_(base,offset,value,mask) \ + (WRITE32_((base)+((offset)>>3), \ + READ32_((base)+((offset)>>3)) & ~((mask)<<((offset)&7)) \ + | (((mask)&(value))<<((offset)&0x7)))) + +#define PUT_VALUE_MD(base,offset,value,mask) \ + (WRITE32_MD((base)+((offset)>>3), \ + READ32_MD((base)+((offset)>>3)) & ~((mask)<<((offset)&7)) \ + | (((mask)&(value))<<((offset)&0x7)))) + + + /* + ** Degrees to radians conversion factor -- with inverted Y axis. + */ +#define RADIANS_PER_DEGREE -0.0174532925199432959 + /* + ** These symbols define valid UdpRec data type and class combinations. + */ +#define XieK_UBAVU 0 /* unaligned bit array */ +#define XieK_UBAV 1 /* unaligned bit array that is aligned ?? */ +#define XieK_UBSVU 2 /* unaligned bit stream */ +#define XieK_UBSV 3 /* unaligned bit stream that is aligned ?? */ +#define XieK_CLCL 4 /* change list */ +#define XieK_ABU 5 /* aligned byte array */ +#define XieK_AF 6 /* aligned float array */ +#define XieK_AWU 7 /* aligned word array */ +/* Not yet implemented +#define XieK_ALU 8 +*/ +#define XieK_DATA_TYPE_COUNT 8 + + /* + ** Defs for DDX table entry points + */ +#ifndef externalref +#if (defined(VMS) && defined(VAXC)) +#define externalref globalref +#else +#define externalref extern +#endif +#endif + + /* + ** Typedefs + */ +typedef unsigned long card32; +typedef unsigned long (*Fcard32)(); /* Used in DDX dispatch table */ + + /* + ** Data structures for passing Template IDC (kernel) data to DDX + ** routines. + */ +typedef struct { + float value; /* A template value */ + long int increment; /* Number of kernel elements skipped + * between previous and this element, + * plus 1. Zero marks end of row */ +} TmpDatEntryRec, *TmpDatEntryPtr; + +typedef struct { + long int center_x; /* Template center X coordinate */ + long int center_y; /* Template center Y coordinate */ + long int x_count; /* Template x dimension */ + long int y_count; /* Template y dimension */ + TmpDatEntryPtr array; /* Pointer to the template data + * records */ +} TmpDatRec, *TmpDatPtr; + +/***************************************************************************** +** +** Xie Ddx Index - +** +** FUNCTIONAL DESCRIPTION: +** +** The following symbols define the indices into the dispatch table +** used to call "atomic" DDX functions. These functions include both +** processing routines for the protocol functions and DDX support +** routines. +** +** WARNING: The indices here AND the order of the XieDdxProc table +** in SmiDdx.c MUST match. +** +*****************************************************************************/ + /* + ** Protocol processing routines + */ +#define D_dxArea 0 /* Protocol functions */ +#define D_dxStatsArea 1 +#define D_dxArith 2 +#define D_dxHistogram 3 +#define D_dxChromeCom 4 +#define D_dxChromeSep 5 +#define D_dxCompare 6 +#define D_dxConstrain 7 +#define D_dxCrop 8 +#define D_dxDither 9 +#define D_dxFill 10 +#define D_dxLogical 11 +#define D_dxLuminance 12 +#define D_dxMatchHistogram 13 +#define D_dxMath 14 +#define D_dxMirror 15 +#define D_dxPoint 16 +#define D_dxStatsPoint 17 +#define D_dxRotate 18 +#define D_dxScale 19 +#define D_dxTranslate 20 +#define D_dxRmOwnData 21 + /* 21..32 -- was Compression handlers */ + /* + ** DDX specific function indices + */ +#define D_dxInit 33 /* DDX Init routine */ +#define D_dxReset 34 /* " Reset */ +#define D_dxOptimizePipe 35 /* " Pipeline optimizer */ +#define D_dxConvert 36 /* Udp support routines */ +#define D_dxCopy 37 +#define D_dxGetTyp 38 +#define D_dxCopyBits 39 +#define D_dxResolveUdp 40 +#define D_dxCalloc 41 /* Memory mgt routines */ +#define D_dxCallocBits 42 +#define D_dxCfree 43 +#define D_dxFree 44 +#define D_dxFreeBits 45 +#define D_dxMalloc 46 +#define D_dxMallocBits 47 +#define D_dxRealloc 48 +#define D_dxReallocBits 49 +#define D_dxCreatePipeline 50 /* Pipeline routines */ +#define D_dxDestroyPipeline 51 +#define D_dxPipeHasYielded 52 /* was D_dxExecutePipeline */ +#define D_dxInitiatePipeline 53 +#define D_dxResumePipeline 54 +#define D_dxFlushPipeline 55 +#define D_dxAbortPipeline 56 +#define D_dxRmAllocData 57 /* Pipe resource mgr routines */ +#define D_dxRmAllocDataDesc 58 +#define D_dxRmAllocPermDesc 59 +#define D_dxRmAllocRefDesc 60 +#define D_dxRmBestDType 61 +#define D_dxRmCreateDrain 62 +#define D_dxRmCreateSink 63 +#define D_dxRmDeallocData 64 +#define D_dxRmDeallocDataDesc 65 +#define D_dxRmDestroyDrain 66 +#define D_dxRmDestroySink 67 +#define D_dxRmGetData 68 +#define D_dxRmGetDType 69 +#define D_dxRmGetMaxQuantum 70 +#define D_dxRmGetQuantum 71 +#define D_dxRmHasQuantum 72 +#define D_dxRmInitializePort 73 +#define D_dxRmMergeBuffers 75 +#define D_dxRmObtainQuantum 76 +#define D_dxRmPutData 77 +#define D_dxRmSetDType 78 +#define D_dxRmSetQuantum 79 +#define D_dxRmSplitBuffers 80 +#define D_dxSchedProcessComplete 81 /* Pipe scheduling routines */ +#define D_dxSchedProcessReady 82 +#define D_dxSchedOkToRun 83 +#define D_dxBuildChangeList 84 /* Change list routines */ +#define D_dxPutRuns 85 +#define D_dxFfsLong 86 +#define D_dxFfcLong 87 +#define D_dxFillRegion 88 /* Miscellaneous additions */ +#define D_dxConvertCpp 89 +#define D_dxCopyCpp 90 +#define D_dxEncodeG4 91 +#define D_dxEncodeDct 92 +#define D_dxDecodeG4 93 +#define D_dxDecodeDct 94 +#define D_dxPosCl 95 +#define D_dxCheckLicense 96 + /* More RM functions */ +#define D_dxRmAllocCmpDataDesc 97 /* was D_dxRmGetAlignment */ +#define D_dxRmSetAlignment 98 +#define D_dxRmCreateDataDesc 99 +#define D_dxCreatePipeCtx 100 +#define D_dxUsingCL 101 +#define D_dxCmpPreferred 102 /* was D_dxSmiDecodeG4IsAtomic */ +#define D_dxRmAllocDataArray 103 +#define D_dxRmAllocCmpPermDesc 104 +#define D_dxSchedProcessNoInput 105 + +/***************************************************************************** +** +** DDX Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the DDX functions while hiding +** the implementation from the caller. +** +*****************************************************************************/ + /* + ** DDX function access macro + ** This macro calls an arbitrary DDX routine through the + ** xieDdxProc dispatch table. + ** + ** func = the Mi function index from this file. + ** + */ +externalref card32 (*xieDdxProc[])(); +#define CallDdx_(func) (*(xieDdxProc)[func]) + /* + ** Image functions + */ +#define DdxArea_ CallDdx_(D_dxArea) +#define DdxStatsArea_ CallDdx_(D_dxStatsArea) +#define DdxArith_ CallDdx_(D_dxArith) +#define DdxHistogram_ CallDdx_(D_dxHistogram) +#define DdxChromeCom_ CallDdx_(D_dxChromeCom) +#define DdxChromeSep_ CallDdx_(D_dxChromeSep) +#define DdxCompare_ CallDdx_(D_dxCompare) +#define DdxConstrain_ CallDdx_(D_dxConstrain) +#define DdxCrop_ CallDdx_(D_dxCrop) +#define DdxDither_ CallDdx_(D_dxDither) +#define DdxFill_ CallDdx_(D_dxFill) +#define DdxLogical_ CallDdx_(D_dxLogical) +#define DdxLuminance_ CallDdx_(D_dxLuminance) +#define DdxMatchHistogram_ CallDdx_(D_dxMatchHistogram) +#define DdxMath_ CallDdx_(D_dxMath) +#define DdxMirror_ CallDdx_(D_dxMirror) +#define DdxPoint_ CallDdx_(D_dxPoint) +#define DdxStatsPoint_ CallDdx_(D_dxStatsPoint) +#define DdxRotate_ CallDdx_(D_dxRotate) +#define DdxScale_ CallDdx_(D_dxScale) +#define DdxTranslate_ CallDdx_(D_dxTranslate) +#define DdxRmOwnData_ CallDdx_(D_dxRmOwnData) + /* + ** Ddx specific functions + */ +#define DdxInit_ CallDdx_(D_dxInit) +#define DdxReset_ CallDdx_(D_dxReset) +#define DdxOptimizePipe_ CallDdx_(D_dxOptimizePipe) + /* + ** MI software functions + */ +#define DdxConvert_ CallDdx_(D_dxConvert) +#define DdxCopy_ CallDdx_(D_dxCopy) +#define DdxGetTyp_ CallDdx_(D_dxGetTyp) +#define DdxCopyBits_ CallDdx_(D_dxCopyBits) /* 65 */ +#define DdxResolveUdp_ CallDdx_(D_dxResolveUdp) + /* + ** Memory management routines + */ +#define DdxCalloc_ CallDdx_(D_dxCalloc) +#define DdxCallocBits_ (unsigned char *)CallDdx_(D_dxCallocBits) +#define DdxCfree_ CallDdx_(D_dxCfree) +#define DdxFree_ CallDdx_(D_dxFree) +#define DdxFreeBits_ (unsigned char *)CallDdx_(D_dxFreeBits) +#define DdxMalloc_ CallDdx_(D_dxMalloc) +#define DdxMallocBits_ (unsigned char *)CallDdx_(D_dxMallocBits) +#define DdxRealloc_ CallDdx_(D_dxRealloc) +#define DdxReallocBits_ (unsigned char *)CallDdx_(D_dxReallocBits) + /* + ** Pipeline support routines + */ +#define DdxCreatePipeline_ (Pipe)CallDdx_(D_dxCreatePipeline) +#define DdxDestroyPipeline_ (int)CallDdx_(D_dxDestroyPipeline) +#define DdxPipeHasYielded_ (int)CallDdx_(D_dxPipeHasYielded) +#define DdxInitiatePipeline_ (int)CallDdx_(D_dxInitiatePipeline) +#define DdxResumePipeline_ (int)CallDdx_(D_dxResumePipeline) +#define DdxFlushPipeline_ (int)CallDdx_(D_dxFlushPipeline) +#define DdxAbortPipeline_ (int)CallDdx_(D_dxAbortPipeline) + /* + ** Pipeline resource manager routines + */ +#define DdxRmAllocData_ (PipeDataPtr)CallDdx_(D_dxRmAllocData) +#define DdxRmAllocDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocDataDesc) +#define DdxRmAllocPermDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocPermDesc) +#define DdxRmAllocRefDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocRefDesc) +#define DdxRmBestDType_ (char)CallDdx_(D_dxRmBestDType) +#define DdxRmCreateDrain_ (PipeDrainPtr)CallDdx_(D_dxRmCreateDrain) +#define DdxRmCreateSink_ (PipeSinkPtr)CallDdx_(D_dxRmCreateSink) +#define DdxRmDeallocData_ (PipeDataPtr)CallDdx_(D_dxRmDeallocData) +#define DdxRmDeallocDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmDeallocDataDesc) +#define DdxRmDestroyDrain_ (PipeDrainPtr)CallDdx_(D_dxRmDestroyDrain) +#define DdxRmDestroySink_ (PipeSinkPtr)CallDdx_(D_dxRmDestroySink) +#define DdxRmGetData_ (PipeDataPtr)CallDdx_(D_dxRmGetData) +#define DdxRmGetDType_ (int)CallDdx_(D_dxRmGetDType) +#define DdxRmGetMaxQuantum_ (int)CallDdx_(D_dxRmGetMaxQuantum) +#define DdxRmGetQuantum_ (int)CallDdx_(D_dxRmGetQuantum) +#define DdxRmHasQuantum_ (int)CallDdx_(D_dxRmHasQuantum) +#define DdxRmInitializePort_ (int)CallDdx_(D_dxRmInitializePort) +#define DdxRmMergeBuffers_ (PipeDataPtr)CallDdx_(D_dxRmMergeBuffers) +#define DdxRmObtainQuantum_ (PipeDataPtr)CallDdx_(D_dxRmObtainQuantum) +#define DdxRmPutData_ (int)CallDdx_(D_dxRmPutData) +#define DdxRmSetDType_ CallDdx_(D_dxRmSetDType) +#define DdxRmSetQuantum_ CallDdx_(D_dxRmSetQuantum) +#define DdxRmSplitBuffers_ (PipeDataPtr)CallDdx_(D_dxRmSplitBuffers) + /* + ** Pipe scheduling routines + */ +#define DdxSchedProcessComplete_ (PipeElementCtxPtr)CallDdx_(D_dxSchedProcessComplete) +#define DdxSchedProcessReady_ (PipeElementCtxPtr)CallDdx_(D_dxSchedProcessReady) +#define DdxSchedOkToRun_ (int)CallDdx_(D_dxSchedOkToRun) + /* + ** Change list routines + */ +#define DdxBuildChangeList_ CallDdx_(D_dxBuildChangeList) +#define DdxPutRuns_ CallDdx_(D_dxPutRuns) +#define DdxFfsLong_ CallDdx_(D_dxFfsLong) +#define DdxFfcLong_ CallDdx_(D_dxFfcLong) + /* + ** Additions + */ +#define DdxFillRegion_ CallDdx_(D_dxFillRegion) +#define DdxConvertCpp_ CallDdx_(D_dxConvertCpp) +#define DdxCopyCpp_ CallDdx_(D_dxCopyCpp) +#define DdxEncodeG4_ CallDdx_(D_dxEncodeG4) +#define DdxEncodeDct_ CallDdx_(D_dxEncodeDct) +#define DdxDecodeG4_ CallDdx_(D_dxDecodeG4) +#define DdxDecodeDct_ CallDdx_(D_dxDecodeDct) +#define DdxPosCl_ CallDdx_(D_dxPosCl) +#define DdxCheckLicense_ CallDdx_(D_dxCheckLicense) + /* + ** More RM functions + */ +#define DdxRmAllocCmpDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocCmpDataDesc) +#define DdxRmSetAlignment_ CallDdx_(D_dxRmSetAlignment) +#define DdxRmCreateDataDesc_ (PipeDataPtr)CallDdx_(D_dxRmCreateDataDesc) +#define DdxCreatePipeCtx_ (PipeElementCtxPtr)CallDdx_(D_dxCreatePipeCtx) +#define DdxUsingCL_ CallDdx_(D_dxUsingCL) +#define DdxCmpPreferred_ CallDdx_(D_dxCmpPreferred) +#define DdxRmAllocDataArray_ CallDdx_(D_dxRmAllocDataArray) +#define DdxRmAllocCmpPermDesc_ (PipeDataPtr)CallDdx_(D_dxRmAllocCmpPermDesc) +#define DdxSchedProcessNoInput_ (PipeElementCtxPtr)CallDdx_(D_dxSchedProcessNoInput) + +/***************************************************************************** +** +** Xie Ddx Setup Index - +** +** FUNCTIONAL DESCRIPTION: +** +** The following symbols define the indices into the dispatch table +** used to call "pipeline create" DDX functions. Each of these +** functions creates a new pipeline element. +** +** WARNING: These indices and the entries in the XieDdxSetup table +** in SmiDdx.c MUST be in the same order. +** +*****************************************************************************/ +#define D_dxCreateArea 0 +#define D_dxCreateArith 1 +#define D_dxCreateChromeCom 2 +#define D_dxCreateChromeSep 3 +#define D_dxCreateCompare 4 +#define D_dxCreateConstrain 5 +#define D_dxCreateCrop 6 +#define D_dxCreateDither 7 +#define D_dxCreateFill 8 +#define D_dxCreateLogical 9 +#define D_dxCreateLuminance 10 +#define D_dxCreateMatchHistogram 11 +#define D_dxCreateMath 12 +#define D_dxCreateMirror 13 +#define D_dxCreatePoint 14 +#define D_dxCreateRotate 15 +#define D_dxCreateScale 16 +#define D_dxCreateTranslate 17 +#define D_dxCreateDecodeDct 18 /* Compression pipeline creates */ +#define D_dxCreateEncodeDct 19 +#define D_dxCreateDecodeG4 20 +#define D_dxCreateEncodeG4 21 + +/***************************************************************************** +** +** Pipeline Create Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the Pipeline Create functions while +** hiding the implementation from the caller. +** +*****************************************************************************/ + /* + ** Pipe create function access macro + ** This macro calls a create function through the + ** xieDdxSetup dispatch table. + ** + ** func = the setup function index from this file. + ** + */ +externalref card32 (*xieDdxSetup[])(); +#define CallCreate_(func) (*(xieDdxSetup)[func]) + /* + ** Image processing pipe element creates + */ +#define DdxCreateArea_ CallCreate_(D_dxCreateArea) +#define DdxCreateArith_ CallCreate_(D_dxCreateArith) +#define DdxCreateChromeCom_ CallCreate_(D_dxCreateChromeCom) +#define DdxCreateChromeSep_ CallCreate_(D_dxCreateChromeSep) +#define DdxCreateCompare_ CallCreate_(D_dxCreateCompare) +#define DdxCreateConstrain_ CallCreate_(D_dxCreateConstrain) +#define DdxCreateCrop_ CallCreate_(D_dxCreateCrop) +#define DdxCreateDither_ CallCreate_(D_dxCreateDither) +#define DdxCreateFill_ CallCreate_(D_dxCreateFill) +#define DdxCreateLogical_ CallCreate_(D_dxCreateLogical) +#define DdxCreateLuminance_ CallCreate_(D_dxCreateLuminance) +#define DdxCreateMatchHistogram_ CallCreate_(D_dxCreateMatchHistogram) +#define DdxCreateMath_ CallCreate_(D_dxCreateMath) +#define DdxCreateMirror_ CallCreate_(D_dxCreateMirror) +#define DdxCreatePoint_ CallCreate_(D_dxCreatePoint) +#define DdxCreateRotate_ CallCreate_(D_dxCreateRotate) +#define DdxCreateScale_ CallCreate_(D_dxCreateScale) +#define DdxCreateTranslate_ CallCreate_(D_dxCreateTranslate) + /* + ** Compression creates, used by Transport + */ +#define DdxCreateDecodeDct_ CallCreate_(D_dxCreateDecodeDct) +#define DdxCreateEncodeDct_ CallCreate_(D_dxCreateEncodeDct) +#define DdxCreateDecodeG4_ CallCreate_(D_dxCreateDecodeG4) +#define DdxCreateEncodeG4_ CallCreate_(D_dxCreateEncodeG4) + +/***************************************************************************** +** +** Ddx Alignment Function Access Index +** +** FUNCTIONAL DESCRIPTION: +** +** The following symbols define the indices into the DDX Alignment +** dispatch table used to call DDX image array alignment functions. +** Each of these functions performs alignments to meet individual +** algorithms or the default DDX needs. +** +** WARNING: These indices and the entries in the XieDdxAlign table +** in SmiDdx.c MUST be in the same order. +** +** +*****************************************************************************/ +#define D_dxAlignArea 0 +#define D_dxAlignArith 1 +#define D_dxAlignChromeCom 2 +#define D_dxAlignChromeSep 3 +#define D_dxAlignCompare 4 +#define D_dxAlignConstrain 5 +#define D_dxAlignCrop 6 +#define D_dxAlignDither 7 +#define D_dxAlignFill 8 +#define D_dxAlignLogical 9 +#define D_dxAlignLuminance 10 +#define D_dxAlignMatchHistogram 11 +#define D_dxAlignMath 12 +#define D_dxAlignMirror 13 +#define D_dxAlignPoint 14 +#define D_dxAlignRotate 15 +#define D_dxAlignScale 16 +#define D_dxAlignTranslate 17 +#define D_dxAlignDecodeDct 18 +#define D_dxAlignEncodeDct 19 +#define D_dxAlignDecodeG4 20 +#define D_dxAlignEncodeG4 21 +#define D_dxAlignDefault 22 +#define D_dxAlignExport 23 + +/***************************************************************************** +** +** DDX Alignment Function Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the DDX image array alignment functions +** +*****************************************************************************/ + /* + ** Align function access macro + ** This macro calls an arbitrary Alignment routine through the + ** xieDdxAlign dispatch table. + ** + ** func = the DDX alignment function index from this file. + ** + */ +externalref card32 (*xieDdxAlign[])(); +#define GetAlign_(func) (xieDdxAlign[func]) + +#define DdxAlignArea_ GetAlign_(D_dxAlignArea) +#define DdxAlignStatsArea_ GetAlign_(D_dxAlignStatsArea) +#define DdxAlignArith_ GetAlign_(D_dxAlignArith) +#define DdxAlignHistogram_ GetAlign_(D_dxAlignHistogram) +#define DdxAlignChromeCom_ GetAlign_(D_dxAlignChromeCom) +#define DdxAlignChromeSep_ GetAlign_(D_dxAlignChromeSep) +#define DdxAlignCompare_ GetAlign_(D_dxAlignCompare) +#define DdxAlignConstrain_ GetAlign_(D_dxAlignConstrain) +#define DdxAlignCrop_ GetAlign_(D_dxAlignCrop) +#define DdxAlignDither_ GetAlign_(D_dxAlignDither) +#define DdxAlignFill_ GetAlign_(D_dxAlignFill) +#define DdxAlignLogical_ GetAlign_(D_dxAlignLogical) +#define DdxAlignLuminance_ GetAlign_(D_dxAlignLuminance) +#define DdxAlignMatchHistogram_ GetAlign_(D_dxAlignMatchHistogram) +#define DdxAlignMath_ GetAlign_(D_dxAlignMath) +#define DdxAlignMirror_ GetAlign_(D_dxAlignMirror) +#define DdxAlignPoint_ GetAlign_(D_dxAlignPoint) +#define DdxAlignStatsPoint_ GetAlign_(D_dxAlignStatsPoint) +#define DdxAlignRotate_ GetAlign_(D_dxAlignRotate) +#define DdxAlignScale_ GetAlign_(D_dxAlignScale) +#define DdxAlignTranslate_ GetAlign_(D_dxAlignTranslate) +#define DdxAlignDecodeDct_ GetAlign_(D_dxAlignDecodeDct) +#define DdxAlignEncodeDct_ GetAlign_(D_dxAlignEncodeDct) +#define DdxAlignDecodeG4_ GetAlign_(D_dxAlignDecodeG4) +#define DdxAlignEncodeG4_ GetAlign_(D_dxAlignEncodeG4) +#define DdxAlignDefault_ GetAlign_(D_dxAlignDefault) +#define DdxAlignExport_ GetAlign_(D_dxAlignExport) + +/***************************************************************************** +** +** Mi Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the "atomic" DDX functions provided +** by a Machine Independent layer of the DDX. +** +*****************************************************************************/ + /* + ** Mi function access macro + ** This macro calls an arbitrary Mi routine through the + ** xieMiProc dispatch table. + ** + ** func = the Mi function index from this file. + ** + */ +externalref card32 (*xieMiProc[])(); +#define CallMi_(func) (*(xieMiProc)[func]) + /* + ** Image functions + */ +#define MiArea_ CallMi_(D_dxArea) +#define MiStatsArea_ CallMi_(D_dxStatsArea) +#define MiArith_ CallMi_(D_dxArith) +#define MiHistogram_ CallMi_(D_dxHistogram) +#define MiChromeCom_ CallMi_(D_dxChromeCom) +#define MiChromeSep_ CallMi_(D_dxChromeSep) +#define MiCompare_ CallMi_(D_dxCompare) +#define MiConstrain_ CallMi_(D_dxConstrain) +#define MiCrop_ CallMi_(D_dxCrop) +#define MiDither_ CallMi_(D_dxDither) +#define MiFill_ CallMi_(D_dxFill) +#define MiLogical_ CallMi_(D_dxLogical) +#define MiLuminance_ CallMi_(D_dxLuminance) +#define MiMatchHistogram_ CallMi_(D_dxMatchHistogram) +#define MiMath_ CallMi_(D_dxMath) +#define MiMirror_ CallMi_(D_dxMirror) +#define MiPoint_ CallMi_(D_dxPoint) +#define MiStatsPoint_ CallMi_(D_dxStatsPoint) +#define MiRotate_ CallMi_(D_dxRotate) +#define MiScale_ CallMi_(D_dxScale) +#define MiTranslate_ CallMi_(D_dxTranslate) + /* + ** Mi specific functions + */ +#define MiInit_ CallMi_(D_dxInit) +#define MiReset_ CallMi_(D_dxReset) +#define MiOptimizePipe_ CallMi_(D_dxOptimizePipe) + /* + ** MI software functions + */ +#define MiConvert_ CallMi_(D_dxConvert) +#define MiCopy_ CallMi_(D_dxCopy) +#define MiGetTyp_ CallMi_(D_dxGetTyp) +#define MiCopyBits_ CallMi_(D_dxCopyBits) +#define MiResolveUdp_ CallMi_(D_dxResolveUdp) + /* + ** Memory management routines + */ +#define MiCalloc_ CallMi_(D_dxCalloc) +#define MiCallocBits_ (unsigned char *)CallMi_(D_dxCallocBits) +#define MiCfree_ CallMi_(D_dxCfree) +#define MiFree_ CallMi_(D_dxFree) +#define MiFreeBits_ (unsigned char *)CallMi_(D_dxFreeBits) +#define MiMalloc_ CallMi_(D_dxMalloc) +#define MiMallocBits_ (unsigned char *)CallMi_(D_dxMallocBits) +#define MiRealloc_ CallMi_(D_dxRealloc) +#define MiReallocBits_ (unsigned char *)CallMi_(D_dxReallocBits) + /* + ** Pipeline support routines + */ +#define MiCreatePipeline_ (Pipe)CallMi_(D_dxCreatePipeline) +#define MiDestroyPipeline_ (int)CallMi_(D_dxDestroyPipeline) +#define MiPipeHasYielded_ (int)CallMi_(D_dxPipeHasYielded) +#define MiInitiatePipeline_ (int)CallMi_(D_dxInitiatePipeline) +#define MiResumePipeline_ (int)CallMi_(D_dxResumePipeline) +#define MiFlushPipeline_ (int)CallMi_(D_dxFlushPipeline) +#define MiAbortPipeline_ (int)CallMi_(D_dxAbortPipeline) + /* + ** Pipeline resource manager routines + */ +#define MiRmAllocData_ (PipeDataPtr)CallMi_(D_dxRmAllocData) +#define MiRmAllocDataDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocDataDesc) +#define MiRmAllocPermDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocPermDesc) +#define MiRmAllocRefDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocRefDesc) +#define MiRmBestDType_ (char)CallMi_(D_dxRmBestDType) +#define MiRmCreateDrain_ (PipeDrainPtr)CallMi_(D_dxRmCreateDrain) +#define MiRmCreateSink_ (PipeSinkPtr)CallMi_(D_dxRmCreateSink) +#define MiRmDeallocData_ (PipeDataPtr)CallMi_(D_dxRmDeallocData) +#define MiRmDeallocDataDesc_ (PipeDataPtr)CallMi_(D_dxRmDeallocDataDesc) +#define MiRmDestroyDrain_ (PipeDrainPtr)CallMi_(D_dxRmDestroyDrain) +#define MiRmDestroySink_ (PipeSinkPtr)CallMi_(D_dxRmDestroySink) +#define MiRmGetData_ (PipeDataPtr)CallMi_(D_dxRmGetData) +#define MiRmGetDType_ (int)CallMi_(D_dxRmGetDType) +#define MiRmGetMaxQuantum_ (int)CallMi_(D_dxRmGetMaxQuantum) +#define MiRmGetQuantum_ (int)CallMi_(D_dxRmGetQuantum) +#define MiRmHasQuantum_ (int)CallMi_(D_dxRmHasQuantum) +#define MiRmInitializePort_ (int)CallMi_(D_dxRmInitializePort) +#define MiRmMergeBuffers_ (PipeDataPtr)CallMi_(D_dxRmMergeBuffers) +#define MiRmObtainQuantum_ (PipeDataPtr)CallMi_(D_dxRmObtainQuantum) +#define MiRmPutData_ (int)CallMi_(D_dxRmPutData) +#define MiRmSetDType_ CallMi_(D_dxRmSetDType) +#define MiRmSetQuantum_ CallMi_(D_dxRmSetQuantum) +#define MiRmSplitBuffers_ (PipeDataPtr)CallMi_(D_dxRmSplitBuffers) + /* + ** Pipe scheduling routines + */ +#define MiSchedProcessComplete_ (PipeElementCtxPtr)CallMi_(D_dxSchedProcessComplete) +#define MiSchedProcessReady_ (PipeElementCtxPtr)CallMi_(D_dxSchedProcessReady) +#define MiSchedOkToRun_ (int)CallMi_(D_dxSchedOkToRun) + /* + ** Change list routines + */ +#define MiBuildChangeList_ CallMi_(D_dxBuildChangeList) +#define MiPutRuns_ CallMi_(D_dxPutRuns) +#define MiFfsLong_ CallMi_(D_dxFfsLong) +#define MiFfcLong_ CallMi_(D_dxFfcLong) + /* + ** Additions + */ +#define MiFillRegion_ CallMi_(D_dxFillRegion) +#define MiConvertCpp_ CallMi_(D_dxConvertCpp) +#define MiCopyCpp_ CallMi_(D_dxCopyCpp) +#define MiEncodeG4_ CallMi_(D_dxEncodeG4) +#define MiEncodeDct_ CallMi_(D_dxEncodeDct) +#define MiDecodeG4_ CallMi_(D_dxDecodeG4) +#define MiDecodeDct_ CallMi_(D_dxDecodeDct) +#define MiPosCl_ CallMi_(D_dxPosCl) +#define MiCheckLicense_ CallMi_(D_dxCheckLicense) + /* + ** More resource manager + */ +#define MiRmAllocCmpDataDesc_ CallMi_(D_dxRmAllocCmpDataDesc) +#define MiRmSetAlignment_ CallMi_(D_dxRmSetAlignment) +#define MiRmCreateDataDesc_ (PipeDataPtr)CallMi_(D_dxRmCreateDataDesc) +#define MiCreatePipeCtx_ (PipeElementCtxPtr)CallMi_(D_dxCreatePipeCtx) +#define MiUsingCL_ CallMi_(D_dxUsingCL) +#define MiCmpPreferred_ CallMi_(D_dxCmpPreferred) +#define MiRmAllocDataArray_ CallMi_(D_dxRmAllocDataArray) +#define MiRmAllocCmpPermDesc_ (PipeDataPtr)CallMi_(D_dxRmAllocCmpPermDesc) +#define MiSchedProcessNoInput_ (PipeElementCtxPtr)CallMi_(D_dxSchedProcessNoInput) + +/***************************************************************************** +** +** Pipeline Create Access Macros +** +** FUNCTIONAL DESCRIPTION: +** +** These macros provide access to the "pipeline create" DDX functions +** provided by a Machine Independent layer of the DDX. +** +*****************************************************************************/ + /* + ** Pipe create function access macro + ** This macro calls a create function through the + ** xieMiSetup dispatch table. + ** + ** func = the setup function index from this file. + ** + */ +externalref card32 (*xieMiSetup[])(); +#define CallMiCreate_(func) (*(xieMiSetup)[func]) + /* + ** Image processing pipe element creates + */ +#define MiCreateArea_ CallMiCreate_(D_dxCreateArea) +#define MiCreateArith_ CallMiCreate_(D_dxCreateArith) +#define MiCreateChromeCom_ CallMiCreate_(D_dxCreateChromeCom) +#define MiCreateChromeSep_ CallMiCreate_(D_dxCreateChromeSep) +#define MiCreateCompare_ CallMiCreate_(D_dxCreateCompare) +#define MiCreateConstrain_ CallMiCreate_(D_dxCreateConstrain) +#define MiCreateCrop_ CallMiCreate_(D_dxCreateCrop) +#define MiCreateDither_ CallMiCreate_(D_dxCreateDither) +#define MiCreateFill_ CallMiCreate_(D_dxCreateFill) +#define MiCreateLogical_ CallMiCreate_(D_dxCreateLogical) +#define MiCreateLuminance_ CallMiCreate_(D_dxCreateLuminance) +#define MiCreateMatchHistogram_ CallMiCreate_(D_dxCreateMatchHistogram) +#define MiCreateMath_ CallMiCreate_(D_dxCreateMath) +#define MiCreateMirror_ CallMiCreate_(D_dxCreateMirror) +#define MiCreatePoint_ CallMiCreate_(D_dxCreatePoint) +#define MiCreateRotate_ CallMiCreate_(D_dxCreateRotate) +#define MiCreateScale_ CallMiCreate_(D_dxCreateScale) +#define MiCreateTranslate_ CallMiCreate_(D_dxCreateTranslate) + /* + ** Compression creates, used by Transport + */ +#define MiCreateDecodeDct_ CallMiCreate_(D_dxCreateDecodeDct) +#define MiCreateEncodeDct_ CallMiCreate_(D_dxCreateEncodeDct) +#define MiCreateDecodeG4_ CallMiCreate_(D_dxCreateDecodeG4) +#define MiCreateEncodeG4_ CallMiCreate_(D_dxCreateEncodeG4) + +/* +** This "endif" MUST be the last line of this file. +*/ +#endif +/* end of XIEDDX -- NO DEFINITIONS ALLOWED BEYOND THIS POINT */ diff --git a/xie/build/dec/XieFloat.h b/xie/build/dec/XieFloat.h new file mode 100644 index 0000000..c58f26f --- /dev/null +++ b/xie/build/dec/XieFloat.h @@ -0,0 +1,99 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ + +/*********************************************************** +Copyright 1990-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/************************************************************************ +** +** FACILITY: +** +** XIE - X11 Image Extension +** +** +** ABSTRACT: +** +** This module contains definitions required by the XIE library +** and XIE server floating point formatting routines. +** +** ENVIRONMENT: +** +** VAX/VMS V5.3 +** ULTRIX V3.1 +** +** AUTHOR(S): +** +** Robert NC Shelley +** +** CREATION DATE: +** +** October 31, 1990 +** +************************************************************************/ + + /* + ** Symbol XIEFLOAT allows XieFloat.h to be included multiple times. + */ +#ifndef XIEFLOAT +#define XIEFLOAT /* the "endif" MUST be the last line of this file */ + +#include /* for CARD8, ..., typedefs */ + + /* + ** Wire floating point format + */ +typedef struct _XieFloatRec { + CARD8 e_sign; + CARD8 m_sign; + CARD16 exponent; + CARD32 mantissa; +} XieFloatRec, *XieFloat; + +extern void MiEncodeDouble(); +extern double MiDecodeDouble(); + +#endif diff --git a/xie/build/dec/XieLib.h b/xie/build/dec/XieLib.h new file mode 100644 index 0000000..25409f9 --- /dev/null +++ b/xie/build/dec/XieLib.h @@ -0,0 +1,372 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ + +/******************************************************************************* +** Copyright 1989-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +** and the Massachusetts Institute of Technology, Cambridge, Massachusetts. +** +** All Rights Reserved +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, +** provided that the above copyright notice appear in all copies and that +** both that copyright notice and this permission notice appear in +** supporting documentation, and that the names of Digital or MIT not be +** used in advertising or publicity pertaining to distribution of the +** software without specific, written prior permission. +** +** DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +** ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +** DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +** ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +** +*******************************************************************************/ + +/******************************************************************************* +** +** FACILITY: +** +** XIE - X11 Image Extension +** +** +** ABSTRACT: +** +** This module contains definitions required by all XIE client side +** layers -- from the application level through the XieLib level. +** +** ENVIRONMENT: +** +** VAX/VMS V5.3 +** ULTRIX V3.1 +** +** AUTHOR(S): +** +** Robert NC Shelley +** +** CREATION DATE: +** +** April 13, 1989 +** +*******************************************************************************/ + + /* + ** Symbol XIELIB allows XieLib.h to be included multiple times. + */ +#ifndef _XIELIB +#define _XIELIB /* the "endif" MUST be the last line of this file */ + +/* +** Include files +*/ +#ifdef VMS +#include /* X11 Library Definitions */ +#else +#include /* X11 Library Definitions */ +#endif +#ifdef VMS +#include /* universal data plane definitions */ +#include /* XIE inter-layer definitions */ +#else +#include /* universal data plane definitions */ +#include /* XIE inter-layer definitions */ +#endif + +/* +** Equated symbols +*/ + /* + ** XieCopyImage, XieGetImage, and XiePutImage image data mode constants. + */ +#define XieK_DataNone 1 /* no buffers, no transport setup, no data copy */ +#define XieK_DataFlo 2 /* prepare a Photoflo for image data transport */ +#define XieK_DataMap 3 /* prepare a Photomap for image data transport */ +#define XieK_DataAlloc 4 /* allocate image buffers containing no data */ +#define XieK_DataCopy 5 /* allocate image buffers and copy data */ +#define XieK_DataShare 6 /* copy pointers to existing image data */ + /* + ** Opaque Xie resource definitions. + */ +typedef unsigned long *XieStream; /* Stream transport context pointer */ +typedef unsigned char + *XiePhotoflo, /* Photoflo: server image pipeline object */ + *XiePhotomap, /* Photomap: permanent server image object */ + *XiePhototap, /* Phototap: ephemeral server image object */ + *XieCpp, /* Cpp: control processing plane */ + *XieRoi, /* Roi: region of interest */ + *XieTmp, /* Tmp: template (eg. convolution kernel) */ + *XiePhoto, /* Any of: XiePhotoflo, XiePhotomap, XiePhototap*/ + *XieIdc, /* Any of: XieCpp, XieRoi, XieTmp, */ + *XieResource; /* Any of: XiePhoto, XieIdc */ + +#ifdef __alpha +#define RES_XID 16 /* offset to XieResource X11 resource-id */ +#define RES_TYPE 24 /* offset to XieResource resource type */ +#define RES_MAPPING 25 /* offset to XiePhoto component mapping */ +#else +#define RES_XID 8 /* offset to XieResource X11 resource-id */ +#define RES_TYPE 12 /* offset to XieResource resource type */ +#define RES_MAPPING 13 /* offset to XiePhoto component mapping */ +#endif +/* +** Macros +*/ + /* + ** Macro for returning a resource's X11-id. + */ +#define XId_(res) (*((XID *)(&((XieResource)(res))[RES_XID]))) + /* + ** Boolean macros for determining a resource's type. + */ +#define IsPhotoflo_(res) (((XieResource)(res))[RES_TYPE]==XieK_Photoflo) +#define IsPhotomap_(res) (((XieResource)(res))[RES_TYPE]==XieK_Photomap) +#define IsPhototap_(res) (((XieResource)(res))[RES_TYPE]==XieK_Phototap) +#define IsCpp_(res) (((XieResource)(res))[RES_TYPE]==XieK_IdcCpp) +#define IsRoi_(res) (((XieResource)(res))[RES_TYPE]==XieK_IdcRoi) +#define IsTmp_(res) (((XieResource)(res))[RES_TYPE]==XieK_IdcTmp) +#define IsPhoto_(res) (IsPhotoflo_(res)||IsPhotomap_(res)||IsPhototap_(res)) +#define IsIdc_(res) (IsCpp_(res)||IsRoi_(res)||IsTmp_(res)) + /* + ** Boolean macros for determining a XiePhotomap's component mapping. + */ +#define IsBitonal_(pho) (((XiePhoto)(pho))[RES_MAPPING]==XieK_Bitonal) +#define IsGrayScale_(pho) (((XiePhoto)(pho))[RES_MAPPING]==XieK_GrayScale) +#define IsRGB_(pho) (((XiePhoto)(pho))[RES_MAPPING]==XieK_RGB) + + /* + ** Return the component count of an XiePhotomap. + */ +#define PhotoCount_(pho) (IsRGB_(pho) ? 3 : 1) + /* + ** Return the number of planes (UdpPtr's) an XieImage "should" contain. + */ +#define PlaneCount_(img) \ + ( CmpOrg_(img) == XieK_BandByPixel ? 1 \ + : CmpOrg_(img) == XieK_BandByPlane ? CmpCnt_(img) \ + : CmpLen_(img,0)+CmpLen_(img,1)+CmpLen_(img,2) ) + /* + ** Return "val" rounded up (if necessary) to a multiple of "mod". + */ +#define Modulo_(val,mod) \ + ((mod) < 2 ? (val) : (((mod) - (val) % (mod)) % (mod) + (val))) + +/* +** Structures +*/ + /* + ** XIE Client Event Structure + */ +typedef struct { + int type; /* see XQueryExtention "first_event"*/ + unsigned long serial; /* X11 serial number */ + Bool send_event; /* Boolean: true if client generated*/ + Display *display; /* X11 display pointer */ + XieResource resource; /* Xie resource-id (source of event)*/ +} XieEventRec, *XieEvent; + /* + ** Image domain context template data for XieCreateTmp / XieQueryTmp. + */ +typedef struct { + long x; /* X coordinate of template entry */ + long y; /* Y coordinate of template entry */ + double value; /* value of template entry */ +} XieTemplateRec, *XieTemplate; + /* + ** Statistics data + */ +typedef struct { + double value; + double minimum; + double maximum; + double mean; + double stddev; + double variance; +} XieStatsRec, *XieStats; + + /* + ** XIE Image structure (client side image descriptor). + */ +typedef struct { + unsigned char Compression; /* compression scheme */ + unsigned char CmpOrg; /* component organization */ + unsigned char CmpMap; /* component mapping */ + unsigned char CmpCnt; /* component count */ + unsigned long CmpLvl[XieK_MaxComponents]; /* levels per component */ + unsigned char CmpLen[XieK_MaxComponents]; /* bits per component */ + unsigned char PxlPol; /* pixel brightness polarity*/ + unsigned char PxlProg; /* pixel progression */ + unsigned char ScnProg; /* scanline progression */ + unsigned char OwnData; /* image array ownership */ + unsigned char Stream; /* Stream transport status */ + XieStream Xport; /* Stream transport context */ + double PxlRatio; /* pixel aspect ratio */ + UdpPtr Plane[XieK_MaxPlanes]; /* data plane pointers */ +} XieImageRec, *XieImage; + /* + ** Access macros for XIE Image structure. + */ +#define Cmpres_(img) ((img)->Compression) +#define CmpOrg_(img) ((img)->CmpOrg) +#define CmpMap_(img) ((img)->CmpMap) +#define CmpCnt_(img) ((img)->CmpCnt) +#define CmpLvl_(img,ind) ((img)->CmpLvl[(ind)]) +#define CmpLen_(img,ind) ((img)->CmpLen[(ind)]) +#define PxlPol_(img) ((img)->PxlPol) +#define PxlProg_(img) ((img)->PxlProg) +#define ScnProg_(img) ((img)->ScnProg) +#define OwnData_(img) ((img)->OwnData) +#define Stream_(img) ((img)->Stream) +#define StreamFinal_(img) (Stream_(img) == XieK_StreamFinal) +#define StreamError_(img) (Stream_(img) == XieK_StreamError) +#define StreamPending_(img) (!(StreamFinal_(img) || StreamError_(img))) +#define PxlRatio_(img) ((img)->PxlRatio) +#define Width_(img) ((img)->Plane[0]->UdpL_PxlPerScn) +#define Height_(img) ((img)->Plane[0]->UdpL_ScnCnt) +#define Plane_(img,ind) ((img)->Plane[(ind)]) +#define uPxlLen_(img,ind) ((img)->Plane[(ind)]->UdpW_PixelLength) +#define uDType_(img,ind) ((img)->Plane[(ind)]->UdpB_DType) +#define uClass_(img,ind) ((img)->Plane[(ind)]->UdpB_Class) +#define uBase_(img,ind) ((img)->Plane[(ind)]->UdpA_Base) +#define uArSize_(img,ind) ((img)->Plane[(ind)]->UdpL_ArSize) +#define uPxlStr_(img,ind) ((img)->Plane[(ind)]->UdpL_PxlStride) +#define uScnStr_(img,ind) ((img)->Plane[(ind)]->UdpL_ScnStride) +#define uX1_(img,ind) ((img)->Plane[(ind)]->UdpL_X1) +#define uX2_(img,ind) ((img)->Plane[(ind)]->UdpL_X2) +#define uY1_(img,ind) ((img)->Plane[(ind)]->UdpL_Y1) +#define uY2_(img,ind) ((img)->Plane[(ind)]->UdpL_Y2) +#define uWidth_(img,ind) ((img)->Plane[(ind)]->UdpL_PxlPerScn) +#define uHeight_(img,ind) ((img)->Plane[(ind)]->UdpL_ScnCnt) +#define uPos_(img,ind) ((img)->Plane[(ind)]->UdpL_Pos) +#define uCmpIdx_(img,ind) ((img)->Plane[(ind)]->UdpL_CompIdx) +#define uLvl_(img,ind) ((img)->Plane[(ind)]->UdpL_Levels) + +/* +** XieLib entry points. +*/ +#ifndef _XieLibEvents +extern unsigned long XieQueryEvents(); +extern void XieSelectEvents(); +#endif +#ifndef _XieLibImage +extern XieImage XieCopyImage(); +extern XieImage XieCreateImage(); +extern XieImage XieFreeImage(); +extern XieImage XieGetImage(); +extern unsigned char XieGetImageData(); +extern XiePhoto XiePutImage(); +extern unsigned char XiePutImageData(); +#endif +#ifndef _XieLibProcess +extern XiePhoto XieArea(); +extern XiePhoto XieAreaStats(); +extern XiePhoto XieArithmetic(); +extern XiePhoto XieChromeCom(); +extern XiePhoto XieChromeSep(); +extern XiePhoto XieCompare(); +extern XiePhoto XieConstrain(); +extern XiePhoto XieCrop(); +extern XiePhoto XieDither(); +extern XiePhoto XieFill(); +extern unsigned long *XieHistogram(); +extern XiePhoto XieLogical(); +extern XiePhoto XieLuminance(); +extern XiePhoto XieMatchHistogram(); +extern XiePhoto XieMath(); +extern XiePhoto XieMirror(); +extern XiePhoto XiePoint(); +extern void XiePointStats(); +extern XiePhoto XieRotate(); +extern XiePhoto XieScale(); +extern XiePhoto XieTranslate(); +#endif +#ifndef _XieLibResource +extern void XieAbortFlo(); +extern void XieBindMapToFlo(); +extern XiePhoto XieClonePhoto(); +extern XieCpp XieCreateCpp(); +extern XiePhoto XieCreatePhoto(); +extern XieRoi XieCreateRoi(); +extern XieTmp XieCreateTmp(); +extern void XieExecuteFlo(); +extern void XieExport(); +extern XieResource XieFindResource(); +extern void XieFreeExport(); +extern XieResource XieFreeResource(); +extern XiePhotomap XieImport(); +extern void XieQueryCpp(); +extern void XieQueryExport(); +extern unsigned long XieQueryFlo(); +extern XiePhoto XieQueryMap(); +extern void XieQueryRoi(); +extern XieTemplate XieQueryTmp(); +extern XiePhoto XieTapFlo(); +#endif +#ifndef _XieLibSession +extern char *XieCheckFunction(); +extern char **XieListFunctions(); +extern void XieQueryOpDefaults(); +extern void XieSetOpDefaults(); +#endif +#ifndef _XieLibTransport +extern void XieAbortStream(); +extern unsigned char XieGetStream(); +extern void XieGetTile(); +extern void XiePutStream(); +extern void XiePutTile(); +extern void XieSetStream(); +#endif +#ifndef _XieLibUtils +extern void *XieCalloc(); +extern unsigned char *XieCallocBits(); +extern void *XieCfree(); +extern void *XieFree(); +extern unsigned char *XieFreeBits(); +extern unsigned char XieIsBitonal(); +extern unsigned char XieIsCpp(); +extern unsigned char XieIsGrayScale(); +extern unsigned char XieIsIdc(); +extern unsigned char XieIsPhoto(); +extern unsigned char XieIsPhotoflo(); +extern unsigned char XieIsPhotomap(); +extern unsigned char XieIsPhototap(); +extern unsigned char XieIsRGB(); +extern unsigned char XieIsRoi(); +extern unsigned char XieIsTmp(); +extern void *XieMalloc(); +extern unsigned char *XieMallocBits(); +extern unsigned long XiePhotoCount(); +extern unsigned long XiePlaneCount(); +extern void *XieRealloc(); +extern unsigned char *XieReallocBits(); +extern unsigned long XieXId(); +#endif + +/* +** This "endif" MUST be the last line of this file. +*/ +#endif /* end of _XIELIB -- NO DEFINITIONS ALLOWED BEYOND THIS POINT */ diff --git a/xie/build/dec/XieProto.h b/xie/build/dec/XieProto.h new file mode 100644 index 0000000..2aeac5c --- /dev/null +++ b/xie/build/dec/XieProto.h @@ -0,0 +1,1228 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ + +/*********************************************************** +Copyright 1989-1991 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/************************************************************************ +** +** FACILITY: +** +** X Image Extension DIX +** +** ABSTRACT: +** +** This module contains definitions required by the XIE wire protocol +** -- XIE library and XIE server DDX layers. +** +** ENVIRONMENT: +** +** VAX/VMS V5.4 +** ULTRIX V4.0 +** +** AUTHOR(S): +** +** Richard J. Piccolo +** Robert NC Shelley +** +** CREATION DATE: +** +** March 1, 1989 +** +************************************************************************/ + + /* + ** Symbol XIEPROTO allows XieProto.h to be included multiple times. + */ +#ifndef XIEPROTO +#define XIEPROTO /* the "endif" MUST be the last line of this file */ + +/* +** Include files +*/ +#ifdef VMS +#include /* XIE inter-layer definitions */ +#include /* XIE device dependant definitions */ +#else +#include /* XIE inter-layer definitions */ +#include /* XIE device dependant definitions */ +#endif + +/* +** Wire protocol constant definitions. +*/ + /* + ** Version number + */ +#define XieK_MajorVersion 2 +#define XieK_MinorVersion 3 + +/******************************************************************************* +** Protocol request packet minor op-codes +*******************************************************************************/ +#define X_ieInitSession 1 +#define X_ieTermSession 2 + +#define X_ieQueryEvents 3 +#define X_ieSelectEvents 4 + +#define X_ieSetOpDefaults 5 +#define X_ieQueryOpDefaults 6 + +#define X_ieCreateByReference 7 +#define X_ieCreateByValue 8 +#define X_ieDeleteResource 9 +#define X_ieQueryResource 10 + +#define X_ieBindPhotomap 11 +#define X_ieAbortPhotoflo 12 +#define X_ieExecutePhotoflo 13 +#define X_ieTapPhotoflo 14 + +#define X_ieAbortTransport 15 +#define X_ieGetStream 16 +#define X_ieGetTile 17 +#define X_iePutStream 18 +#define X_iePutTile 19 +#define X_ieSetTransport 20 + +#define X_ieExport 21 +#define X_ieFreeExport 22 +#define X_ieImport 23 +#define X_ieQueryExport 24 + +#define X_ieArea 25 +#define X_ieAreaStats 26 +#define X_ieArith 27 +#define X_ieCalcHist 28 +#define X_ieChromeCom 29 +#define X_ieChromeSep 30 +#define X_ieCompare 31 +#define X_ieConstrain 32 +#define X_ieCrop 33 +#define X_ieDither 34 +#define X_ieFill 35 +#define X_ieLogical 36 +#define X_ieLuminance 37 +#define X_ieMatchHistogram 38 +#define X_ieMath 39 +#define X_ieMirror 40 +#define X_iePoint 41 +#define X_iePointStats 42 +#define X_ieRotate 43 +#define X_ieScale 44 +#define X_ieTranslate 45 + +#define X_ieLastRequest 46 + +/******************************************************************************* +** Protocol packet size definitions required by Xlibint.h +*******************************************************************************/ +#define sz_xieReq 4 +#define sz_xieInitSessionReq 8 +#define sz_xieTermSessionReq 4 + +#define sz_xieQueryEventsReq 8 +#define sz_xieSelectEventsReq 8 + +#define sz_xieSetOpDefaultsReq 20 +#define sz_xieQueryOpDefaultsReq 4 + +#define sz_xieCreateByReferenceReq 16 +#define sz_xieCreateByValueReq 12 +#define sz_xieCreateCppReq 24 +#define sz_xieCreatePhotoReq 48 +#define sz_xieCreateRoiReq 28 +#define sz_xieCreateTmpReq 24 +#define sz_xieDeleteResourceReq 12 +#define sz_xieQueryResourceReq 12 + +#define sz_xieBindPhotomapReq 12 +#define sz_xieAbortPhotofloReq 8 +#define sz_xieExecutePhotofloReq 8 +#define sz_xieTapPhotofloReq 16 + +#define sz_xieAbortTransportReq 12 +#define sz_xieGetStreamReq 16 +#define sz_xieGetTileReq 32 +#define sz_xiePutStreamReq 16 +#define sz_xiePutTileReq 32 +#define sz_xieSetTransportReq 140 + +#define sz_xieExportReq 64 +#define sz_xieFreeExportReq 8 +#define sz_xieImportReq 20 +#define sz_xieQueryExportReq 16 + +#define sz_xieAreaReq 24 +#define sz_xieAreaStatsReq 20 +#define sz_xieArithReq 36 +#define sz_xieCalcHistReq 16 +#define sz_xieChromeComReq 20 +#define sz_xieChromeSepReq 16 +#define sz_xieCompareReq 36 +#define sz_xieConstrainReq 28 +#define sz_xieCropReq 16 +#define sz_xieDitherReq 24 +#define sz_xieFillReq 28 +#define sz_xieLogicalReq 36 +#define sz_xieLuminanceReq 12 +#define sz_xieMatchHistogramReq 36 +#define sz_xieMathReq 20 +#define sz_xieMirrorReq 16 +#define sz_xiePointReq 20 +#define sz_xiePointStatsReq 20 +#define sz_xieRotateReq 40 +#define sz_xieScaleReq 20 +#define sz_xieTranslateReq 24 + +/******************************************************************************* +** Sub-structures +*******************************************************************************/ + + /* + ** Structure defining the Xie function vector. + */ +typedef struct { + CARD8 function[32]; +} XieFunctionsRec, *XieFunctionVector; + + /* + ** Structure defining IdcTmp template data crossing wire. + */ +typedef struct { + INT32 x; + INT32 y; + XieFloatRec value; +} XieTmpEntryRec, *XieTmpEntry; + +/******************************************************************************* +** Protocol request packets +*******************************************************************************/ + + /* + ** Generic part of all XIE requests + */ +typedef struct { + CARD8 reqType; /* major op-code assigned to extension */ + CARD8 opcode; /* minor op-code == XIE function */ + CARD16 length; /* length in longwords of entire request */ +} xieReq; + + /* + ** Init Session Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieInitSession */ + CARD16 length; + CARD16 major_version; + CARD16 minor_version; +} xieInitSessionReq; + + /* + ** Term Session Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieTermSession */ + CARD16 length; +} xieTermSessionReq; + + /* + ** Query Events Requests + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 event_param; +} xieQueryEventsReq; + + /* + ** Select Events Requests + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 event_mask; +} xieSelectEventsReq; + + /* + ** Set Operational Defaults + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieSetOpDefaults */ + CARD16 length; + CARD8 model; + CARD8 _pad[3]; + CARD32 levels[XieK_MaxComponents]; +} xieSetOpDefaultsReq; + + /* + ** Query Operational Defaults + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieQueryOpDefaults */ + CARD16 length; +} xieQueryOpDefaultsReq; + + /* + ** Create (ie. clone Photo{flo|map}) resource By Reference Request. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByReference*/ + CARD16 length; + CARD32 resource_type; + CARD32 resource_id; /* new Photo{flo|map}-id */ + CARD32 photomap_id; /* existing Photomap-id */ +} xieCreateByReferenceReq; + + /* + ** Generic Create resource By Value Request. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* new resource type */ + CARD32 resource_id; /* new resource identifier */ +} xieCreateByValueReq; + + /* + ** Create Cpp Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* resource type == XieK_IdcCpp */ + CARD32 resource_id; + CARD32 photomap_id; + INT32 x; + INT32 y; +} xieCreateCppReq; + + /* + ** Create Photo{flo|map} from client specified attributes. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* XieK_Photomap or XieK_Photoflo */ + CARD32 resource_id; + CARD32 width; + CARD32 height; + XieFloatRec aspect_ratio; + CARD32 levels[XieK_MaxComponents]; + CARD8 number_of_components; + CARD8 component_mapping; + CARD8 pixel_progression; + CARD8 line_progression; + CARD8 polarity; + CARD8 _pad[3]; +} xieCreatePhotoReq; + + /* + ** Create Roi Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* resource type == XieK_IdcRoi */ + CARD32 resource_id; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; +} xieCreateRoiReq; + + /* + ** Create Tmp Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCreateByValue */ + CARD16 length; + CARD32 resource_type; /* resource type == XieK_IdcTmp */ + CARD32 resource_id; + INT32 center_x; + INT32 center_y; + CARD32 data_count; /* number of XieTmpEntryRec's */ +/* XieTmpEntryRec data[data_count] /* list of XieTmpEntryRec */ +} xieCreateTmpReq; + + /* + ** Delete resource request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieDeleteResource */ + CARD16 length; + CARD32 resource_type; + CARD32 resource_id; +} xieDeleteResourceReq; + + /* + ** Query resource request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieQueryResource */ + CARD16 length; + CARD32 resource_type; + CARD32 resource_id; +} xieQueryResourceReq; + + /* + ** Bind an existing Photomap to an existing Photoflo. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieBindPhotomap */ + CARD16 length; + CARD32 photoflo_id; + CARD32 photomap_id; +} xieBindPhotomapReq; + + /* + ** Abort Photoflo request. + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieAbortPhotoflo */ + CARD16 length; + CARD32 photoflo_id; +} xieAbortPhotofloReq; + + /* + ** Execute Photoflo Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieExecutePhotoflo */ + CARD16 length; + CARD32 photoflo_id; +} xieExecutePhotofloReq; + + /* + ** Tap Photoflo Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieTapPhotoflo */ + CARD16 length; + CARD32 photoflo_id; + CARD32 photo_id; + BOOL permanent; + CARD8 _pad[3]; +} xieTapPhotofloReq; + + /* + ** Abort transport Request (release transport resources) + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieAbortTransport */ + CARD16 length; + CARD32 photo_id; + CARD32 plane_mask; +} xieAbortTransportReq; + + /* + ** Get Stream Request (transport image data: server --> client) + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieGetStream */ + CARD16 length; + CARD32 photo_id; + CARD32 max_bytes; /* maximum return image data length */ + CARD8 plane_num; + CARD8 _pad[3]; +} xieGetStreamReq; + + /* + ** Get Tile Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieGetTile */ + CARD16 length; + CARD32 photomap_id; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; + CARD32 plane_mask; + BOOL final; + CARD8 _pad[3]; +} xieGetTileReq; + + /* + ** Put Stream Request (transport image data: client --> server) + */ +typedef struct _xiePutStreamReq { + CARD8 reqType; + CARD8 opcode; /* function == X_iePutStream */ + CARD16 length; + CARD32 photo_id; + CARD32 byte_count; /* image plane data length in bytes */ + BOOL final; + CARD8 plane_num; + CARD8 _pad[2]; +} xiePutStreamReq; + + /* + ** Put Tile Request (transport image data: client --> server) + */ +typedef struct _xiePutTileReq { + CARD8 reqType; + CARD8 opcode; /* function == X_iePutTile */ + CARD16 length; + CARD32 photomap_id; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; + CARD32 plane_mask; + BOOL final; + CARD8 _pad[3]; +} xiePutTileReq; + + /* + ** Set transport Request (set transport parameters) + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieSetTransport */ + CARD16 length; + CARD32 photo_id; + CARD32 compression_parameter; + CARD8 compression_scheme; + CARD8 mode; + CARD8 component_organization; + CARD8 _pad; + CARD32 plane_mask; + CARD8 pixel_stride[XieK_MaxPlanes]; + CARD32 scanline_stride[XieK_MaxPlanes]; +} xieSetTransportReq; + + /* + ** Export image data to drawable Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieExport */ + CARD16 length; + CARD32 photo_id; + CARD32 drawable_id; + CARD32 gc_id; + INT32 src_x; + INT32 src_y; + CARD32 width; + CARD32 height; + INT32 dst_x; + INT32 dst_y; + CARD32 photo_lut_id; + CARD32 colormap_id; + XieFloatRec match_limit; + XieFloatRec gray_limit; +} xieExportReq; + + /* + ** Free ExportContext from Photomap Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieFreeExport */ + CARD16 length; + CARD32 photo_id; +} xieFreeExportReq; + + /* + ** Import image data from drawable Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieImport */ + CARD16 length; + CARD32 photomap_id; + CARD32 drawable_id; + CARD32 colormap_id; + CARD8 polarity; + CARD8 _pad[3]; +} xieImportReq; + + /* + ** Query ExportContext Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieQueryExport */ + CARD16 length; + CARD32 photo_id; + CARD32 lut_id; + BOOL get_pixels; + CARD8 _pad[3]; +} xieQueryExportReq; + + /* + ** Area Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 ipcc_id; + CARD32 ipct_id; + CARD8 op1; + CARD8 op2; + CARD8 constrain; + CARD8 _pad; +} xieAreaReq; + + /* + ** Area Statistics Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 edge_size; + CARD8 stat_type; + CARD8 _pad[2]; +} xieAreaStatsReq; + + /* + ** Arith Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieArithmetic */ + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 constants[XieK_MaxComponents]; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 constrain; + CARD16 _pad; +} xieArithReq; + + /* + ** Calculate Histogram Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id; + CARD32 idc_id; + CARD8 by_component; + CARD8 _pad[3]; +} xieCalcHistReq; + + /* + ** Chrominance Combine Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id1; + CARD32 photo_id2; + CARD32 photo_id3; + CARD32 dst_photo_id; +} xieChromeComReq; + + /* + ** Chrominance Separate Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo; + CARD32 dst_photo; + CARD32 component; +} xieChromeSepReq; + + /* + ** Compare Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 constants[XieK_MaxComponents]; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 combine; + CARD16 _pad; +} xieCompareReq; + + /* + ** Constrain Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieConstrain */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD8 model; + CARD8 _pad[3]; + CARD32 levels[XieK_MaxComponents]; + +} xieConstrainReq; + + /* + ** Crop Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieCrop */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; +} xieCropReq; + + /* + ** Dither Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieDither */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 levels[XieK_MaxComponents]; +} xieDitherReq; + + /* + ** Fill Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieFill */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 dst_idc_id; + CARD32 constant[XieK_MaxComponents]; +} xieFillReq; + + /* + ** Logical Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieLogical */ + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 constants[XieK_MaxComponents]; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 _pad[3]; + } xieLogicalReq; + + /* + ** Luminance Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieLuminance */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; +} xieLuminanceReq; + + /* + ** Math Function Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD8 op; + CARD8 constrain; + CARD16 _pad; +} xieMathReq; + + /* + ** Match Histogram Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id1; + CARD32 photo_id2; + CARD32 idc_id; + XieFloatRec param1; + XieFloatRec param2; + CARD8 h_shape; + CARD8 _pad[3]; +} xieMatchHistogramReq; + + /* + ** Mirror Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieMirror */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + BOOL x_mirror; + BOOL y_mirror; + CARD8 _pad[2]; +} xieMirrorReq; + + /* + ** Point Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 idc_id; + CARD32 trans_photo_id; +} xiePointReq; + + /* + ** Point Statistics Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 photo_id; + INT32 x; + INT32 y; + CARD8 height; + CARD8 width; + CARD8 _pad[2]; +} xiePointStatsReq; + + /* + ** Rotate Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieRotate */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + XieFloatRec angle; + CARD32 width; + CARD32 height; + CARD32 fill[XieK_MaxComponents]; +} xieRotateReq; + + /* + ** Scale Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieScale */ + CARD16 length; + CARD32 src_photo_id; + CARD32 dst_photo_id; + CARD32 width; + CARD32 height; +} xieScaleReq; + + /* + ** Translate Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; /* function == X_ieTranslate */ + CARD16 length; + CARD32 src1_photo_id; + CARD32 src2_photo_id; + CARD32 src_idc_id; + CARD32 dst_photo_id; + CARD32 dst_idc_id; +} xieTranslateReq; + +#ifdef NOT_YET_IMPLEMENTED +/************ NONE OF THE FOLLOWING REQUESTS HAVE BEEN IMPLEMENTED ************/ + /* + ** Display Sequence Request + */ +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length; + CARD32 window_id; + CARD16 frame_count; + CARD16 frame_timing; + CARD8 forward; + CARD8 number_of_pixmaps; +} xieDisplaySeqReq; + +/**************************** END OF UNIMPLEMENTED REQUESTS *******************/ +#endif + +/******************************************************************************* +** Events +*******************************************************************************/ + /* + ** Send Xie Event + */ +typedef struct { + CARD8 type; + CARD8 detail; + CARD16 sequenceNumber; + CARD32 resource_id; + CARD8 _pad[24]; +} xieSendEvent; + +/******************************************************************************* +** Replies +*******************************************************************************/ + /* + ** Reply for Init Session + */ +typedef struct { + INT8 type; + CARD8 success; + CARD16 sequenceNumber; + CARD32 length; + CARD16 major_version; + CARD16 minor_version; + CARD32 service_class; /* not implemented */ + CARD8 _pad[16]; +} xieInitSessionReply; + + /* + ** Reply for Query Events + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 event_mask; + CARD8 _pad[20]; +} xieQueryEventsReply; + + /* + ** Reply for Query Operational Defaults + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 model; + CARD8 _pad[3]; + CARD32 levels[XieK_MaxComponents]; + CARD8 _pad1[8]; +} xieQueryOpDefaultsReply; + + /* + ** Reply for Query Resource: resource type == Photoflo + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 status; + CARD8 _pad[20]; +} xieQueryPhotofloReply; + + /* + ** Reply for Query Resource: resource type == Photo{map|tap} + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 width; + CARD32 height; + XieFloatRec aspect_ratio; + CARD8 polarity; + CARD8 pixel_progression; + CARD8 line_progression; + BOOL constrained; + CARD8 component_mapping; + CARD8 component_count; + CARD8 _pad[2]; + CARD32 levels[XieK_MaxComponents]; + CARD32 photo_id; +} xieQueryPhotomapReply; + + /* + ** Reply for Query Resource: resource type == Idc of type XieK_Cpp + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + INT32 x; + INT32 y; + CARD32 photomap_id; + CARD8 _pad[12]; +} xieQueryCppReply; + + /* + ** Reply for Query Resource: resource type == Idc of type XieK_Roi + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + INT32 x; + INT32 y; + CARD32 width; + CARD32 height; + CARD8 _pad[8]; +} xieQueryRoiReply; + + /* + ** Reply for Query Resource: resource type == Idc of type XieK_Tmp + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* length of entries: long words */ + INT32 center_x; + INT32 center_y; + CARD32 data_count; /* number of XieTmpEntryRec's to */ + CARD8 _pad[12]; /* follow xieQueryTmpReply as data */ +} xieQueryTmpReply; + + /* + ** Reply for Get Stream + */ +typedef struct { + INT8 type; + CARD8 status; + CARD16 sequenceNumber; + CARD32 length; /* length of image data: longwords */ + CARD32 byte_count; /* image plane data length in bytes */ + CARD8 _pad[20]; +} xieGetStreamReply; + + /* + ** Reply for Get Tile + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* length of image data: longwords */ + CARD8 _pad[24]; +} xieGetTileReply; + + /* + ** Reply for QueryExport -- returns LUT and list of allocated pixels + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* number of pixels being returned */ + CARD32 pixel_count; + CARD32 lut_id; + CARD8 lut_mapping; + CARD8 _pad[15]; +} xieQueryExportReply; + + /* + ** Reply for CalcHistogram -- returns frequency distribution data + */ +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; /* size of histogram list in longs */ + CARD8 _pad[24]; +} xieCalcHistReply; + + /* + ** Reply for Point Statistics + */ +typedef struct { + INT8 type; + INT8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 _pad[24]; +} xiePointStatsReply; + +/* the following structure is used for Point Statistics */ + +typedef struct { + XieFloatRec pixel; + XieFloatRec minimum; + XieFloatRec maximum; + XieFloatRec mean; + XieFloatRec std_dev; + XieFloatRec variance; +} xiePointStatsData, *xiePointStatsDataPtr; + + +#ifdef NOT_YET_IMPLEMENTED +/************ NONE OF THE FOLLOWING REPLIES HAVE BEEN IMPLEMENTED *************/ + +typedef struct { + CARD16 screen_width_millimeters; + CARD16 screen_height_millimeters; + CARD16 screen_width_pixels; + CARD16 screen_height_pixels; + CARD16 screen_depth; + CARD16 screen_luts_size; + CARD8 screen_number; + CARD8 screen_luts; + CARD8 screen_brightness_control; + CARD8 screen_contrast_control; + CARD8 screen_hue_control; + CARD8 _pad[5]; +} screen_data; + +typedef struct { + CARD32 minimum; + CARD32 maximum; + CARD32 mean; + CARD32 std_dev; + CARD32 variance; +} statistics_data; + +/* Reply for Dot Product */ + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 _pad[6]; +} xieDotProductReply; + +/*** following display stuff may be deleted or expanded */ + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 idc_type; + CARD8 skip_or_show; + CARD32 pixmap; + CARD16 _pad; +} xieSingleStaticReply; + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD8 idc_type; + CARD8 map_x_tiles; + CARD8 map_y_tiles; + CARD32 current_frame; + CARD32 number_of_display_frames; +} xieSpatialMapReply; + +typedef struct { + CARD32 pixmap; + CARD8 skip_or_show; + CARD8 _pad[3]; +} display_frame; + +typedef struct { + INT8 type; + CARD8 _reserved; + CARD16 sequenceNumber; + CARD32 length; + CARD32 current_frame; + CARD32 number_of_display_frames; + CARD8 idc_type; + CARD8 map_x_tiles; + CARD8 map_y_tiles; + CARD8 _pad[14]; +} xieTimeSequenceReply; + +/**************************** END OF UNIMPLEMENTED REPLIES ********************/ +#endif +/* +** This "endif" MUST be the last line of this file. +*/ +#endif /* end of XIEPROTO -- NO DEFINITIONS ALLOWED BEYOND THIS POINT */ + diff --git a/xie/build/dec/XieUdpDef.h b/xie/build/dec/XieUdpDef.h new file mode 100644 index 0000000..44d88ff --- /dev/null +++ b/xie/build/dec/XieUdpDef.h @@ -0,0 +1,118 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/********************************************************************************************************************************/ +/* Created 23-MAY-1992 03:11:09 by VAX SDL V3.2-12 Source: 12-JUL-1990 18:14:51 VNRESD$:[XIESMI.SRC]XIEUDPDEF.SDL;1 */ +/********************************************************************************************************************************/ +/******************************************************************************* */ +/** Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts, */ +/** and the Massachusetts Institute of Technology, Cambridge, Massachusetts. */ +/** */ +/** All Rights Reserved */ +/** */ +/** Permission to use, copy, modify, and distribute this software and its */ +/** documentation for any purpose and without fee is hereby granted, */ +/** provided that the above copyright notice appear in all copies and that */ +/** both that copyright notice and this permission notice appear in */ +/** supporting documentation, and that the names of Digital or MIT not be */ +/** used in advertising or publicity pertaining to distribution of the */ +/** software without specific, written prior permission. */ +/** */ +/** DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ +/** ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL */ +/** DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR */ +/** ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, */ +/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ +/** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS */ +/** SOFTWARE. */ +/** */ +/******************************************************************************* */ +/******************************************************************************* */ +/** */ +/** FACILITY: */ +/** */ +/** Sample Machine Independant DDX */ +/** X Image Extensions */ +/** */ +/** ABSTRACT: */ +/** */ +/** This include file defines low level image data representation */ +/** structures. */ +/** */ +/** ENVIRONMENT: */ +/** */ +/** VAX/VMS V5.3 */ +/** ULTRIX V3.1 */ +/** */ +/** AUTHOR(S): */ +/** */ +/** John Weber */ +/** */ +/** CREATION DATE: */ +/** */ +/** August 12, 1989 */ +/** */ +/** MODIFICATION HISTORY: */ +/** */ +/******************************************************************************* */ + +/*** MODULE XieUdpDef ***/ +#ifndef UDPDEF +#define UDPDEF +struct UDP { + unsigned short int UdpW_PixelLength; + unsigned char UdpB_DType; + unsigned char UdpB_Class; + unsigned char *UdpA_Base; + unsigned long int UdpL_ArSize; + unsigned long int UdpL_PxlStride; + unsigned long int UdpL_ScnStride; + long int UdpL_X1; + long int UdpL_X2; + long int UdpL_Y1; + long int UdpL_Y2; + unsigned long int UdpL_PxlPerScn; + unsigned long int UdpL_ScnCnt; + long int UdpL_Pos; + unsigned long int UdpL_CompIdx; + unsigned long int UdpL_Levels; + } ; +typedef struct UDP UdpRec, *UdpPtr; +#define UdpK_DTypeUndefined 0 +#define UdpK_DTypeMin 1 +#define UdpK_DTypeBU 1 +#define UdpK_DTypeWU 2 +#define UdpK_DTypeLU 3 +#define UdpK_DTypeF 4 +#define UdpK_DTypeC 5 +#define UdpK_DTypeVU 6 +#define UdpK_DTypeV 7 +#define UdpK_DTypeCL 8 +#define UdpK_DTypeMax 8 +#define UdpK_ClassUBA 1 +#define UdpK_ClassUBS 2 +#define UdpK_ClassA 3 +#define UdpK_ClassCL 4 +#endif /* UDPDEF */ diff --git a/xie/build/dec/bits.h b/xie/build/dec/bits.h new file mode 100644 index 0000000..2bfb950 --- /dev/null +++ b/xie/build/dec/bits.h @@ -0,0 +1,114 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +/* + * This include file is designed to be a portable way for systems to define + * bit field manipulation of arrays of bits. + */ +#ifndef __BITS__ +#define __BITS__ "@(#)bits.h 1.6 - 90/09/18 " +/* RCSID = $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/bits.h,v 1.1.2.2 92/02/06 13:44:37 Jim_Ludwig Exp $" */ + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990 by Digital Equipment Corporation, Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + */ +typedef unsigned char *UByteP; /* Pointer to an unsigned byte array */ +#define BitsInByte 8L /* The number of bits in a byte */ + +#define BitInByte(bit) /* Returns the bit mask of a byte */ \ + (1L << (((bit) % BitsInByte))) + +#define BitInWord(bit) /* Returns the bit mask of a word */ \ + (1L << (((bit) % (BitsInByte * 2L)))) + +#define BitInLong(bit) /* Returns the bit mask of a long */ \ + (1L << (((bit) % (BitsInByte * 4L)))) + +#define ByteInArray(array,bit) /* Returns the byte offset to get to a bit */ \ + (((UByteP)(array))[(bit) / BitsInByte]) + +#define BitIsTrue(array,bit) /* Test to see if a specific bit is True */ \ + (ByteInArray(array,bit) & BitInByte(bit)) + +#define BitIsFalse(array,bit) /* Test to see if a specific bit is False */ \ + (!(BitIsTrue(array,bit))) + +#define BitTrue(array,bit) /* Set a specific bit to be True */ \ + (ByteInArray(array,bit) |= BitInByte(bit)) + +#define BitFalse(array,bit) /* Set a specific bit to be False */ \ + (ByteInArray(array,bit) &= ~BitInByte(bit)) + +#define BitToggle(array,bit) /* Toggle a specific bit */ \ + (ByteInArray(array,bit) ^= BitInByte(bit)) + +#define BitCopy(dest,src,bit) /* Copy a specific bit */ \ + BitIsTrue((src),(bit)) ? BitTrue((dest),(bit)) : BitFalse((dest),(bit)) + +#define BitValue(array,bit) /* Return True or False depending on bit */ \ + (BitIsTrue((array),(bit)) ? True : False) + +#define BitSet(array,bit,value) /* Set bit to given value in array */ \ + (value) ? BitTrue((array),(bit)) : BitFalse((array),(bit)) + +#endif /* __BITS__ */ diff --git a/xie/build/dec/decclient b/xie/build/dec/decclient new file mode 100755 index 0000000000000000000000000000000000000000..87b1249f19a9c284a30614c46ba5b176fc001bc4 GIT binary patch literal 130144 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®iJ?Qrq?sWU1A5}WV7(4Kz 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 +#define XextCheckExtension(dpy,i,name,val) \ + if (!XextHasExtension(i)) { XMissingExtension (dpy, name); return val; } +#define XextSimpleCheckExtension(dpy,i,name) \ + if (!XextHasExtension(i)) { XMissingExtension (dpy, name); return; } + + +/* + * helper macros to generate code that is common to all extensions; caller + * should prefix it with static if extension source is in one file; this + * could be a utility function, but have to stack 6 unused arguments for + * something that is called many, many times would be bad. + */ +#define XEXT_GENERATE_FIND_DISPLAY(proc,extinfo,extname,hooks,nev,data) \ +XExtDisplayInfo *proc (dpy) \ + register Display *dpy; \ +{ \ + XExtDisplayInfo *dpyinfo; \ + if (!extinfo) { if (!(extinfo = XextCreateExtension())) return NULL; } \ + if (!(dpyinfo = XextFindDisplay (extinfo, dpy))) \ + dpyinfo = XextAddDisplay (extinfo,dpy,extname,hooks,nev,data); \ + return dpyinfo; \ +} + +#define XEXT_GENERATE_CLOSE_DISPLAY(proc,extinfo) \ +int proc (dpy, codes) \ + Display *dpy; \ + XExtCodes *codes; \ +{ \ + return XextRemoveDisplay (extinfo, dpy); \ +} + +#define XEXT_GENERATE_ERROR_STRING(proc,extname,nerr,errl) \ +char *proc (dpy, code, codes, buf, n) \ + Display *dpy; \ + int code; \ + XExtCodes *codes; \ + char *buf; \ + int n; \ +{ \ + code -= codes->first_error; \ + if (code >= 0 && code < nerr) { \ + char tmp[256]; \ + sprintf (tmp, "%s.%d", extname, code); \ + XGetErrorDatabaseText (dpy, "XProtoError", tmp, errl[code], buf, n); \ + return buf; \ + } \ + return (char *)0; \ +} + +#endif diff --git a/xie/build/dec/libXie.a b/xie/build/dec/libXie.a new file mode 100644 index 0000000000000000000000000000000000000000..2b4304b70e3c69441f659e71bde3de411c913264 GIT binary patch literal 140164 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 literal 0 HcmV?d00001 diff --git a/xie/build/dec/mitmiscstr.h b/xie/build/dec/mitmiscstr.h new file mode 100644 index 0000000..4576b0b --- /dev/null +++ b/xie/build/dec/mitmiscstr.h @@ -0,0 +1,81 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/************************************************************ +Copyright 1989 by The Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +no- tice appear in all copies and that both that copyright +no- tice and this permission notice appear in supporting +docu- mentation, and that the name of MIT not be used in +advertising or publicity pertaining to distribution of the +software without specific prior written permission. +M.I.T. makes no representation about the suitability of +this software for any purpose. It is provided "as is" +without any express or implied warranty. + +********************************************************/ + +/* RANDOM CRUFT! THIS HAS NO OFFICIAL X CONSORTIUM BLESSING */ + +/* $XConsortium: mitmiscstr.h,v 1.3 90/05/15 18:50:18 keith Exp $ */ + +#include "MITMisc.h" + +#define MITMISCNAME "MIT-SUNDRY-NONSTANDARD" + +typedef struct _SetBugMode { + CARD8 reqType; /* always MITReqCode */ + CARD8 mitReqType; /* always X_MITSetBugMode */ + CARD16 length B16; + BOOL onOff; + BYTE pad0; + CARD16 pad1; +} xMITSetBugModeReq; +#define sz_xMITSetBugModeReq 8 + +typedef struct _GetBugMode { + CARD8 reqType; /* always MITReqCode */ + CARD8 mitReqType; /* always X_MITGetBugMode */ + CARD16 length B16; +} xMITGetBugModeReq; +#define sz_xMITGetBugModeReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL onOff; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xMITGetBugModeReply; +#define sz_xMITGetBugModeReply 32 + diff --git a/xie/build/dec/multibuf.h b/xie/build/dec/multibuf.h new file mode 100644 index 0000000..7a72bfd --- /dev/null +++ b/xie/build/dec/multibuf.h @@ -0,0 +1,305 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* + * $XConsortium: multibuf.h,v 1.15 91/07/12 10:20:42 rws Exp $ + * + * Copyright 1989 Massachusetts Institute of Technology + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _MULTIBUF_H_ +#define _MULTIBUF_H_ + +#include + +#define MULTIBUFFER_PROTOCOL_NAME "Multi-Buffering" + +#define MULTIBUFFER_MAJOR_VERSION 1 /* current version numbers */ +#define MULTIBUFFER_MINOR_VERSION 0 + +#define X_MbufGetBufferVersion 0 +#define X_MbufCreateImageBuffers 1 +#define X_MbufDestroyImageBuffers 2 +#define X_MbufDisplayImageBuffers 3 +#define X_MbufSetMBufferAttributes 4 +#define X_MbufGetMBufferAttributes 5 +#define X_MbufSetBufferAttributes 6 +#define X_MbufGetBufferAttributes 7 +#define X_MbufGetBufferInfo 8 +#define X_MbufCreateStereoWindow 9 + +/* + * update_action field + */ +#define MultibufferUpdateActionUndefined 0 +#define MultibufferUpdateActionBackground 1 +#define MultibufferUpdateActionUntouched 2 +#define MultibufferUpdateActionCopied 3 + +/* + * update_hint field + */ +#define MultibufferUpdateHintFrequent 0 +#define MultibufferUpdateHintIntermittent 1 +#define MultibufferUpdateHintStatic 2 + +/* + * valuemask fields + */ +#define MultibufferWindowUpdateHint (1L << 0) +#define MultibufferBufferEventMask (1L << 0) + +/* + * mono vs. stereo and left vs. right + */ +#define MultibufferModeMono 0 +#define MultibufferModeStereo 1 +#define MultibufferSideMono 0 +#define MultibufferSideLeft 1 +#define MultibufferSideRight 2 + +/* + * clobber state + */ +#define MultibufferUnclobbered 0 +#define MultibufferPartiallyClobbered 1 +#define MultibufferFullyClobbered 2 + +/* + * event stuff + */ +#define MultibufferClobberNotifyMask 0x02000000 +#define MultibufferUpdateNotifyMask 0x04000000 + +#define MultibufferClobberNotify 0 +#define MultibufferUpdateNotify 1 +#define MultibufferNumberEvents (MultibufferUpdateNotify + 1) + +#define MultibufferBadBuffer 0 +#define MultibufferNumberErrors (MultibufferBadBuffer + 1) + + +#ifndef _MULTIBUF_SERVER_ +/* + * Extra definitions that will only be needed in the client + */ +typedef XID Multibuffer; + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + int send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Multibuffer buffer; /* buffer of event */ + int state; /* see Clobbered constants above */ +} XmbufClobberNotifyEvent; + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + int send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Multibuffer buffer; /* buffer of event */ +} XmbufUpdateNotifyEvent; + + +/* + * per-window attributes that can be got + */ +typedef struct { + int displayed_index; /* which buffer is being displayed */ + int update_action; /* Undefined, Background, Untouched, Copied */ + int update_hint; /* Frequent, Intermittent, Static */ + int window_mode; /* Mono, Stereo */ + int nbuffers; /* Number of buffers */ + Multibuffer *buffers; /* Buffers */ +} XmbufWindowAttributes; + +/* + * per-window attributes that can be set + */ +typedef struct { + int update_hint; /* Frequent, Intermittent, Static */ +} XmbufSetWindowAttributes; + + +/* + * per-buffer attributes that can be got + */ +typedef struct { + Window window; /* which window this belongs to */ + unsigned long event_mask; /* events that have been selected */ + int buffer_index; /* which buffer is this */ + int side; /* Mono, Left, Right */ +} XmbufBufferAttributes; + +/* + * per-buffer attributes that can be set + */ +typedef struct { + unsigned long event_mask; /* events that have been selected */ +} XmbufSetBufferAttributes; + + +/* + * per-screen buffer info (there will be lists of them) + */ +typedef struct { + VisualID visualid; /* visual usuable at this depth */ + int max_buffers; /* most buffers for this visual */ + int depth; /* depth of buffers to be created */ +} XmbufBufferInfo; + +_XFUNCPROTOBEGIN + +extern Bool XmbufQueryExtension( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* event_base_return */, + int* /* error_base_return */ +#endif +); + +extern Status XmbufGetVersion( +#if NeedFunctionPrototypes + Display* /* dpy */, + int* /* major_version_return */, + int* /* minor_version_return */ +#endif +); + +extern int XmbufCreateBuffers( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* w */, + int /* count */, + int /* update_action */, + int /* update_hint */, + Multibuffer* /* buffers */ +#endif +); + +extern void XmbufDestroyBuffers( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* window */ +#endif +); + +extern void XmbufDisplayBuffers( +#if NeedFunctionPrototypes + Display* /* dpy */, + int /* count */, + Multibuffer* /* buffers */, + int /* min_delay */, + int /* max_delay */ +#endif +); + +extern Status XmbufGetWindowAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* w */, + XmbufWindowAttributes* /* attr */ +#endif +); + +extern void XmbufChangeWindowAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* w */, + unsigned long /* valuemask */, + XmbufSetWindowAttributes* /* attr */ +#endif +); + +extern Status XmbufGetBufferAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Multibuffer /* b */, + XmbufBufferAttributes* /* attr */ +#endif +); + +extern void XmbufChangeBufferAttributes( +#if NeedFunctionPrototypes + Display* /* dpy */, + Multibuffer /* b */, + unsigned long /* valuemask */, + XmbufSetBufferAttributes* /* attr */ +#endif +); + +extern Status XmbufGetScreenInfo( +#if NeedFunctionPrototypes + Display* /* dpy */, + Drawable /* d */, + int* /* nmono_return */, + XmbufBufferInfo** /* mono_info_return */, + int* /* nstereo_return */, + XmbufBufferInfo** /* stereo_info_return */ +#endif +); + +extern Window XmbufCreateStereoWindow( +#if NeedFunctionPrototypes + Display* /* dpy */, + Window /* parent */, + int /* x */, + int /* y */, + unsigned int /* width */, + unsigned int /* height */, + unsigned int /* border_width */, + int /* depth */, + unsigned int /* class */, + Visual* /* visual */, + unsigned long /* valuemask */, + XSetWindowAttributes* /* attr */, + Multibuffer* /* leftp */, + Multibuffer* /* rightp */ +#endif +); + +_XFUNCPROTOEND + +#endif /* _MULTIBUF_SERVER_ */ +#endif /* _MULTIBUF_H_ */ diff --git a/xie/build/dec/multibufst.h b/xie/build/dec/multibufst.h new file mode 100644 index 0000000..9af9e29 --- /dev/null +++ b/xie/build/dec/multibufst.h @@ -0,0 +1,301 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* + * $XConsortium: multibufst.h,v 1.7 91/01/05 16:32:49 rws Exp $ + * + * Copyright 1989 Massachusetts Institute of Technology + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _MULTIBUFST_H_ +#define _MULTIBUFST_H_ + +/* + * Protocol requests constants and alignment values + * These would really be in Multi-Buffering's X.h and Xproto.h equivalents + */ + +#include "multibuf.h" + +#include /* for Window & VisualId defines */ +/* Added to match X11/Xproto.h */ +#define Window CARD32 +#define Drawable CARD32 +#define VisualID CARD32 + +#if defined(__STDC__) && !defined(UNIXCPP) +#define MbufGetReq(name,req,info) GetReq (name, req); \ + req->reqType = info->codes->major_opcode; \ + req->mbufReqType = X_##name; +#else +#define MbufGetReq(name,req,info) GetReq (name, req); \ + req->reqType = info->codes->major_opcode; \ + req->mbufReqType = X_/**/name; +#endif + +#define Multibuffer CARD32 + +typedef struct { + CARD32 visualID B32; /* associated visual */ + CARD16 maxBuffers B16; /* maximum supported buffers */ + CARD8 depth; /* depth of visual (redundant) */ + CARD8 unused; +} xMbufBufferInfo; +#define sz_xMbufBufferInfo 8 + +typedef struct { + BYTE type; + BYTE unused; + CARD16 sequenceNumber B16; + CARD32 buffer B32; /* affected buffer */ + BYTE state; /* current status */ + CARD8 unused1; + CARD16 unused2 B16; + CARD32 unused3 B32; + CARD32 unused4 B32; + CARD32 unused5 B32; + CARD32 unused6 B32; + CARD32 unused7 B32; +} xMbufClobberNotifyEvent; + +typedef struct { + BYTE type; + BYTE unused; + CARD16 sequenceNumber B16; + CARD32 buffer B32; /* affected buffer */ + CARD32 timeStamp B32; /* update time */ + CARD32 unused1 B32; + CARD32 unused2 B32; + CARD32 unused3 B32; + CARD32 unused4 B32; + CARD32 unused5 B32; + CARD32 unused6 B32; +} xMbufUpdateNotifyEvent; + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufGetBufferVersion */ + CARD16 length B16; +} xMbufGetBufferVersionReq; +#define sz_xMbufGetBufferVersionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD8 majorVersion; /* major version of Multi-Buffering protocol */ + CARD8 minorVersion; /* minor version of Multi-Buffering protocol */ + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xMbufGetBufferVersionReply; +#define sz_xMbufGetBufferVersionReply 32 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufCreateImageBuffers */ + CARD16 length B16; + CARD32 window B32; /* associated window */ + CARD8 updateAction; /* action at update */ + CARD8 updateHint; /* hint as to frequency of updates */ + CARD16 unused; +} xMbufCreateImageBuffersReq; /* followed by buffer ids */ +#define sz_xMbufCreateImageBuffersReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 numberBuffer B16; /* number successfully allocated */ + CARD16 unused1 B16; + CARD32 unused2 B32; + CARD32 unused3 B32; + CARD32 unused4 B32; + CARD32 unused5 B32; + CARD32 unused6 B32; +} xMbufCreateImageBuffersReply; +#define sz_xMbufCreateImageBuffersReply 32 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufDestroyImageBuffers */ + CARD16 length B16; + CARD32 window B32; /* associated window */ +} xMbufDestroyImageBuffersReq; +#define sz_xMbufDestroyImageBuffersReq 8 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufDisplayImageBuffers */ + CARD16 length B16; + CARD16 minDelay B16; /* minimum time between last update and now */ + CARD16 maxDelay B16; /* maximum time between last update and now */ +} xMbufDisplayImageBuffersReq; /* followed by list of buffers */ +#define sz_xMbufDisplayImageBuffersReq 8 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufSetMBufferAttributes */ + CARD16 length B16; + CARD32 window B32; /* associated window */ + CARD32 valueMask B32; /* modified entries */ +} xMbufSetMBufferAttributesReq; /* followed by values */ +#define sz_xMbufSetMBufferAttributesReq 12 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufGetMBufferAttributes */ + CARD16 length B16; + CARD32 window B32; /* associated window */ +} xMbufGetMBufferAttributesReq; +#define sz_xMbufGetMBufferAttributesReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 displayedBuffer B16; /* currently visible buffer */ + CARD8 updateAction; + CARD8 updateHint; + CARD8 windowMode; + CARD8 unused0; + CARD16 unused1 B16; + CARD32 unused2 B32; + CARD32 unused3 B32; + CARD32 unused4 B32; + CARD32 unused5 B32; +} xMbufGetMBufferAttributesReply; +#define sz_xMbufGetMBufferAttributesReply 32 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufSetBufferAttributes */ + CARD16 length B16; + CARD32 buffer B32; + CARD32 valueMask B32; +} xMbufSetBufferAttributesReq; /* followed by values */ +#define sz_xMbufSetBufferAttributesReq 12 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufGetBufferAttributes */ + CARD16 length B16; + CARD32 buffer B32; +} xMbufGetBufferAttributesReq; +#define sz_xMbufGetBufferAttributesReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 window B32; + CARD32 eventMask B32; + CARD16 bufferIndex B16; + CARD8 side; + CARD8 unused0; + CARD32 unused1 B32; + CARD32 unused2 B32; + CARD32 unused3 B32; +} xMbufGetBufferAttributesReply; +#define sz_xMbufGetBufferAttributesReply 32 + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufGetBufferInfo */ + CARD16 length B16; + Drawable drawable B32; +} xMbufGetBufferInfoReq; +#define sz_xMbufGetBufferInfoReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 normalInfo B16; + CARD16 stereoInfo B16; + CARD32 unused1 B32; + CARD32 unused2 B32; + CARD32 unused3 B32; + CARD32 unused4 B32; + CARD32 unused5 B32; +} xMbufGetBufferInfoReply; /* followed by buffer infos */ +#define sz_xMbufGetBufferInfoReply 32 + + +typedef struct { + CARD8 reqType; /* always codes->major_opcode */ + CARD8 mbufReqType; /* always X_MbufCreateStereoWindow */ + CARD16 length B16; + CARD8 unused0; + CARD8 unused1; + CARD8 unused2; + CARD8 depth; + Window wid B32; + Window parent B32; + Multibuffer left B32; /* associated buffers */ + Multibuffer right B32; + INT16 x B16; + INT16 y B16; + CARD16 width B16; + CARD16 height B16; + CARD16 borderWidth B16; + CARD16 class B16; + VisualID visual B32; + CARD32 mask B32; +} xMbufCreateStereoWindowReq; /* followed by value list */ +#define sz_xMbufCreateStereoWindowReq 44 + + +#undef Multibuffer +#undef Window CARD32 +#undef Drawable CARD32 +#undef VisualID CARD32 + +#endif /* _MULTIBUFST_H_ */ diff --git a/xie/build/dec/obj/XieConvert.o b/xie/build/dec/obj/XieConvert.o new file mode 100644 index 0000000000000000000000000000000000000000..5ddadb9a4257699108ebe3011449edadd231a89b GIT binary patch literal 56336 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 F{{pjYioyT@ literal 0 HcmV?d00001 diff --git a/xie/build/dec/obj/XieFloat.o b/xie/build/dec/obj/XieFloat.o new file mode 100644 index 0000000000000000000000000000000000000000..6f5a475925310179aa4ae5e73cad8c41d3d3a4ba GIT binary patch literal 2504 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 J@oo%f{VxC`qQn3I literal 0 HcmV?d00001 diff --git a/xie/build/dec/obj/XieLibResource.o b/xie/build/dec/obj/XieLibResource.o new file mode 100644 index 0000000000000000000000000000000000000000..2ae620322c0f5b47c241bc8911adf54d35578246 GIT binary patch literal 16744 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 Y)w`+ltWv9g?`?`AX9)G%*v-KI2VE|)EdT%j literal 0 HcmV?d00001 diff --git a/xie/build/dec/obj/XieLibSession.o b/xie/build/dec/obj/XieLibSession.o new file mode 100644 index 0000000000000000000000000000000000000000..233d4b8321298058af9b2afad6486aedd8929b5c GIT binary patch literal 11104 zcmeHNe{5UD9Y5QlHLNu57HEOex!YRO!K}0zU10*8x-Wf&v}E}KnWimuotN6wvCZ>y zl^~@QnT$THj39wju}NeTe`J4b>$EMDQrdL1P1w)~1-4F`P^M*4OQI?JC3)+l?EAg@ zo_)T?<&W*Z<)oLp``qXIz3+YRdw1`i^Q6(-i`Fvhw9FWaa_lf2-9qsZpY-+esYa@4i*l_ zuZOu99Cuc$^+JF|7A|1nL>=^T3dadHh{3r=v387){ONJ$W*|WoW^lY>iaCm^ibq;J zkU^hee<57s{+wet|5R+LnK0(ikF$3cjJXOYOv0>~1?HYXnL@{$8N1*%5Bu}RoF_jp z=RNce;1D>afvi#Mg%&@rx)Wj~z?;Hhz<}!nZW^h5*ZEpg%{YS=^r}!mSuRQ3I+@E#vx1{+z7zCsY^lC!pxh zN#RfEv+U2wBLQX39Hf`OgQ}GAfcwzR$G7+N&q2F(1x zQRdt|VVp#pW;Yg$ljhMv^Wg7!p|soz25uMbFHAR(H%>wbob(=ge;8C0yUjbrBstgd z7}XXYP%ak20VTGE$}1QA^B@vRv-&k0F|184)fq4g9lU5N%Wxxj*^Iqs4z2hAEjEX4 z;+b2s>Y81Zwgd>WAOsmKav_K-n5!?XFmOqcM1n&MPmd+s#S{*OcIhWyQ-U{2+V^!@uMRcd!q1mKWD8ASRHj z*B3RQW~A^{Hi(AOrX^6>+%plb@xl-}3YBF(2!h;UGV3)QhFnX0O2I+?g7I{|=y%pt zozu&A;+Z*SJO%q|9W2=+J^7+HcLS83g_6(Nho#zAC$R}ub2ClC(0$mQIdr$kjFHED zk9l{yXByo}_g&NdS1GW0d;To!6~>5pRYYC>0kofLfIp|viAt!sd}?59I74RPMf8g4 z;<^{ekSXWmL=YrRHP-a0Tt_Y{ZI4`yhzq_&N&&f7-&zu&eWYUIg+(2>0o3tbx?%%> zW!8XaA?)Q-*Ibyi+NDu2Th}}j`5x}&LoMy$^W`wZGZCs+#~7mEDq~*k;ZyQFoQM7U ze|VCCF4(bP9*pVP&p~BcREoSuaCK1$ z?oUewUjcBuGS=CZuy&;qPMej@CekThZ@27Twf>cyW%nBgt(24H?QK@lia8a4^KfQ| z)f3GniNZxREMi+x$J*ZCYV}yQm5NzhnM5CnCUXMW0qPyA)yk%GHj%ix3S@gC)!hrM zOHOTpTB)VYaw?S=eItfDQaz&a0Z~6s7($|r?QS6O^CUT*l9u80ZJ{Kt8Gdolf2NJ-k*p?shsOg zq@r?`c1N999J@~Mx5+aA#e2Be?u2cpg{qcxA|=e@rSc$J(=Z-kP#bh1O5A5j#I<<2 zH)va#WPi{SiW5M`AT|0ND<#5om(kVI768`hPGmF5Xn!yRLK!<9gXOYGXkPle z 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 bq&o2jYjZ78d>Cle?5C*Ua + +#define X_ShapeQueryVersion 0 +#define X_ShapeRectangles 1 +#define X_ShapeMask 2 +#define X_ShapeCombine 3 +#define X_ShapeOffset 4 +#define X_ShapeQueryExtents 5 +#define X_ShapeSelectInput 6 +#define X_ShapeInputSelected 7 +#define X_ShapeGetRectangles 8 + +#define ShapeSet 0 +#define ShapeUnion 1 +#define ShapeIntersect 2 +#define ShapeSubtract 3 +#define ShapeInvert 4 + +#define ShapeBounding 0 +#define ShapeClip 1 + +#define ShapeNotifyMask (1L << 0) +#define ShapeNotify 0 + +#define ShapeNumberEvents (ShapeNotify + 1) + +#ifndef _SHAPE_SERVER_ +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* window of event */ + int kind; /* ShapeBounding or ShapeClip */ + int x, y; /* extents of new region */ + unsigned width, height; + Time time; /* server timestamp when region changed */ + Bool shaped; /* true if the region exists */ +} XShapeEvent; + +_XFUNCPROTOBEGIN + +extern Bool XShapeQueryExtension ( +#if NeedFunctionPrototypes + Display* /* display */, + int* /* event_base */, + int* /* error_base */ +#endif +); + +extern Status XShapeQueryVersion ( +#if NeedFunctionPrototypes + Display* /* display */, + int* /* major_version */, + int* /* minor_version */ +#endif +); + +extern void XShapeCombineRegion ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* dest */, + int /* dest_kind */, + int /* x_off */, + int /* y_off */, + Region /* region */, + int /* op */ +#endif +); + +extern void XShapeCombineRectangles ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* dest */, + int /* dest_kind */, + int /* x_off */, + int /* y_off */, + XRectangle* /* rectangles */, + int /* n_rects */, + int /* op */, + int /* ordering */ +#endif +); + +extern void XShapeCombineMask ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* dest */, + int /* dest_kind */, + int /* x_off */, + int /* y_off */, + Pixmap /* src */, + int /* op */ +#endif +); + +extern void XShapeCombineShape ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* dest */, + int /* dest_kind */, + int /* x_off */, + int /* y_off */, + Window /* src */, + int /* src_kind */, + int /* op */ +#endif +); + +extern void XShapeOffsetShape ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* dest */, + int /* dest_kind */, + int /* x_off */, + int /* y_off */ +#endif +); + +extern Status XShapeQueryExtents ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* window */, + Bool* /* bounding_shaped */, + int* /* x_bounding */, + int* /* y_bounding */, + unsigned int* /* w_bounding */, + unsigned int* /* h_bounding */, + Bool* /* clip_shaped */, + int* /* x_clip */, + int* /* y_clip */, + unsigned int* /* w_clip */, + unsigned int* /* h_clip */ +#endif +); + +extern void XShapeSelectInput ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* window */, + unsigned long /* mask */ +#endif +); + +extern unsigned long XShapeInputSelected ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* window */ +#endif +); + +extern XRectangle *XShapeGetRectangles ( +#if NeedFunctionPrototypes + Display* /* display */, + Window /* window */, + int /* kind */, + int* /* count */, + int* /* ordering */ +#endif +); + +_XFUNCPROTOEND + +#endif /* _SHAPE_SERVER_ */ + +#endif /* _SHAPE_H_ */ diff --git a/xie/build/dec/shapestr.h b/xie/build/dec/shapestr.h new file mode 100644 index 0000000..9f3475b --- /dev/null +++ b/xie/build/dec/shapestr.h @@ -0,0 +1,255 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/************************************************************ +Copyright 1989 by The Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +no- tice appear in all copies and that both that copyright +no- tice and this permission notice appear in supporting +docu- mentation, and that the name of MIT not be used in +advertising or publicity pertaining to distribution of the +software without specific prior written permission. +M.I.T. makes no representation about the suitability of +this software for any purpose. It is provided "as is" +without any express or implied warranty. + +MIT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- +NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- +ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + +********************************************************/ + +/* $XConsortium: shapestr.h,v 1.9 90/06/07 10:08:36 rws Exp $ */ + +/* + * Protocol requests constants and alignment values + * These would really be in SHAPE's X.h and Xproto.h equivalents + */ + +#include "shape.h" +#include +/* for Window & Time defines */ +/* Added to match X11/Xproto.h */ +#define Window CARD32 +#define Time CARD32 + +#define SHAPENAME "SHAPE" + +#define SHAPE_MAJOR_VERSION 1 /* current version numbers */ +#define SHAPE_MINOR_VERSION 0 + +typedef struct _ShapeQueryVersion { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeQueryVersion */ + CARD16 length B16; +} xShapeQueryVersionReq; +#define sz_xShapeQueryVersionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 majorVersion B16; /* major version of SHAPE protocol */ + CARD16 minorVersion B16; /* minor version of SHAPE protocol */ + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xShapeQueryVersionReply; +#define sz_xShapeQueryVersionReply 32 + +typedef struct _ShapeRectangles { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeRectangles */ + CARD16 length B16; + CARD8 op; /* Set, ... */ + CARD8 destKind; /* ShapeBounding or ShapeClip */ + CARD8 ordering; /* UnSorted, YSorted, YXSorted, YXBanded */ + CARD8 pad0; /* not used */ + CARD32 dest B32; /* Window */ + INT16 xOff B16; + INT16 yOff B16; +} xShapeRectanglesReq; /* followed by xRects */ +#define sz_xShapeRectanglesReq 16 + +typedef struct _ShapeMask { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeMask */ + CARD16 length B16; + + CARD8 op; /* Set, ... */ + CARD8 destKind; /* ShapeBounding or ShapeClip */ + CARD16 junk B16; /* not used */ + + CARD32 dest B32; /* Window */ + INT16 xOff B16; + INT16 yOff B16; + CARD32 src B32; /* 1 bit pixmap */ +} xShapeMaskReq; +#define sz_xShapeMaskReq 20 + +typedef struct _ShapeCombine { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeCombine */ + CARD16 length B16; + CARD8 op; /* Set, ... */ + CARD8 destKind; /* ShapeBounding or ShapeClip */ + CARD8 srcKind; /* ShapeBounding or ShapeClip */ + CARD8 junk; /* not used */ + CARD32 dest B32; /* Window */ + INT16 xOff B16; + INT16 yOff B16; + CARD32 src B32; /* Window */ +} xShapeCombineReq; +#define sz_xShapeCombineReq 20 + +typedef struct _ShapeOffset { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeOffset */ + CARD16 length B16; + CARD8 destKind; /* ShapeBounding or ShapeClip */ + CARD8 junk1; /* not used */ + CARD16 junk2 B16; /* not used */ + CARD32 dest B32; /* Window */ + INT16 xOff B16; + INT16 yOff B16; +} xShapeOffsetReq; +#define sz_xShapeOffsetReq 16 + +typedef struct _ShapeQueryExtents { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeQueryExtents */ + CARD16 length B16; + CARD32 window B32; /* request destination id */ +} xShapeQueryExtentsReq; +#define sz_xShapeQueryExtentsReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 unused; /* not used */ + CARD16 sequenceNumber B16; + CARD32 length B32; /* 0 */ + CARD8 boundingShaped; /* window has bounding shape */ + CARD8 clipShaped; /* window has clip shape */ + CARD16 unused1 B16; + INT16 xBoundingShape B16; /* extents of bounding shape */ + INT16 yBoundingShape B16; + CARD16 widthBoundingShape B16; + CARD16 heightBoundingShape B16; + INT16 xClipShape B16; /* extents of clip shape */ + INT16 yClipShape B16; + CARD16 widthClipShape B16; + CARD16 heightClipShape B16; + CARD32 pad1 B32; +} xShapeQueryExtentsReply; +#define sz_xShapeQueryExtentsReply 32 + +typedef struct _ShapeSelectInput { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeSelectInput */ + CARD16 length B16; + CARD32 window B32; /* request destination id */ + BYTE enable; /* xTrue -> send events */ + BYTE pad1; + CARD16 pad2 B16; +} xShapeSelectInputReq; +#define sz_xShapeSelectInputReq 12 + +typedef struct _ShapeNotify { + BYTE type; /* always eventBase + ShapeNotify */ + BYTE kind; /* either ShapeBounding or ShapeClip */ + CARD16 sequenceNumber B16; + Window window B32; + INT16 x B16; + INT16 y B16; /* extents of new shape */ + CARD16 width B16; + CARD16 height B16; + Time time B32; /* time of change */ + BYTE shaped; /* set when a shape actual exists */ + BYTE pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; +} xShapeNotifyEvent; +#define sz_xShapeNotifyEvent 32 + +typedef struct _ShapeInputSelected { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeInputSelected */ + CARD16 length B16; + CARD32 window B32; /* request destination id */ +} xShapeInputSelectedReq; +#define sz_xShapeInputSelectedReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 enabled; /* current status */ + CARD16 sequenceNumber B16; + CARD32 length B32; /* 0 */ + CARD32 pad1 B32; /* unused */ + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xShapeInputSelectedReply; +#define sz_xShapeInputSelectedReply 32 + +typedef struct _ShapeGetRectangles { + CARD8 reqType; /* always ShapeReqCode */ + CARD8 shapeReqType; /* always X_ShapeGetRectangles */ + CARD16 length B16; + CARD32 window B32; /* request destination id */ + CARD8 kind; /* ShapeBounding or ShapeClip */ + CARD8 junk1; + CARD16 junk2 B16; +} xShapeGetRectanglesReq; +#define sz_xShapeGetRectanglesReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 ordering; /* UnSorted, YSorted, YXSorted, YXBanded */ + CARD16 sequenceNumber B16; + CARD32 length B32; /* not zero */ + CARD32 nrects B32; /* number of rectangles */ + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xShapeGetRectanglesReply; /* followed by xRectangles */ +#define sz_xShapeGetRectanglesReply 32 +#undef Window CARD32 +#undef Time CARD32 diff --git a/xie/build/dec/shmstr.h b/xie/build/dec/shmstr.h new file mode 100644 index 0000000..4c742ac --- /dev/null +++ b/xie/build/dec/shmstr.h @@ -0,0 +1,207 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/************************************************************ +Copyright 1989 by The Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +no- tice appear in all copies and that both that copyright +no- tice and this permission notice appear in supporting +docu- mentation, and that the name of MIT not be used in +advertising or publicity pertaining to distribution of the +software without specific prior written permission. +M.I.T. makes no representation about the suitability of +this software for any purpose. It is provided "as is" +without any express or implied warranty. + +********************************************************/ + +/* THIS IS NOT AN X CONSORTIUM STANDARD */ + +/* $XConsortium: shmstr.h,v 1.6 91/07/12 09:18:52 rws Exp $ */ + +#include "XShm.h" + +#include /* for Window & VisualId defines */ +/* Added to match X11/Xproto.h */ +#define Window CARD32 +#define Drawable CARD32 +#define VisualID CARD32 +#define GContext CARD32 +#define Pixmap CARD32 + +#define SHMNAME "MIT-SHM" + +#define SHM_MAJOR_VERSION 1 /* current version numbers */ +#define SHM_MINOR_VERSION 1 + +#ifdef _XSHM_SERVER_ +typedef struct _ShmFuncs { + PixmapPtr (* CreatePixmap)(); + void (* PutImage)(); +} ShmFuncs, *ShmFuncsPtr; +#endif + +typedef struct _ShmQueryVersion { + CARD8 reqType; /* always ShmReqCode */ + CARD8 shmReqType; /* always X_ShmQueryVersion */ + CARD16 length B16; +} xShmQueryVersionReq; +#define sz_xShmQueryVersionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL sharedPixmaps; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 majorVersion B16; /* major version of SHM protocol */ + CARD16 minorVersion B16; /* minor version of SHM protocol */ + CARD16 uid B16; + CARD16 gid B16; + CARD8 pixmapFormat; + CARD8 pad0; + CARD16 pad1 B16; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xShmQueryVersionReply; +#define sz_xShmQueryVersionReply 32 + +typedef struct _ShmAttach { + CARD8 reqType; /* always ShmReqCode */ + CARD8 shmReqType; /* always X_ShmAttach */ + CARD16 length B16; + ShmSeg shmseg; + CARD32 shmid; + BOOL readOnly; + BYTE pad0; + CARD16 pad1; +} xShmAttachReq; +#define sz_xShmAttachReq 16 + +typedef struct _ShmDetach { + CARD8 reqType; /* always ShmReqCode */ + CARD8 shmReqType; /* always X_ShmDetach */ + CARD16 length B16; + ShmSeg shmseg; +} xShmDetachReq; +#define sz_xShmDetachReq 8 + +typedef struct _ShmPutImage { + CARD8 reqType; /* always ShmReqCode */ + CARD8 shmReqType; /* always X_ShmPutImage */ + CARD16 length B16; + Drawable drawable B32; + GContext gc B32; + CARD16 totalWidth B16; + CARD16 totalHeight B16; + CARD16 srcX B16; + CARD16 srcY B16; + CARD16 srcWidth B16; + CARD16 srcHeight B16; + INT16 dstX B16; + INT16 dstY B16; + CARD8 depth; + CARD8 format; + CARD8 sendEvent; + CARD8 bpad; + ShmSeg shmseg B32; + CARD32 offset B32; +} xShmPutImageReq; +#define sz_xShmPutImageReq 40 + +typedef struct _ShmGetImage { + CARD8 reqType; /* always ShmReqCode */ + CARD8 shmReqType; /* always X_ShmGetImage */ + CARD16 length B16; + Drawable drawable B32; + INT16 x B16; + INT16 y B16; + CARD16 width B16; + CARD16 height B16; + CARD32 planeMask B32; + CARD8 format; + CARD8 pad0; + CARD8 pad1; + CARD8 pad2; + ShmSeg shmseg B32; + CARD32 offset B32; +} xShmGetImageReq; +#define sz_xShmGetImageReq 32 + +typedef struct _ShmGetImageReply { + BYTE type; /* X_Reply */ + CARD8 depth; + CARD16 sequenceNumber B16; + CARD32 length B32; + VisualID visual B32; + CARD32 size B32; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; +} xShmGetImageReply; +#define sz_xShmGetImageReply 32 + +typedef struct _ShmCreatePixmap { + CARD8 reqType; /* always ShmReqCode */ + CARD8 shmReqType; /* always X_ShmCreatePixmap */ + CARD16 length B16; + Pixmap pid B32; + Drawable drawable B32; + CARD16 width B16; + CARD16 height B16; + CARD8 depth; + CARD8 pad0; + CARD8 pad1; + CARD8 pad2; + ShmSeg shmseg B32; + CARD32 offset B32; +} xShmCreatePixmapReq; +#define sz_xShmCreatePixmapReq 28 + +typedef struct _ShmCompletion { + BYTE type; /* always eventBase + ShmCompletion */ + BYTE bpad0; + CARD16 sequenceNumber B16; + Drawable drawable B32; + CARD16 minorEvent B16; + BYTE majorEvent; + BYTE bpad1; + ShmSeg shmseg B32; + CARD32 offset B32; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; +} xShmCompletionEvent; +#define sz_xShmCompletionEvent 32 + +#undef Window CARD32 +#undef Drawable CARD32 +#undef VisualID CARD32 +#undef GContext CARD32 +#undef Pixmap CARD32 diff --git a/xie/build/dec/smt.h b/xie/build/dec/smt.h new file mode 100644 index 0000000..5beb6e2 --- /dev/null +++ b/xie/build/dec/smt.h @@ -0,0 +1,106 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/*********************************************************** +Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ +/* $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/smt.h,v 1.1.2.4 92/07/21 07:22:58 Jim_Ludwig Exp $ + * smt.h + * Shared Memory Transport definitions + */ + + +#ifndef _SMT_H_ +#define _SMT_H_ + +#if defined(SMT_DEBUG) +#define SMT_DIAG(s) s +#else +#define SMT_DIAG(s) +#endif /* SMT_DEBUG */ + +#define SMT_PROTOCOL_NAME "Shared-Memory Transport" + +/* + * Requests + */ +#define X_SmtQueryVersion 0 +#define X_SmtAttach 1 +#define X_SmtWakeupServer 2 + +/* + * event stuff + */ +#define XSmtWakeupNotifyMask 0x02000000 + +#define XSmtWakeupNotify 0 +#define XSmtNumberOfEvents (XSmtWakeupNotify + 1) + +#define XSmtBadSegment 0 +#define XSmtNumberOfErrors (XSmtBadSegment + 1) + +#define SMT_REQ (1 << 0) +#define SMT_REP (1 << 1) +#define SMT_NEED_WAKEUP (1 << 2) +#define SMT_NEWVER (1 << 3) + +#ifndef _SMT_SERVER_ +/* + * Extra definitions that will only be needed in the client + */ +typedef XID XSmt; + +extern Bool XSmtQueryVersion(); /* is extension on server? */ +extern Bool XSmtAttach(); /* attach shared memory transport */ +extern Bool XWakeupServer(); /* wakeup server */ + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + int send_event; /* true if this came frome a SendEvent request */ + struct _XDisplay *display; /* Display the event was read from */ +} XSmtWakeupEvent; + +#endif /* _SMT_SERVER_ */ +#endif /* _SMT_H_ */ diff --git a/xie/build/dec/smtstr.h b/xie/build/dec/smtstr.h new file mode 100644 index 0000000..5a46db7 --- /dev/null +++ b/xie/build/dec/smtstr.h @@ -0,0 +1,194 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/*********************************************************** +Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ +/* $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/smtstr.h,v 1.1.2.5 92/08/03 09:32:18 Dave_Hill Exp $ + * smtstr.h + * Shared Memory Transport definitions + */ + +#ifndef _SMTSTR_H_ +#define _SMTSTR_H_ + +#include +#include +#include + +/* + * Minor Version Description + * ------------- ----------- + * 0 Wakeup request increments serial number + * 1 not implemented + * 2 Wakeup request doesn't increment serial number + */ +#define SMT_MAJOR_VERSION 1 +#define SMT_MINOR_VERSION 2 + + +typedef struct _SmtProcInfo { + int whoami; + int status; + int pid; +} SmtProcInfo, *SmtProcInfoPtr; + +typedef struct _SmtPrivate { + SmtProcInfo server; + SmtProcInfo client; +} SmtPrivate, *SmtPrivatePtr; + +typedef struct _SmtQueryVersion { + CARD8 reqType; + CARD8 smtReqType; + CARD16 length B16; +} xSmtQueryVersionReq; +#define sz_xSmtQueryVersionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE bpad0; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 majorVersion B16; + CARD16 minorVersion B16; + CARD16 uid B16; + CARD16 gid B16; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; +} xSmtQueryVersionReply; +#define sz_xSmtQueryVersionReply 32; + +typedef struct _SmtAttach { + CARD8 reqType; + CARD8 smtReqType; + CARD16 length B16; + CARD16 flags; + CARD8 majorVersion; + CARD8 minorVersion; + Channel chan; +} xSmtAttachReq; +#define sz_xSmtAttachReq sizeof(xSmtAttachReq) + +typedef struct { + BYTE type; /* X_Reply */ + BYTE bpad0; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 status B32; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xSmtAttachReply; +#define sz_xSmtAttachReply 32; + +typedef struct _SmtWakeupServer { + CARD8 reqType; + CARD8 smtReqType; + CARD16 length B16; + CARD32 flags; +} xSmtWakeupServerReq; +#define sz_xSmtWakeupServerReq 8 + +typedef struct _SmtWakeup { + BYTE type; /* eventBase + SmtWakeup */ + BYTE bpad0; + CARD16 sequenceNumber B16; + CARD32 flags; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xSmtWakeupEvent; +#define sz_xSmtWakeupEvent 32 + +#ifdef _SMT_SERVER_ + +typedef struct { /* SMT_DEFER_FREE */ + int (*freep)(/* ptr,dat */); + unsigned char *Q; + unsigned long *ptr; + unsigned long dat; + unsigned int len; +} smtQEntry, *smtQEntryPtr; + +#define SMT_Q_DEPTH 11 /* SMT_DEFER_FREE */ + +typedef struct { /* SMT_DEFER_FREE */ + int last; /* next to be freed */ + int this; /* current request */ + int next; /* next to be written */ + smtQEntry e[SMT_Q_DEPTH]; +} smtQueue, *smtQueuePtr; + +typedef struct _smtControlBlock { + Channel chan; /* channel control block */ + SmtPrivatePtr pPriv; + int wakeRec; /* wakeup requests received */ + int wakeSent; /* wakeup events sent */ + int (*ReadRequestFromClient)(); + smtQueue q; /* queue of req's to free */ + short majorVersion, minorVersion; /* client versions */ +} smtControlBlock, *smtControlBlockPtr; + +#else /* client-side definitions */ + +typedef struct _smtDisplay { + Channel chan; + char *buffer; /* saved non-smt buffer starting address. */ + char *bufptr; /* saved non-smt buffer index pointer. */ + char *bufmax; /* saved non-smt buffer index pointer. */ + SmtPrivatePtr pPriv; /* pointer to server-client private area */ + short majorVersion, minorVersion; /* server versions */ +} smtDisplay, *smtDisplayPtr; + +#endif /* _SMT_SERVER_ */ + +#endif /* _SMTSTR_H_ */ diff --git a/xie/build/dec/xemacros.h b/xie/build/dec/xemacros.h new file mode 100644 index 0000000..445b57d --- /dev/null +++ b/xie/build/dec/xemacros.h @@ -0,0 +1,358 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +#ifndef __XEMACROS__ +#define __XEMACROS__ "@(#)xemacros.h 1.9 - 90/09/18 " +/* RCSID = $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/xemacros.h,v 1.1.2.3 92/04/27 12:33:06 Leela_Obilichetti Exp $" */ +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This include file is designed to provide the *visible* + * interface to XTrap data structures. Fields can be set + * using these macros by client programs unless otherwise + * specified; however, use of Trap Context convenience + * routines is strongly encouraged (XETrapContext.c) + */ +#include "bits.h" + +/* msleep macro to replace msleep() for portability reasons */ +#define msleep(m) usleep((m)*1000) + +/* Copying TC's assumes that the new TC must be created */ +#define XECopyTC(src,mask,dest) \ + (dest = XECreateTC(((src)->dpy), (mask), (&((src)->values)))) + +/* Expands to SET each element of the TCValues structure + * Returns the TCValues Mask so that the Set can be entered + * as an argument to the XEChangeTC() routine call + */ +/* Note: req_cb & evt_cb would only be used if you wanted to + * *share* callbacks between Trap Contexts. Normally, + * XEAddRequestCB() and XEAddEventCB() would be used. + */ +#define XETrapSetCfgReqCB(tcv,x) ((tcv)->req_cb = (x)) +#define XETrapSetCfgEvtCB(tcv,x) ((tcv)->evt_cb = (x)) +#define XETrapSetCfgMaxPktSize(tcv,x) ((tcv)->v.max_pkt_size = (x)) +#define XETrapSetCfgCmdKey(tcv,x) ((tcv)->v.cmd_key = (x)) +/* Note: e is only pertinent for "valid" or "data" */ +#define XETrapSetCfgFlags(tcv,e,a) \ + memcpy((tcv)->v.flags.e, (a), sizeof((tcv)->v.flags.e)) +#define XETrapSetCfgFlagTimestamp(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapTimestamp, (x)) +#define XETrapSetCfgFlagCmd(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapCmd, (x)) +#define XETrapSetCfgFlagCmdKeyMod(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapCmdKeyMod, (x)) +#define XETrapSetCfgFlagRequest(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapRequest, (x)) +#define XETrapSetCfgFlagEvent(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapEvent, (x)) +#define XETrapSetCfgFlagMaxPacket(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapMaxPacket, (x)) +#define XETrapSetCfgFlagStatistics(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapStatistics, (x)) +#define XETrapSetCfgFlagWinXY(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapWinXY, (x)) +#define XETrapSetCfgFlagCursor(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapCursor, (x)) +#define XETrapSetCfgFlagReq(tcv,request,x) \ + BitSet((tcv)->v.flags.req, (request), (x)) +#define XETrapSetCfgFlagXInput(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapXInput, (x)) +#define XETrapSetCfgFlagColorReplies(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapColorReplies, (x)) +#define XETrapSetCfgFlagGrabServer(tcv,e,x) \ + BitSet((tcv)->v.flags.e, XETrapGrabServer, (x)) +#define XETrapSetCfgFlagEvt(tcv,evt,x) \ + BitSet((tcv)->v.flags.event, (evt), (x)) + +#define XETrapSetValFlagDeltaTimes(tcv,x) \ + BitSet((tcv)->tc_flags, XETCDeltaTimes, (x)) + +/* Fields returned in the "GetAvailable" request */ +#define XETrapGetAvailPFIdent(avail) ((avail)->pf_ident) +#define XETrapGetAvailRelease(avail) ((avail)->xtrap_release) +#define XETrapGetAvailVersion(avail) ((avail)->xtrap_version) +#define XETrapGetAvailRevision(avail) ((avail)->xtrap_revision) +#define XETrapGetAvailMaxPktSize(avail) ((avail)->max_pkt_size) +#define XETrapGetAvailFlags(avail,a) \ + memcpy((a), (avail)->valid, sizeof((avail)->valid)) +#define XETrapGetAvailFlagTimestamp(avail) \ + (BitValue((avail)->valid, XETrapTimestamp)) +#define XETrapGetAvailFlagCmd(avail) \ + (BitValue((avail)->valid, XETrapCmd)) +#define XETrapGetAvailFlagCmdKeyMod(avail) \ + (BitValue((avail)->valid, XETrapCmdKeyMod)) +#define XETrapGetAvailFlagRequest(avail) \ + (BitValue((avail)->valid, XETrapRequest)) +#define XETrapGetAvailFlagEvent(avail) \ + (BitValue((avail)->valid, XETrapEvent)) +#define XETrapGetAvailFlagMaxPacket(avail) \ + (BitValue((avail)->valid, XETrapMaxPacket)) +#define XETrapGetAvailFlagStatistics(avail) \ + (BitValue((avail)->valid, XETrapStatistics)) +#define XETrapGetAvailFlagWinXY(avail) \ + (BitValue((avail)->valid, XETrapWinXY)) +#define XETrapGetAvailFlagCursor(avail) \ + (BitValue((avail)->valid, XETrapCursor)) +#define XETrapGetAvailFlagXInput(avail) \ + (BitValue((avail)->valid, XETrapXInput)) +#define XETrapGetAvailFlagVecEvt(avail) \ + (BitValue((avail)->valid, XETrapVectorEvents)) +#define XETrapGetAvailFlagColorReplies(avail) \ + (BitValue((avail)->valid, XETrapColorReplies)) +#define XETrapGetAvailFlagGrabServer(avail) \ + (BitValue((avail)->valid, XETrapGrabServer)) +#define XETrapGetAvailOpCode(avail) ((avail)->major_opcode) +/* Macro's for creating current request and trap context macros */ +#define XETrapGetCfgMaxPktSize(cfg) ((cfg)->max_pkt_size) +#define XETrapGetCfgCmdKey(cfg) ((cfg)->cmd_key) +#define XETrapGetCfgFlags(cfg,e,a) \ + memcpy((a), (cfg)->flags.e, sizeof((cfg)->flags.e)) +#define XETrapGetCfgFlagTimestamp(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapTimestamp)) +#define XETrapGetCfgFlagCmd(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapCmd)) +#define XETrapGetCfgFlagCmdKeyMod(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapCmdKeyMod)) +#define XETrapGetCfgFlagRequest(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapRequest)) +#define XETrapGetCfgFlagEvent(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapEvent)) +#define XETrapGetCfgFlagMaxPacket(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapMaxPacket)) +#define XETrapGetCfgFlagStatistics(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapStatistics)) +#define XETrapGetCfgFlagWinXY(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapWinXY)) +#define XETrapGetCfgFlagCursor(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapCursor)) +#define XETrapGetCfgFlagXInput(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapXInput)) +#define XETrapGetCfgFlagColorReplies(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapColorReplies)) +#define XETrapGetCfgFlagGrabServer(cfg,e) \ + (BitValue((cfg)->flags.e, XETrapGrabServer)) +/* Request values are in "Xproto.h" of the flavor X_RequestType */ +#define XETrapGetCfgFlagReq(cfg,request) \ + (BitValue((cfg)->flags.req, (request))) +/* Event types are in "X.h" of the flavor EventType (e.g. KeyPress) */ +#define XETrapGetCfgFlagEvt(cfg,evt) \ + (BitValue((cfg)->flags.event, (evt))) + +/* Fields returned int the "GetCurrent" Request */ +#define XETrapGetCurX(avail) ((avail)->cur_x) +#define XETrapGetCurY(avail) ((avail)->cur_y) +#define XETrapGetCurSFlags(cur,a) \ + memcpy((a), (cur)->state_flags, sizeof((cur)->state_flags)) +#define XETrapGetCurMaxPktSize(cur) (XETrapGetCfgMaxPktSize(&((cur)->config))) +#define XETrapGetCurCmdKey(cur) (XETrapGetCfgCmdKey(&((cur)->config))) +/* Note: e is only pertinent for "valid" or "data" */ +#define XETrapGetCurCFlags(cur,e,a) (XETrapGetCfgFlags(&((cur)->config),e,a)) +#define XETrapGetCurFlagTimestamp(cur,e) \ + (XETrapGetCfgFlagTimestamp(&((cur)->config),e)) +#define XETrapGetCurFlagCmd(cur,e) (XETrapGetCfgFlagCmd(&((cur)->config),e)) +#define XETrapGetCurFlagCmdKeyMod(cur,e) \ + (XETrapGetCfgFlagCmdKeyMod(&((cur)->config),e)) +#define XETrapGetCurFlagRequest(cur,r) \ + (XETrapGetCfgFlagRequest(&((cur)->config),r)) +#define XETrapGetCurFlagEvent(cur,e) \ + (XETrapGetCfgFlagEvent(&((cur)->config),e)) +#define XETrapGetCurFlagMaxPacket(cur,e) \ + (XETrapGetCfgFlagMaxPacket(&((cur)->config),e)) +#define XETrapGetCurFlagStatistics(cur,e) \ + (XETrapGetCfgFlagStatistics(&((cur)->config),e)) +#define XETrapGetCurFlagWinXY(cur,e) \ + (XETrapGetCfgFlagWinXY(&((cur)->config),e)) +#define XETrapGetCurFlagCursor(cur,e) \ + (XETrapGetCfgFlagCursor(&((cur)->config),e)) +#define XETrapGetCurFlagXInput(cur,e) \ + (XETrapGetCfgFlagXInput(&((cur)->config),e)) +#define XETrapGetCurFlagColorReplies(cur,e) \ + (XETrapGetCfgFlagColorReplies(&((cur)->config),e)) +#define XETrapGetCurFlagGrabServer(cur,e) \ + (XETrapGetCfgFlagGrabServer(&((cur)->config),e)) +/* Request values are in "Xproto.h" of the flavor X_RequestType */ +#define XETrapGetCurFlagReq(cur,r) (XETrapGetCfgFlagReq(&((cur)->config),r)) +/* Event types are in "X.h" of the flavor EventType (e.g. KeyPress) */ +#define XETrapGetCurFlagEvt(cur,e) (XETrapGetCfgFlagEvt(&((cur)->config),e)) + +/* Fields returned int the "GetStatistics" Request */ +#define XETrapGetStatsReq(stat,e) ((stat)->requests[(e)]) +#define XETrapGetStatsEvt(stat,e) ((stat)->events[(e)]) + +/* Fields returned in the "GetVersion" request */ +#define XETrapGetVersRelease(vers) ((vers)->xtrap_release) +#define XETrapGetVersVersion(vers) ((vers)->xtrap_version) +#define XETrapGetVersRevision(vers) ((vers)->xtrap_revision) + +/* Fields returned in the "GetLastInpTime" request */ +#define XETrapGetLastInpTime(time_rep) ((time_rep)->last_time) + +/* Expands to GET each element of the TCValues structure */ +#define XETrapGetTCReqCB(tc) ((tc)->values.req_cb) +#define XETrapGetTCEvtCB(tc) ((tc)->values.evt_cb) +#define XETrapGetTCTime(tc) ((tc)->values.last_time) +/* TC specific flags */ +#define XETrapGetTCLFlags(tc,a) \ + memcpy((a), (tc)->values.tc_flags, sizeof((tc)->values.tc_flags)) +#define XETrapGetTCFlagDeltaTimes(tc) \ + (BitValue((tc)->values.tc_flags, XETCDeltaTimes)) +#define XETrapGetTCFlagTrapActive(tc) \ + (BitValue((tc)->values.tc_flags, XETCTrapActive)) +#define XETrapGetTCMaxPktSize(tc) (XETrapGetCfgMaxPktSize(&((tc)->values.v))) +#define XETrapGetTCCmdKey(tc) (XETrapGetCfgCmdKey(&((tc)->values.v))) +/* Note: e is only pertinent for "valid" or "data" */ +#define XETrapGetTCFlags(tc,e,a) (XETrapGetCfgFlags(&((tc)->values.v),e,a)) +#define XETrapGetTCFlagTimestamp(tc,e) \ + (XETrapGetCfgFlagTimestamp(&((tc)->values.v),e)) +#define XETrapGetTCFlagCmd(tc,e) \ + (XETrapGetCfgFlagCmd(&((tc)->values.v),e)) +#define XETrapGetTCFlagCmdKeyMod(tc,e) \ + (XETrapGetCfgFlagCmdKeyMod(&((tc)->values.v),e)) +#define XETrapGetTCFlagRequest(tc,r) \ + (XETrapGetCfgFlagRequest(&((tc)->values.v),r)) +#define XETrapGetTCFlagEvent(tc,e) \ + (XETrapGetCfgFlagEvent(&((tc)->values.v),e)) +#define XETrapGetTCFlagMaxPacket(tc,e) \ + (XETrapGetCfgFlagMaxPacket(&((tc)->values.v),e)) +#define XETrapGetTCFlagStatistics(tc,e) \ + (XETrapGetCfgFlagStatistics(&((tc)->values.v),e)) +#define XETrapGetTCFlagWinXY(tc,e) \ + (XETrapGetCfgFlagWinXY(&((tc)->values.v),e)) +#define XETrapGetTCFlagCursor(tc,e) \ + (XETrapGetCfgFlagCursor(&((tc)->values.v),e)) +#define XETrapGetTCFlagXInput(tc,e) \ + (XETrapGetCfgFlagXInput(&((tc)->values.v),e)) +#define XETrapGetTCFlagColorReplies(tc,e) \ + (XETrapGetCfgFlagColorReplies(&((tc)->values.v),e)) +#define XETrapGetTCFlagGrabServer(tc,e) \ + (XETrapGetCfgFlagGrabServer(&((tc)->values.v),e)) +/* Request values are in "Xproto.h" of the flavor X_RequestType */ +#define XETrapGetTCFlagReq(tc,r) \ + (XETrapGetCfgFlagReq(&((tc)->values.v),r)) +/* Event types are in "X.h" of the flavor EventType (e.g. KeyPress) */ +#define XETrapGetTCFlagEvt(tc,e) \ + (XETrapGetCfgFlagEvt(&((tc)->values.v),e)) +/* The following can/should *not* be set directly! */ +#define XETrapGetNext(tc) ((tc)->next) +#define XETrapGetDpy(tc) ((tc)->dpy) +#define XETrapGetEventBase(tc) ((tc)->eventBase) +#define XETrapGetErrorBase(tc) ((tc)->errorBase) +#define XETrapGetExtOpcode(tc) ((tc)->extOpcode) +#define XETrapGetXBuff(tc) ((tc)->xbuff) +#define XETrapGetXMaxSize(tc) ((tc)->xmax_size) +#define XETrapGetExt(tc) ((tc)->ext_data) +#define XETrapGetDirty(tc) ((tc)->dirty) +#define XETrapGetValues(tc) memcpy((x),(tc)->values,sizeof((tc)->values)) +#define XETrapGetEventFunc(tc) ((tc)->eventFunc) + +#define XETrapGetHeaderCount(phdr) ((phdr)->count) +#define XETrapGetHeaderTimestamp(phdr) ((phdr)->timestamp) +#define XETrapGetHeaderType(phdr) ((phdr)->type) +#define XETrapGetHeaderScreen(phdr) ((phdr)->screen) +#define XETrapGetHeaderWindowX(phdr) ((phdr)->win_x) +#define XETrapGetHeaderWindowY(phdr) ((phdr)->win_y) +#define XETrapGetHeaderClient(phdr) ((phdr)->client) + +#define XEGetRelease(tc) ((tc)->release) +#define XEGetVersion(tc) ((tc)->version) +#define XEGetRevision(tc) ((tc)->revision) + +/* Condition handling macros */ +#ifndef _InitExceptionHandling +#ifdef vms +#define _InitExceptionHandling(rtn) \ + VAXC$ESTABLISH(rtn) /* VMS exception handler */ +#else /* vms */ +#define _InitExceptionHandling(rtn) \ + (void)signal(SIGBUS, rtn); /* Bus error */ \ + (void)signal(SIGSEGV, rtn); /* Accvio/Segment error */ \ + (void)signal(SIGFPE, rtn); /* Floating point exception */ \ + (void)signal(SIGILL, rtn); /* Illegal instruction */ \ + (void)signal(SIGSYS, rtn); /* Param error in sys call */ \ + (void)signal(SIGHUP, rtn); \ + (void)signal(SIGPIPE, rtn); \ + (void)signal(SIGTERM, rtn) +#endif /* vms */ +#endif /* _InitExceptionHandling */ + +#ifndef _ClearExceptionHandling +#ifdef vms +#define _ClearExceptionHandling() \ + LIB$REVERT() +#else +#define _ClearExceptionHandling() \ + (void)signal(SIGBUS, SIG_DFL); /* Bus error */ \ + (void)signal(SIGSEGV, SIG_DFL); /* Accvio/Segment error */ \ + (void)signal(SIGFPE, SIG_DFL); /* Floating point exception */ \ + (void)signal(SIGILL, SIG_DFL); /* Illegal instruction */ \ + (void)signal(SIGSYS, SIG_DFL); /* Param error in sys call */ \ + (void)signal(SIGHUP, SIG_DFL); \ + (void)signal(SIGPIPE, SIG_DFL); \ + (void)signal(SIGTERM, SIG_DFL) +#endif /* vms */ +#endif /* _ClearExceptionHandling */ + +#endif /* __XEMACROS__ */ + diff --git a/xie/build/dec/xestream.h b/xie/build/dec/xestream.h new file mode 100644 index 0000000..ecc9361 --- /dev/null +++ b/xie/build/dec/xestream.h @@ -0,0 +1,201 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +/* BuildSystemHeader added automatically */ +/* $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/xestream.h,v 1.1.2.2 92/02/06 16:53:05 Jim_Ludwig Exp $ */ +#ifndef __XESTREAM__ +#define __XESTREAM__ "@(#)xestream.h 1.11 - 90/11/07 " + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This header file describes the data structures and constants + * required to utilize the custom "stream" facility which presents + * a common interface to varying I/O transports. Currently only + * partially implemented for (server-side). + */ +#include +#if defined TCPCONN && !defined VMS +#include +#endif +#if defined DNETCONN && !defined VMS +#include +#endif + +typedef struct +{ + INT32 flink; + INT32 blink; +} +#ifdef VMS + _align(QUADWORD) +#endif + QUEUE_HDR; + +/* Stream I/O data abstraction: + * The following structures support a loose rendition of + * stream I/O abstraction for use in writing more portable + * applications between VMS and U*IX. It was intentionally + * decided NOT to attempt to implement streams per the + * published interface specification (beyond *our* scope). + * However, the *principle* is being observed in the hope + * that someday XTrap can take advantage of some future + * streams implementation. + */ +typedef struct _XESTREAM /* stream I/O object */ +{ + struct _XESTREAM *next; + CARD8 type; + Bool queue; + int_function accept; + int_function close; + int_function read; + int_function write; + void_function err_func; + CARD16 addr1_lgth; /* in bytes (counted string) */ + char *addr1; /* string of what's opened */ + CARD16 addr2_lgth; /* in bytes (counted string) */ + char *addr2; /* Maybe a return addr (DECnet) */ + union + { + struct _qio + { + INT16 read_chan; + INT16 write_chan; + CARD16 iosb[4L]; + CARD32 efn; + CARD32 read_mode; + CARD32 write_mode; + QUEUE_HDR *read_queue; /* must be quadword-aligned loc */ + QUEUE_HDR *free_queue; /* must be quadword-aligned loc */ + CARD32 byte_cnt; + CARD32 bufsiz; + CARD32 bufinc; + CARD32 errno; +#if defined TCPCONN || defined DNETCONN + CARD32 accept_efn; + INT16 port; + INT16 mbx_chan; + void *ncb; /* VMS-only Network Command Block Info */ + void *netcmd; /* VMS-only Network Command Mbx Logical */ +#endif + } Q; + struct _dsc + { + INT32 fd; + INT32 sd; /* socket descriptor for init connection */ +#if defined TCPCONN && !defined VMS + struct sockaddr_in insock; +#endif +#if defined DNETCONN && !defined VMS + struct sockaddr_dn dnsock; +#endif + } D; + } u; +} XESTREAM; + +/* Currently defined Stream Types */ +#define StreamInternet 1L +#define StreamDECnet 2L +#define StreamMbx 3L /* Only on VMS */ +#define StreamShMem 4L /* Not Currently Implemented */ +#define StreamFile 5L +#define StreamLAT 6L /* Not Currently Implemented */ + + +#define BUFSIZstream 1500L /* Stream BUFSIZ used w/queued stream type */ + /* Note: Can't be <110 bytes for DECnet */ +#define BUFstream 1L /* Initial increment of n buffers per */ + /* stream. Increases exponentially as more */ + /* are req'd */ +#ifdef vms +typedef struct _QREC +{ + CARD32 queue_entry[2L]; + CARD16 iosb[4L]; + XESTREAM *st; + CARD8 *data; +} +#ifdef VMS + _align(QUADWORD) +#endif + QREC; +typedef struct _QREC *QRECPtr; + +#define MbxSize 8192L +#define MbxBufs 2L + +#endif + +#if defined TCPCONN || defined DNETCONN +#define AcceptInterval 2 /* in seconds */ +#define AcceptLoops 15 /* max times around the loop */ +#endif + +#define XEStreamEFN 7L /* Arbitrary event flag in cluster 0 for VMS use */ + +#define SIOErr(st,err_str) ((void)(*(st)->err_func)(err_str)) +#define SIOSetErrFunc(st,rtn) ((st)->err_func = (void_function)rtn) +#define SIOGetErrFunc(st) ((st)->err_func) + +#endif /* __XESTREAM__ */ diff --git a/xie/build/dec/xkmeproto_include.h b/xie/build/dec/xkmeproto_include.h new file mode 100644 index 0000000..e9e30d3 --- /dev/null +++ b/xie/build/dec/xkmeproto_include.h @@ -0,0 +1,123 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/*********************************************************************** +Copyright 1990 by Digital Equipment Corporation, Maynard, Massachusetts. +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +************************************************************************/ +/* +**++ +** FACILITY: +** +** common struct +** +** ABSTRACT: +** +** It contains protocol definition for the keyboard management extension. +** (KME). +** The KME extension name string and all relevant protocol definition for +** I18N keyboard mode-switching are defined here. +** +** ENVIRONMENT: +** +** Ultrix +** +** MODIFICATION HISTORY: +** +**-- +**/ +#ifndef XKMEPROTO_INCLUDE_H +#define XKMEPROTO_INCLUDE_H + +#define KMEXTENSIONNAME "Keyboard-Management-Extension" + +/* constant returned by XKME routines indicating that the target server + * version does not honor the request */ +#define KMEBADREQUEST 2 + +/* Opcodes to set and reset keyboard mode-switch */ +#define X_KMEDoKBModeSwitch 10 + +/* command mode constants for switching the keyboard mode */ +#define LockDownModeSwitch 1 +#define UnlockModeSwitch 2 + + +/* reply constants */ +#define KBModeSwitchSuccess 0 /* kb mode successfully switched */ +#define KBModeSwitchFailure 1 /* kb mode failed to switch */ +#define KBModeSwitchInvalidCmd 2 /* invalid kb mode-switch command */ +#define KBModeSwitchNoop 3 /* Keyboard is already in the request mode*/ + + +/* + * X_KMEDoKBModeSwitch request packet def + */ +typedef struct { + CARD8 reqType; + CARD8 minor_opcode; + CARD16 length B16; + CARD32 mode B32; /* LockDownModeSwitch or UnlockModeSwitch */ +} xKMEDoKBModeSwitchReq; + +/* + * X_KMEDoKBModeSwitch reply packet definition + */ +typedef struct { + BYTE type; + BYTE data1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 status B32; /* 0 = SUCCESS, 1 = FAILURE */ + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +}xKMEDoKBModeSwitchRep; + +#define sz_xKMEDoKBModeSwitchReq (sizeof(xKMEDoKBModeSwitchReq)) +#define sz_xKMEDoKBModeSwitchRep (sizeof(xKMEDoKBModeSwitchRep)) + +#endif /* XKMEPROTO_INCLUDE_H */ diff --git a/xie/build/dec/xtestext1.h b/xie/build/dec/xtestext1.h new file mode 100644 index 0000000..9f86011 --- /dev/null +++ b/xie/build/dec/xtestext1.h @@ -0,0 +1,327 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* + * xtestext1.h + * + * X11 Input Synthesis Extension include file + */ + +/* + +Copyright 1986, 1987, 1988 by Hewlett-Packard Corporation +Copyright 1986, 1987, 1988 by the Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in +advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +Hewlett-Packard and M.I.T. make no representations about the +suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +This software is not subject to any license of the American +Telephone and Telegraph Company or of the Regents of the +University of California. + +*/ + +/* + * the typedefs for CARD8, CARD16, and CARD32 are defined in Xmd.h + */ + +/* + * used in the XTestPressButton and XTestPressKey functions + */ +#define XTestPRESS 1 << 0 +#define XTestRELEASE 1 << 1 +#define XTestSTROKE 1 << 2 + +/* + * When doing a key or button stroke, the number of milliseconds + * to delay between the press and the release of a key or button + * in the XTestPressButton and XTestPressKey functions. + */ + +#define XTestSTROKE_DELAY_TIME 10 + +/* + * used in the XTestGetInput function + */ +#define XTestEXCLUSIVE 1 << 0 +#define XTestPACKED_ACTIONS 1 << 1 +#define XTestPACKED_MOTION 1 << 2 + +/* + * used in the XTestFakeInput function + */ +#define XTestFAKE_ACK_NOT_NEEDED 0 +#define XTestFAKE_ACK_REQUEST 1 + +/* + * used in the XTest extension initialization routine + */ +#define XTestEXTENSION_NAME "XTestExtension1" +#define XTestEVENT_COUNT 2 + +/* + * XTest request type values + * + * used in the XTest extension protocol requests + */ +#define X_TestFakeInput 1 +#define X_TestGetInput 2 +#define X_TestStopInput 3 +#define X_TestReset 4 +#define X_TestQueryInputSize 5 + +/* + * This defines the maximum size of a list of input actions + * to be sent to the server. It should always be a multiple of + * 4 so that the entire xTestFakeInputReq structure size is a + * multiple of 4. + */ +#define XTestMAX_ACTION_LIST_SIZE 64 + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 XTestReqType; /* always X_TestFakeInput */ + CARD16 length B16; /* 2 + XTestMAX_ACTION_LIST_SIZE/4 */ + CARD32 ack B32; + CARD8 action_list[XTestMAX_ACTION_LIST_SIZE]; +} xTestFakeInputReq; +#define sz_xTestFakeInputReq (XTestMAX_ACTION_LIST_SIZE + 8) + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 XTestReqType; /* always X_TestGetInput */ + CARD16 length B16; /* 2 */ + CARD32 mode B32; +} xTestGetInputReq; +#define sz_xTestGetInputReq 8 + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 XTestReqType; /* always X_TestStopInput */ + CARD16 length B32; /* 1 */ +} xTestStopInputReq; +#define sz_xTestStopInputReq 4 + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 XTestReqType; /* always X_TestReset */ + CARD16 length B16; /* 1 */ +} xTestResetReq; +#define sz_xTestResetReq 4 + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 XTestReqType; /* always X_TestQueryInputSize */ + CARD16 length B16; /* 1 */ +} xTestQueryInputSizeReq; +#define sz_xTestQueryInputSizeReq 4 + +/* + * This is the definition of the reply for the xTestQueryInputSize + * request. It should remain the same minimum size as other replies + * (32 bytes). + */ +typedef struct { + CARD8 type; /* always X_Reply */ + CARD8 pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; /* always 0 */ + CARD32 size_return B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xTestQueryInputSizeReply; + +/* + * This is the definition for the input action wire event structure. + * This event is sent to the client when the server has one or + * more user input actions to report to the client. It must + * remain the same size as all other wire events (32 bytes). + */ +#define XTestACTIONS_SIZE 28 + +typedef struct { + CARD8 type; /* always XTestInputActionType */ + CARD8 pad00; + CARD16 sequenceNumber B16; + CARD8 actions[XTestACTIONS_SIZE]; +} xTestInputActionEvent; + +/* + * This is the definition for the xTestFakeAck wire event structure. + * This event is sent to the client when the server has completely + * processed its input action buffer, and is ready for more. + * It must remain the same size as all other wire events (32 bytes). + */ +typedef struct { + CARD8 type; /* always XTestFakeAckType */ + CARD8 pad00; + CARD16 sequenceNumber B16; + CARD32 pad02 B32; + CARD32 pad03 B32; + CARD32 pad04 B32; + CARD32 pad05 B32; + CARD32 pad06 B32; + CARD32 pad07 B32; + CARD32 pad08 B32; +} xTestFakeAckEvent; + +/* + * The server side of this extension does not (and should not) have + * definitions for Display and Window. The ifndef allows the server + * side of the extension to ignore the following typedefs. + */ +#ifndef XTestSERVER_SIDE +/* + * This is the definition for the input action host format event structure. + * This is the form that a client using this extension will see when + * it receives an input action event. + */ +typedef struct { + int type; /* always XTestInputActionType */ + Display *display; + Window window; + CARD8 actions[XTestACTIONS_SIZE]; +} XTestInputActionEvent; + +/* + * This is the definition for the xTestFakeAck host format event structure. + * This is the form that a client using this extension will see when + * it receives an XTestFakeAck event. + */ +typedef struct { + int type; /* always XTestFakeAckType */ + Display *display; + Window window; +} XTestFakeAckEvent; +#endif + +/* + * This is the definition for the format of the header byte + * in the input action structures. + */ +#define XTestACTION_TYPE_MASK 0x03 /* bits 0 and 1 */ +#define XTestKEY_STATE_MASK 0x04 /* bit 2 (key action) */ +#define XTestX_SIGN_BIT_MASK 0x04 /* bit 2 (motion action) */ +#define XTestY_SIGN_BIT_MASK 0x08 /* bit 3 (motion action) */ +#define XTestDEVICE_ID_MASK 0xf0 /* bits 4 through 7 */ + +#define XTestMAX_DEVICE_ID 0x0f +#define XTestPackDeviceID(x) (((x) & XTestMAX_DEVICE_ID) << 4) +#define XTestUnpackDeviceID(x) (((x) & XTestDEVICE_ID_MASK) >> 4) + +/* + * These are the possible action types. + */ +#define XTestDELAY_ACTION 0 +#define XTestKEY_ACTION 1 +#define XTestMOTION_ACTION 2 +#define XTestJUMP_ACTION 3 + +/* + * These are the definitions for key/button motion input actions. + */ +#define XTestKEY_UP 0x04 +#define XTestKEY_DOWN 0x00 + +typedef struct { + CARD8 header; /* which device, key up/down */ + CARD8 keycode; /* which key/button to move */ + CARD16 delay_time B16; /* how long to delay (in ms) */ +} XTestKeyInfo; + +/* + * This is the definition for pointer jump input actions. + */ +typedef struct { + CARD8 header; /* which pointer */ + CARD8 pad1; /* unused padding byte */ + CARD16 jumpx B16; /* x coord to jump to */ + CARD16 jumpy B16; /* y coord to jump to */ + CARD16 delay_time B16; /* how long to delay (in ms) */ +} XTestJumpInfo; + +/* + * These are the definitions for pointer relative motion input + * actions. + * + * The sign bits for the x and y relative motions are contained + * in the header byte. The x and y relative motions are packed + * into one byte to make things fit in 32 bits. If the relative + * motion range is larger than +/-15, use the pointer jump action. + */ +#define XTestMOTION_MAX 15 +#define XTestMOTION_MIN -15 + +#define XTestX_NEGATIVE 0x04 +#define XTestY_NEGATIVE 0x08 + +#define XTestX_MOTION_MASK 0x0f +#define XTestY_MOTION_MASK 0xf0 + +#define XTestPackXMotionValue(x) ((x) & XTestX_MOTION_MASK) +#define XTestPackYMotionValue(x) (((x) << 4) & XTestY_MOTION_MASK) + +#define XTestUnpackXMotionValue(x) ((x) & XTestX_MOTION_MASK) +#define XTestUnpackYMotionValue(x) (((x) & XTestY_MOTION_MASK) >> 4) + +typedef struct { + CARD8 header; /* which pointer */ + CARD8 motion_data; /* x,y relative motion */ + CARD16 delay_time B16; /* how long to delay (in ms) */ +} XTestMotionInfo; + +/* + * These are the definitions for a long delay input action. It is + * used when more than XTestSHORT_DELAY_TIME milliseconds of delay + * (approximately one minute) is needed. + * + * The device ID for a delay is always set to XTestDELAY_DEVICE_ID. + * This guarantees that a header byte with a value of 0 is not + * a valid header, so it can be used as a flag to indicate that + * there are no more input actions in an XTestInputAction event. + */ + +#define XTestSHORT_DELAY_TIME 0xffff +#define XTestDELAY_DEVICE_ID 0x0f + +typedef struct { + CARD8 header; /* always XTestDELAY_DEVICE_ID */ + CARD8 pad1; /* unused padding byte */ + CARD16 pad2 B16; /* unused padding word */ + CARD32 delay_time B32; /* how long to delay (in ms) */ +} XTestDelayInfo; diff --git a/xie/build/dec/xteststr.h b/xie/build/dec/xteststr.h new file mode 100644 index 0000000..9c04a0f --- /dev/null +++ b/xie/build/dec/xteststr.h @@ -0,0 +1,121 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* $XConsortium: xteststr.h,v 1.5 92/04/20 13:14:15 rws Exp $ */ +/* + +Copyright 1992 by the Massachusetts Institute of Technology + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. M.I.T. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +*/ + +/* The following are needed for correctly-sized protocol requests */ + +#include +#define Window CARD32 +#define Time CARD32 +#define Cursor CARD32 + + +#define XTestCurrentCursor ((Cursor)1) + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 xtReqType; /* always X_XTestGetVersion */ + CARD16 length B16; + CARD8 majorVersion; + CARD8 pad; + CARD16 minorVersion B16; +} xXTestGetVersionReq; +#define sz_xXTestGetVersionReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 majorVersion; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 minorVersion B16; + CARD16 pad0 B16; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xXTestGetVersionReply; +#define sz_xXTestGetVersionReply 32 + +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 xtReqType; /* always X_XTestCompareCursor */ + CARD16 length B16; + Window window B32; + Cursor cursor B32; +} xXTestCompareCursorReq; +#define sz_xXTestCompareCursorReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL same; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xXTestCompareCursorReply; +#define sz_xXTestCompareCursorReply 32 + +/* used only on the client side */ +typedef struct { + CARD8 reqType; /* always XTestReqCode */ + CARD8 xtReqType; /* always X_XTestFakeInput */ + CARD16 length B16; + BYTE type; + BYTE detail; + CARD16 pad0 B16; + Time time B32; + Window root B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + INT16 rootX B16, rootY B16; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xXTestFakeInputReq; +#define sz_xXTestFakeInputReq 36 + +#undef Window CARD32 +#undef Time CARD32 +#undef Cursor CARD32 diff --git a/xie/build/dec/xtrapddmi.h b/xie/build/dec/xtrapddmi.h new file mode 100644 index 0000000..6928ffd --- /dev/null +++ b/xie/build/dec/xtrapddmi.h @@ -0,0 +1,181 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* BuildSystemHeader added automatically */ +/* $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/xtrapddmi.h,v 1.1.2.3 92/04/27 12:36:37 Leela_Obilichetti Exp $ */ +#ifndef __XTRAPDDMI__ +#define __XTRAPDDMI__ + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This header file is used by the XTrap server extension only + * (not used by clients or the XTrap Toolkit). Information + * contained herein should *not* be visible to clients (xtrapdi.h + * is used for this). The name is historical. + */ +#include "X.h" +#include "bits.h" +#include "dix.h" + +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +#define XETrapNumEvents 1L /* constants used for AddExtension */ + +/* Other constants used within the extension code */ +#define XETrapMinRepSize 32L /* Minimum number of longs */ + +/* This structure will be globally declared to provide storage to hold + * the various extension wide configuration information. Allocated on + * a per-client basis. + */ +typedef struct +{ + ClientPtr client; /* Multi-client support and error handling */ + xXTrapGetCurReply cur; /* Struct of Miscellaneous state info */ + xXTrapGetStatsReply *stats; /* Pointer to stat's, malloc'd if requested */ + CARD32 last_input_time B32; /* last timestamp from input event */ + CARD16 protocol B16; /* current communication protocol */ +} XETrapEnv; + +#define XETrapSetHeaderEvent(phdr) ((phdr)->type = 0x1L) +#define XETrapSetHeaderRequest(phdr) ((phdr)->type = 0x2L) +#define XETrapSetHeaderSpecial(phdr) ((phdr)->type = 0x3L) +#define XETrapSetHeaderCursor(phdr) ((phdr)->type = 0x4L) +#define XETrapSetHeaderReply(phdr) ((phdr)->type = 0x5L) + +#ifdef X11R3 +/* Swapping macros not visible in X11 Release 3 */ +#define LengthRestB(stuff) \ + (((unsigned long)stuff->length << 2) - sizeof(*stuff)) + +#define LengthRestS(stuff) \ + (((unsigned long)stuff->length << 1) - (sizeof(*stuff) >> 1)) + +#define LengthRestL(stuff) \ + ((unsigned long)stuff->length - (sizeof(*stuff) >> 2)) + +#define SwapRestS(stuff) \ + SwapShorts((short *)(stuff + 1), LengthRestS(stuff)) + +#define SwapRestL(stuff) \ + SwapLongs((long *)(stuff + 1), LengthRestL(stuff)) + +/* copy long from src to dst byteswapping on the way */ +#ifndef cpswapl +#define cpswapl(Src, Dest) \ + { \ + char *pSrc = (char *)&(Src); \ + char *pDest = (char *)&(Dest); \ + pDest[0] = pSrc[3]; \ + pDest[1] = pSrc[2]; \ + pDest[2] = pSrc[1]; \ + pDest[3] = pSrc[0]; \ + } +#endif +/* copy short from src to dst byteswapping on the way */ +#ifndef cpswaps +#define cpswaps(Src, Dest)\ + { \ + char *pSrc = ((char *)&(Src)); \ + char *pDest = ((char *)&(Dest)); \ + pDest[1] = pSrc[0]; \ + pDest[0] = pSrc[1]; \ + } +#endif +#endif /* X11R3 */ + +#ifndef vaxc +#define globaldef +#define globalref extern +#endif + +/* Extension platform identifier (conditionally defined) */ +#ifdef osf1 +# define XETrapPlatform PF_DECOSF1 +#endif +#ifdef ultrix +# define XETrapPlatform PF_DECUltrix +#endif +#ifdef vms +#ifdef VAXELN +# define XETrapPlatform PF_DECELN +#else +# define XETrapPlatform PF_DECVMS +#endif +#endif +#ifdef VT1000 +# define XETrapPlatform PF_DECVT1000 +#endif +#ifdef VXT +# define XETrapPlatform PF_DECXTerm +#endif +#ifdef PC +# define XETrapPlatform PF_IBMAT +#endif +#ifdef sun +# define XETrapPlatform PF_SunSparc +#endif +#ifndef XETrapPlatform +# define XETrapPlatform PF_Other +#endif /* XETrapPlatform */ + +#endif /* __XTRAPDDMI__ */ diff --git a/xie/build/dec/xtrapdi.h b/xie/build/dec/xtrapdi.h new file mode 100644 index 0000000..ccca215 --- /dev/null +++ b/xie/build/dec/xtrapdi.h @@ -0,0 +1,539 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +#ifndef __XTRAPDI__ +#define __XTRAPDI__ + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991, 1992 by Digital Equipment Corp., +Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This header file defines the common structures/constants + * between the XTrap extension and clients. All protocol + * definitions between XTrap extension/clients can be found + * here. + */ + +#define NEED_REPLIES +#define NEED_EVENTS +#include +#include "X.h" +#include "Xmd.h" +#ifdef SMT +#define NEED_EVENTS +#define NEED_REPLIES +#endif +#include "Xproto.h" +#include "bits.h" +#define XTrapExtName "DEC-XTRAP" +/* Current Release, Version, and Revision of the XTrap Extension */ +#define XETrapRelease 3L +#define XETrapVersion 3L +#ifndef XETrapRevision /* Changed from the Makefile by users */ +# define XETrapRevision 0L +#endif /* XETrapRevision */ +#define XETrapProtocol 32L + +#ifndef B8 +# define B8 :8 +#endif +#ifndef SIZEOF +# ifdef __STDC__ +# define SIZEOF(x) sz_##x +# else +# define SIZEOF(x) sz_/**/x +# endif /* if ANSI C compiler else not */ +#endif +#ifndef sz_CARD32 +#define sz_CARD32 4L +#endif +#ifndef sz_CARD8 +#define sz_CARD8 1L +#endif +#ifndef True +# define True 1L +# define False 0L +#endif + +typedef int (*int_function)(); +typedef void (*void_function)(); + +/* This is used as flags to indicate desired request traps + * Note: This has been padded to a CARD32 to keep structure aligned + */ +#define XETrapMaxRequest (((SIZEOF(CARD32)+((256L-1L) / \ + (BitsInByte*SIZEOF(CARD8))))/SIZEOF(CARD32))*SIZEOF(CARD32)) +typedef CARD8 ReqFlags[XETrapMaxRequest]; + +/* This is used as flags to indicate desired event traps + * Until events become *fully vectored*, we'll have to fake it + * by defining an array of 5 events (KeyPress, KeyRelease, + * ButtonPress, ButtonRelease, and MotionNotify. The extra 2 + * are required as the event types start with "2" (errors and + * replies are 0 & 1). The event type is the index into the + * bits. + * Note: This has been padded to a longword to keep structure aligned + */ +#ifndef VECTORED_EVENTS +#define XETrapCoreEvents (2L+5L) +#else +#define XETrapCoreEvents 128L +#endif +#define XETrapMaxEvent (((SIZEOF(CARD32)+((XETrapCoreEvents-1L) / \ + (BitsInByte*SIZEOF(CARD8))))/SIZEOF(CARD32))*SIZEOF(CARD32)) +typedef CARD8 EventFlags[XETrapMaxEvent]; + +/* This structure is used in a request to specify the types of + * configuration information that should be changed or updated. + */ +typedef struct +{ + CARD8 valid[4L]; /* Bits TRUE indicates data field is used */ + CARD8 data[4L]; /* Bits looked at if corresponding valid bit set */ + ReqFlags req; /* Bits coorespond to core requests */ + EventFlags event; /* Bits correspond to core events */ +} XETrapFlags; + +/* Bit definitions for the above XETrapFlags structure. */ +#define XETrapTimestamp 0L /* hdr timestamps desired */ +#define XETrapCmd 1L /* command key specified */ +#define XETrapCmdKeyMod 2L /* cmd key is a modifier */ +#define XETrapRequest 3L /* output requests array */ +#define XETrapEvent 4L /* future output events array */ +#define XETrapMaxPacket 5L /* Maximum packet length set */ +#define XETrapTransOut 6L /* obsolete */ +#define XETrapStatistics 7L /* collect counts on requests */ +#define XETrapWinXY 8L /* Fill in Window (X,Y) in hdr */ +#define XETrapTransIn 9L /* obsolete */ +#define XETrapCursor 10L /* Trap cursor state changes */ +#define XETrapXInput 11L /* Use XInput extension */ +#define XETrapVectorEvents 12L /* Use Vectored Events (128) */ +#define XETrapColorReplies 13L /* Return replies with Color Req's */ +#define XETrapGrabServer 14L /* Disables client GrabServers */ + +typedef struct /* used by XEConfigRequest */ +{ + XETrapFlags flags; /* Flags to specify what should be chg'd */ + CARD16 max_pkt_size B16; /* Maximum number of bytes in a packet */ + CARD8 cmd_key B8; /* Keyboard command_key (KeyCode) */ +/* + * cmd_key is intentionally *not* defined KeyCode since it's definition is + * ambiguous (int in Intrinsic.h and unsigned char in X.h. + */ + CARD8 pad[1L]; /* pad out to a quadword */ +} XETrapCfg; + +/* These structures are used within the Xtrap request structure for + * the various types of xtrap request + */ +#ifndef _XINPUT +/* (see the definition of XEvent as a reference) */ +typedef struct /* used by XESimulateXEventRequest for synthesizing core evts */ +{ + CARD8 type B8; /* (must be first) as in XEvent */ + CARD8 detail B8; /* Detail keycode/button as in XEvent */ + CARD8 screen B8; /* screen number (0 to n) */ + CARD8 pad B8; /* pad to longword */ + INT16 x B16; /* X & Y coord as in XEvent */ + INT16 y B16; +} XETrapInputReq; +#endif + +/* These are constants that refer to the extension request vector table. + * A request will use these values as minor opcodes. + */ +#define XETrap_Reset 0L /* set to steady state */ +#define XETrap_GetAvailable 1L /* get available funct from ext */ +#define XETrap_Config 2L /* configure extension */ +#define XETrap_StartTrap 3L /* use Trapping */ +#define XETrap_StopTrap 4L /* stop using Trapping */ +#define XETrap_GetCurrent 5L /* get current info from ext */ +#define XETrap_GetStatistics 6L /* get count statistics from ext */ +#ifndef _XINPUT +#define XETrap_SimulateXEvent 7L /* async input simulation */ +#endif +#define XETrap_GetVersion 8L /* Get (Just) Version */ +#define XETrap_GetLastInpTime 9L /* Get Timestamp of last client input */ + +/* The following are formats of a request to the XTRAP + * extension. The data-less XTrap requests all use xXTrapReq + */ +typedef struct +{ + CARD8 reqType B8; + CARD8 minor_opcode B8; + CARD16 length B16; + CARD32 pad B32; /* Maintain quadword alignment */ +} xXTrapReq; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapReq (sizeof(xXTrapReq)) +/* For retrieving version/available info (passes lib-side protocol number) */ +typedef struct +{ + CARD8 reqType B8; + CARD8 minor_opcode B8; + CARD16 length B16; + CARD16 protocol B16; /* The xtrap extension protocol number */ + CARD16 pad B16; /* Maintain quadword alignment */ +} xXTrapGetReq; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapGetReq (sizeof(xXTrapGetReq)) + +typedef struct +{ + CARD8 reqType B8; + CARD8 minor_opcode B8; + CARD16 length B16; + /* + * The follwing is done so that structure padding wont be + * a problem. The request structure contains a shadow for + * the XETrapCfg structure. Since the XETrapCfg also has a + * substructure (XETrapFlags) this structure is also shadowed. + * + * The following are a shadow of the XETrapFlags + * structure. + */ + CARD8 config_flags_valid[4L]; + CARD8 config_flags_data[4L]; + ReqFlags config_flags_req; + EventFlags config_flags_event; + /* End Shadow (XETrapFlags)*/ + CARD16 config_max_pkt_size B16; /* Max number of bytes in a packet */ + CARD8 config_cmd_key B8; /* Keyboard command_key (KeyCode) */ +/* + * cmd_key is intentionally *not* defined KeyCode since it's definition is + * ambiguous (int in Intrinsic.h and unsigned char in X.h. + */ + CARD8 config_pad[1L]; /* pad out to a quadword */ + /* End Shadow (XETrapCfg) */ + CARD32 pad B32; /* Maintain quadword alignment */ +} xXTrapConfigReq; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapConfigReq (sizeof(xXTrapConfigReq)) + +#ifndef _XINPUT +typedef struct +{ + CARD8 reqType B8; + CARD8 minor_opcode B8; + CARD16 length B16; + CARD32 pad B32; /* Maintain quadword alignment */ + XETrapInputReq input; +} xXTrapInputReq; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapInputReq (sizeof(xXTrapInputReq)) +#endif + + +/* The following structures are used by the server extension to send + * information and replies to the client. + */ + +/* header for all X replies */ +typedef struct +{ + CARD8 type B8; + CARD8 detail B8; + CARD16 sequenceNumber B16; + CARD32 length B32; +} XETrapRepHdr; + +/* Structure of Get Available Functionality reply */ +typedef struct +{ + CARD32 pf_ident B32; /* Contains constant identifying the platform */ + CARD16 xtrap_release B16; /* The xtrap extension release number */ + CARD16 xtrap_version B16; /* The xtrap extension version number */ + CARD16 xtrap_revision B16; /* The xtrap extension revision number */ + CARD16 max_pkt_size B16; /* Maximum number of bytes in a packet */ + CARD8 valid[4]; /* What specific configuration flags are valid */ + CARD32 major_opcode B32; /* The major opcode identifying xtrap */ + CARD32 event_base B32; /* The event value we start at */ + CARD32 pad0 B32; /* obsolete field */ + CARD16 pad1 B16, pad2 B16, pad3 B16; /* obsolete field */ + CARD16 xtrap_protocol B16; /* The xtrap extension protocol number */ + INT16 cur_x B16; /* Current X & Y coord for relative motion */ + INT16 cur_y B16; +} XETrapGetAvailRep; + +typedef struct +{ + CARD16 xtrap_release B16; /* The xtrap extension release number */ + CARD16 xtrap_version B16; /* The xtrap extension version number */ + CARD16 xtrap_revision B16; /* The xtrap extension revision number */ + CARD16 xtrap_protocol B16; /* The xtrap extension protocol number */ +} XETrapGetVersRep; + +typedef struct +{ + CARD32 last_time B32; /* Timestamp of last input time */ +} XETrapGetLastInpTimeRep; + +/* Structure of Get Current Configuration Information reply */ +typedef struct +{ + CARD8 state_flags[2]; /* Miscelaneous flags, see below #define's */ + CARD16 pad0 B16; /* Assure quadword alignment */ + XETrapCfg config; /* Current Config information */ + CARD32 pad1 B32; +} XETrapGetCurRep; + +/* Mask definitions for the above flags. */ +#define XETrapTrapActive 0L /* If sending/receiving between client/ext */ + +/* Structure of Get Statistics Information reply */ +typedef struct +{ + CARD32 requests[256L]; /* Array containing request counts if trapped */ + CARD32 events[XETrapCoreEvents]; /* Array containing event stats */ +#ifndef VECTORED_EVENTS + CARD32 pad B32; /* Pad out to a quadword */ +#endif +} XETrapGetStatsRep; + +#define PF_Other 0L /* server not one of the below */ +#define PF_Apollo 10L /* server on Apollo system */ +#define PF_ATT 20L /* server on AT&T system */ +#define PF_Cray1 30L /* server on Cray 1 system */ +#define PF_Cray2 31L /* server on Cray 2 system */ +#define PF_DECUltrix 40L /* server on DEC ULTRIX system */ +#define PF_DECVMS 41L /* server on DEC VMS system */ +#define PF_DECVT1000 42L /* server on DEC-VT1000-terminal */ +#define PF_DECXTerm 43L /* server on DEC-X-terminal */ +#define PF_DECELN 44L /* server on DEC VAXELN X terminal */ +#define PF_DECOSF1 45L /* server on DEC's OSF/1 system */ +#define PF_HP9000s800 50L /* server on HP 9000/800 system */ +#define PF_HP9000s300 51L /* server on HP 9000/300 system */ +#define PF_IBMAT 60L /* server on IBM/AT system */ +#define PF_IBMRT 61L /* server on IBM/RT system */ +#define PF_IBMPS2 62L /* server on IBM/PS2 system */ +#define PF_IBMRS 63L /* server on IBM/RS system */ +#define PF_MacII 70L /* server on Mac II system */ +#define PF_Pegasus 80L /* server on Tektronix Pegasus system */ +#define PF_SGI 90L /* server on Silicon Graphcis system */ +#define PF_Sony 100L /* server on Sony system */ +#define PF_Sun3 110L /* server on Sun 3 system */ +#define PF_Sun386i 111L /* server on Sun 386i system */ +#define PF_SunSparc 112L /* server on Sun Sparc system */ + +/* reply sent back by XETrapGetAvailable request */ +typedef struct +{ + XETrapRepHdr hdr; + XETrapGetAvailRep data; +} xXTrapGetAvailReply; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapGetAvailReply sizeof(xXTrapGetAvailReply) + +/* reply sent back by XETrapGetVersion request */ +typedef struct +{ + XETrapRepHdr hdr; + XETrapGetVersRep data; + CARD32 pad0 B32; /* pad out to 32 bytes */ + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; +} xXTrapGetVersReply; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapGetVersReply sizeof(xXTrapGetVersReply) + +/* reply sent back by XETrapGetLastInpTime request */ +typedef struct +{ + XETrapRepHdr hdr; + /* + * The following is a shadow of the XETrapGetLastInpTimeRep + * structure. This is done to avoid structure padding. + */ + CARD32 data_last_time B32; /* Timestamp of last input time */ + CARD32 pad0 B32; /* pad out to 32 bytes */ + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xXTrapGetLITimReply; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapGetLITimReply sizeof(xXTrapGetLITimReply) + +/* reply sent back by XETrapGetCurrent request */ +typedef struct +{ + XETrapRepHdr hdr; + /* + * The following is a shadow of the XETrapGetCurRep + * structure. This is done to avoid structure padding. + * Since the XETrapGetCurRep structure contains a sub-structure + * (XETrapCfg) there is a shadow for that as well.*/ + CARD8 data_state_flags[2]; /* Misc flags, see below #define's */ + CARD16 data_pad0 B16; /* Assure quadword alignment */ + /* XETrapCfg Shadow Starts */ + CARD8 data_config_flags_valid[4L]; + CARD8 data_config_flags_data[4L]; + ReqFlags data_config_flags_req; + EventFlags data_config_flags_event; + CARD16 data_config_max_pkt_size B16; /* Max num of bytes in a pkt */ + CARD8 data_config_cmd_key B8; /* Keyboard cmd_key (KeyCode) */ +/* + * cmd_key is intentionally *not* defined KeyCode since it's definition is + * ambiguous (int in Intrinsic.h and unsigned char in X.h. + */ + CARD8 data_config_pad[1L]; /* pad out to a quadword */ + /* End Shadow (XETrapCfg) */ + CARD32 pad1 B32; +} xXTrapGetCurReply; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_xXTrapGetCurReply sizeof(xXTrapGetCurReply) + +/* reply sent back by XETrapGetStatistics request */ +/* Note: + * The following does *not* use the standard XETrapRepHdr, but instead + * one which is padded out to 32-bytes. This is because Cray's have a problem + * reading arrays of CARD32s without using the _Read32 macro (see XERqsts.c). + * This requires that none of the data be in the _Reply area. + */ +typedef struct +{ + CARD8 type B8; + CARD8 detail B8; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 pad0 B32; + CARD32 pad1 B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + XETrapGetStatsRep data; +} xXTrapGetStatsReply; +#define sz_xXTrapGetStatsReply 1088 + +typedef struct /* the XTrap Output header (for output from ext to client) */ +{ /* this must be quadword aligned for portability */ + CARD32 count B32; /* Length including this header */ + CARD32 timestamp B32; /* timestamp if desired */ + CARD8 type B8; /* event id, request id, special id */ + CARD8 screen B8; /* screen number (0 to n) */ + INT16 win_x B16; /* X coord of drawable, if any */ + INT16 win_y B16; /* X coord of drawable, if any */ + CARD16 client B16; /* to distinguish requests */ +} XETrapHeader; +/* the following works because all fields are defined as bit (Bnn) fields */ +#define sz_XETrapHeader sizeof(XETrapHeader) + +#define XETrapHeaderIsEvent(phdr) (XETrapGetHeaderType(phdr) == 0x1L) +#define XETrapHeaderIsRequest(phdr) (XETrapGetHeaderType(phdr) == 0x2L) +#define XETrapHeaderIsSpecial(phdr) (XETrapGetHeaderType(phdr) == 0x3L) +#define XETrapHeaderIsCursor(phdr) (XETrapGetHeaderType(phdr) == 0x4L) +#define XETrapHeaderIsReply(phdr) (XETrapGetHeaderType(phdr) == 0x5L) + +/* Define a structure used for reading/writing datum of type XTrap */ +typedef struct +{ + XETrapHeader hdr; + union + { + xEvent event; + xResourceReq req; + xGenericReply reply; + /* special? */ + } u; +} XETrapDatum; + +/* this doesn't get picked up for VMS server builds (different Xproto.h) */ +#ifndef sz_xEvent +#define sz_xEvent 32 +#endif +/* Minimum size of a packet from the server extension */ +#define XETrapMinPktSize (SIZEOF(XETrapHeader) + SIZEOF(xEvent)) + +/* Constants used with the XLIB transport */ +#define XETrapDataStart 0L /* Used in the detail field */ +#define XETrapDataContinued 1L /* Used in the detail field */ +#define XETrapDataLast 2L /* Used in the detail field */ +#define XETrapData 0L /* Used in the type field */ +#define XETrapNumberEvents 1L +/* This is the representation on the wire(see also XLib.h) */ +#define sz_EventData 24L /* 32 bytes - type, detail, seq, index */ +typedef struct { + CARD8 type B8; + CARD8 detail B8; + CARD16 sequenceNumber B16; + CARD32 idx B32; + CARD8 data[sz_EventData]; +} xETrapDataEvent; + +/* Error message indexes added to X for extension */ +#define BadIO 2L /* Can't read/write */ +#define BadStatistics 4L /* Stat's not avail. */ +#define BadDevices 5L /* Devices not vectored */ +#define BadScreen 7L /* Can't send event to given screen */ +#define BadSwapReq 8L /* Can't send swapped extension requests */ +#define XETrapNumErrors (BadSwapReq + 1) + + +#define XEKeyIsClear 0 +#define XEKeyIsEcho 1 +#define XEKeyIsOther 2 + +#endif /* __XTRAPDI__ */ diff --git a/xie/build/dec/xtraplib.h b/xie/build/dec/xtraplib.h new file mode 100644 index 0000000..2cc58aa --- /dev/null +++ b/xie/build/dec/xtraplib.h @@ -0,0 +1,158 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +#ifndef __XTRAPLIB__ +#define __XTRAPLIB__ "@(#)xtraplib.h 1.15 - 90/09/18 " +/* RCSID = $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/xtraplib.h,v 1.1.2.4 92/06/12 09:33:20 Jim_Ludwig Exp $" */ + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This header file describes all the structures/constants required + * for interfacing with the client toolkit *except* the common + * client/extension definitions in xtrapdi.h. Namely, *no* extension- + * only information or client/extension information can be found here. + */ +#ifdef SMT +#define NEED_EVENTS +#define NEED_REPLIES +#endif +#include "Xlib.h" +#include "Intrinsic.h" +#include "xtrapdi.h" +#include "bits.h" +#include "xemacros.h" + +typedef struct /* Callback structure */ +{ + void_function func; + BYTE *data; +} XETrapCB; + +/* Data structure for setting trap context */ +typedef struct +{ + CARD8 tc_flags[2L]; /* Toolkit-side specific flags */ + XETrapCfg v; /* XTrap configuration values */ + XETrapCB *req_cb; /* Pointer to Request Callbacks */ + XETrapCB *evt_cb; /* Pointer to Event Callbacks (starting at 2) */ + CARD32 last_time B32; /* Last (delta) timestamp */ +} XETCValues; + + /* bits 0 thru 6 are formerly "families" (now obsolete) */ +#define XETCDeltaTimes 7 +#define XETCTrapActive 8 + /* bits 9 thru 15 are reserved for future expansion */ + +/* Values bit masks (used when determining what's dirty */ +#define TCStatistics (1L<<0L) +#define TCRequests (1L<<1L) +#define TCEvents (1L<<2L) +#define TCMaxPacket (1L<<3L) +#define TCCmdKey (1L<<4L) +#define TCTimeStamps (1L<<5L) +#define TCWinXY (1L<<6L) +#define TCXInput (1L<<7L) +#define TCReqCBs (1L<<8L) +#define TCEvtCBs (1L<<9L) +#define TCCursor (1L<<10L) +#define TCColorReplies (1L<<11L) +#define TCGrabServer (1L<<12L) + +/* Trap Context structure for maintaining XTrap State for client */ +typedef struct _XETC +{ + struct _XETC *next; /* Ptr to next linked-listed TC */ + Display *dpy; /* Display ptr of current TC */ + INT32 eventBase /*B32*/; /* First event value */ + INT32 errorBase /*B32*/; /* First error value */ + INT32 extOpcode /*B32*/; /* Major opcode of the extension */ + BYTE *xbuff; /* Pointer to buffer for XLib Communications */ + CARD16 xmax_size /*B16*/; /* Max Size of a request */ + XExtData *ext_data; /* hook for extension to hang data */ + /* + * The following are initialized with the client-side version number + * However, when either a GetAvailable or GetVersion reply is received, + * these values are updated with the *oldest* version numbers. + */ + CARD16 release /*B16*/; /* The extension release number */ + CARD16 version /*B16*/; /* The xtrap extension version number */ + CARD16 revision /*B16*/; /* The xtrap extension revision number */ + CARD16 protocol /*B16*/; /* The xtrap extension protocol number */ + unsigned dirty /*B32*/; /* cache dirty bits */ + XETCValues values; /* shadow structure of values */ + Boolean (*eventFunc[XETrapNumberEvents])(); +} XETC; + +/* This is the representation we use in the library code for XLib transport */ +typedef struct { + int type; + unsigned long serial; + Bool synthetic; + Display *display; + int detail; + unsigned long idx; + unsigned char data[sz_EventData]; +} XETrapDataEvent; + +#endif /* __XTRAPLIB__ */ diff --git a/xie/build/dec/xtraplibp.h b/xie/build/dec/xtraplibp.h new file mode 100644 index 0000000..d2e7b57 --- /dev/null +++ b/xie/build/dec/xtraplibp.h @@ -0,0 +1,192 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +/* BuildSystemHeader added automatically */ +/* $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/xtraplibp.h,v 1.1.2.3 92/04/27 12:33:25 Leela_Obilichetti Exp $ */ + +#ifndef __XTRAPLIBP__ +#define __XTRAPLIBP__ + + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This header file contains the function prototypes for client/toolkit + * routines sorted by module (globally defined routines *only*). + */ +#if (__STDC__ || defined vaxc) +#define FUNCTION_PROTOS +#endif +#ifdef FUNCTION_PROTOS +# define P(s) s +#else +# define P(s) () +#endif + +/* XETrapContext.c */ +XETC *XECreateTC P((Display *dpy , CARD32 valuemask , XETCValues *value )); +int XEChangeTC P((XETC *tc , CARD32 mask , XETCValues *values )); +void XEFreeTC P((XETC *tc )); +int XETrapSetMaxPacket P((XETC *tc , Bool set_flag , CARD16 size )); +int XETrapSetCommandKey P((XETC *tc , Bool set_flag , KeySym cmd_key , + Bool mod_flag )); +int XETrapSetTimestamps P((XETC *tc , Bool set_flag , Bool delta_flag )); +int XETrapSetWinXY P((XETC *tc , Bool set_flag )); +int XETrapSetCursor P((XETC *tc , Bool set_flag )); +int XETrapSetXInput P((XETC *tc , Bool set_flag )); +int XETrapSetColorReplies P((XETC *tc , Bool set_flag )); +int XETrapSetGrabServer P((XETC *tc , Bool set_flag )); +int XETrapSetStatistics P((XETC *tc , Bool set_flag )); +int XETrapSetRequests P((XETC *tc , Bool set_flag , ReqFlags requests )); +int XETrapSetEvents P((XETC *tc , Bool set_flag , EventFlags events )); +Bool XESetCmdGateState P((XETC *tc , CARD8 type, Bool *gate_closed , + CARD8 *next_key , Bool *key_ignore )); + +/* XETrapRequests.c */ +int XEFlushConfig P((XETC *tc )); +int XEResetRequest P((XETC *tc )); +int XEGetVersionRequest P((XETC *tc , XETrapGetVersRep *ret )); +int XEGetLastInpTimeRequest P((XETC *tc , XETrapGetLastInpTimeRep *ret )); +int XEGetAvailableRequest P((XETC *tc , XETrapGetAvailRep *ret )); +int XEStartTrapRequest P((XETC *tc )); +int XEStopTrapRequest P((XETC *tc )); +int XESimulateXEventRequest P((XETC *tc , CARD8 type , CARD8 detail , + CARD16 x , CARD16 y , CARD8 screen )); +int XEGetCurrentRequest P((XETC *tc , XETrapGetCurRep *ret )); +int XEGetStatisticsRequest P((XETC *tc , XETrapGetStatsRep *ret )); + +/* XECallbacks.c */ +int XEAddRequestCB P((XETC *tc , CARD8 req , void_function func , BYTE *data )); +int XEAddRequestCBs P((XETC *tc , ReqFlags req_flags , void_function func , + BYTE *data )); +int XEAddEventCB P((XETC *tc , CARD8 evt , void_function func , BYTE *data )); +int XEAddEventCBs P((XETC *tc , EventFlags evt_flags , void_function func , + BYTE *data )); + +/* XETrapDispatch.c */ +void XETrapDispatchXLib P((XETrapDataEvent *event , XETC *tc)); + +/* XEWrappers.c */ +Boolean XETrapDispatchEvent P((XEvent *pevent , XETC *tc )); +XtInputMask XETrapAppPending P((XtAppContext app)); +void XETrapAppMainLoop P((XtAppContext app , XETC *tc )); +int XETrapAppWhileLoop P((XtAppContext app , XETC *tc , Bool *done )); +#ifdef X11R3 +Widget XtAppInitialize P((XtAppContext *app , String application_class , + XrmOptionDescRec *options , Cardinal num_options , Cardinal *argc_in_out , + String *argv_in_out , String *fallback_resources , + ArgList args_in , Cardinal num_args_in)); +#endif +int XETrapWaitForSomething P((XtAppContext app )); + +/* XEPrintInfo.c */ +void XEPrintRelease P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintPlatform P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintAvailFlags P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintAvailPktSz P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintStateFlags P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintMajOpcode P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintCurXY P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintTkFlags P((FILE *ofp , XETC *tc )); +void XEPrintLastTime P((FILE *ofp , XETC *tc )); +void XEPrintCfgFlags P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintRequests P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintEvents P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintCurPktSz P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintCmdKey P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintEvtStats P((FILE *ofp , XETrapGetStatsRep *pstats )); +void XEPrintReqStats P((FILE *ofp , XETrapGetStatsRep *pstats )); +void XEPrintAvail P((FILE *ofp , XETrapGetAvailRep *pavail )); +void XEPrintTkState P((FILE *ofp , XETC *tc )); +void XEPrintCurrent P((FILE *ofp , XETrapGetCurRep *pcur )); +void XEPrintStatistics P((FILE *ofp , XETrapGetStatsRep *pstats )); + +/* XEStringMapping.c */ +INT16 XEEventStringToID P((char *string )); +INT16 XERequestStringToID P((char *string )); +CARD32 XEPlatformStringToID P((char *string )); +char *XEEventIDToString P((CARD8 id )); +char *XERequestIDToExtString P((register CARD8 id )); +char *XERequestIDToString P((CARD8 id )); +char *XEPlatformIDToString P((CARD32 id )); + +/* getopt.c */ +int *XEgetopterr(); +int *XEgetoptind(); +int *XEgetoptopt(); +char **XEgetoptarg(); +int getopt P((int argc , char **argv , char *optstring )); + +/* sleep.c */ +void usleep P((unsigned long usecs )); + +/* XEKeybCtrl.c */ +int XEEnableCtrlKeys P((void (*rtn)() )); +int XEClearCtrlKeys P((void )); +int XEEnableCtrlC P((void (*rtn)() )); +int XEEnableCtrlY P((void (*rtn)() )); +int XEDeclExitHndlr P((void (*rtn)() )); + +#undef P + +#endif /* __XTRAPLIBP__ */ diff --git a/xie/build/dec/xtrapproto.h b/xie/build/dec/xtrapproto.h new file mode 100644 index 0000000..70b8bae --- /dev/null +++ b/xie/build/dec/xtrapproto.h @@ -0,0 +1,210 @@ +/* + * ***************************************************************** + * * * + * * Copyright (c) Digital Equipment Corporation, 1991, 1994 * + * * * + * * All Rights Reserved. Unpublished rights reserved under * + * * the copyright laws of the United States. * + * * * + * * The software contained on this media is proprietary to * + * * and embodies the confidential technology of Digital * + * * Equipment Corporation. Possession, use, duplication or * + * * dissemination of the software and media is authorized only * + * * pursuant to a valid written license from Digital Equipment * + * * Corporation. * + * * * + * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * + * * by the U.S. Government is subject to restrictions as set * + * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * + * * or in FAR 52.227-19, as applicable. * + * * * + * ***************************************************************** + */ +/* + * HISTORY + */ +/* +************************************************************************** +** DIGITAL EQUIPMENT CORPORATION ** +** CONFIDENTIAL ** +** NOT FOR MODIFICATION OR REDISTRIBUTION IN ANY MANNER WHATSOEVER ** +************************************************************************** +*/ +#ifndef __XTRAPPROTO__ +#define __XTRAPPROTO__ +/* RCSID = $Header: /alphabits/u3/x11/ode/rcs/x11/src/extensions/include/xtrapproto.h,v 1.1.2.3 92/04/27 12:33:34 Leela_Obilichetti Exp $" */ + +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + * DESCRIPTION: + * This header file contains the function prototypes for extension + * routines sorted by module (globally defined routines *only*). + */ +#if (__STDC__ || defined vaxc) +#define FUNCTION_PROTOS +#endif +#ifdef FUNCTION_PROTOS +# define P(s) s +#else +# define P(s) () +#endif +#ifndef Bool +# define Bool int +#endif +/* xtrapdi.c */ +void XETrapDestroyEnv P((pointer value , XID id )); +void XETrapCloseDown P((void )); +Bool XETrapRedirectDevices P((void )); +void DEC_XTRAPInit P((void )); +int XETrapCreateEnv P((ClientPtr client )); +int XETrapDispatch P((ClientPtr client )); +int sXETrapDispatch P((ClientPtr client )); +int XETrapReset P((xXTrapReq *request , ClientPtr client )); +int XETrapGetAvailable P((xXTrapGetReq *request , ClientPtr client )); +int XETrapGetCurrent P((xXTrapReq *request , ClientPtr client )); +int XETrapGetStatistics P((xXTrapReq *request , ClientPtr client )); +int XETrapConfig P((xXTrapConfigReq *request , ClientPtr client )); +int XETrapStartTrap P((xXTrapReq *request , ClientPtr client )); +int XETrapStopTrap P((xXTrapReq *request , ClientPtr client )); +int XETrapGetVersion P((xXTrapGetReq *request , ClientPtr client )); +int XETrapGetLastInpTime P((xXTrapReq *request , ClientPtr client )); +int XETrapRequestVector P((ClientPtr client )); +int XETrapKeyboard P((xEvent *x_event , DevicePtr keybd , int count )); +#ifndef VECTORED_EVENTS +int XETrapPointer P((xEvent *x_event , DevicePtr ptrdev , int count )); +#else +int XETrapEventVector P((ClientPtr client , xEvent *x_event )); +#endif +void XETrapStampAndMail P((xEvent *x_event )); +void sReplyXTrapDispatch P((ClientPtr client , int size , char *reply )); +int XETrapWriteXLib P((XETrapEnv *penv , BYTE *data , CARD32 nbytes )); + +/* xtrapddmi.c */ +void XETrapPlatformSetup P((void )); +int XETrapSimulateXEvent P((xXTrapInputReq *request , ClientPtr client )); + +/* /usr/users1/miller/golly/work/xtrap/xtrapdiswap.c */ +int sXETrapReset P((xXTrapReq *request , ClientPtr client )); +int sXETrapGetAvailable P((xXTrapGetReq *request , ClientPtr client )); +int sXETrapConfig P((xXTrapConfigReq *request , ClientPtr client )); +int sXETrapStartTrap P((xXTrapReq *request , ClientPtr client )); +int sXETrapStopTrap P((xXTrapReq *request , ClientPtr client )); +int sXETrapGetCurrent P((xXTrapReq *request , ClientPtr client )); +int sXETrapGetStatistics P((xXTrapReq *request , ClientPtr client )); +int sXETrapSimulateXEvent P((xXTrapInputReq *request , ClientPtr client )); +int sXETrapGetVersion P((xXTrapGetReq *request , ClientPtr client )); +int sXETrapGetLastInpTime P((xXTrapReq *request , ClientPtr client )); +void sReplyXETrapGetAvail P((ClientPtr client , int size , char *reply )); +void sReplyXETrapGetVers P((ClientPtr client , int size , char *reply )); +void sReplyXETrapGetLITim P((ClientPtr client , int size , char *reply )); +void sReplyXETrapGetCur P((ClientPtr client , int size , char *reply )); +void sReplyXETrapGetStats P((ClientPtr client , int size , char *reply )); +void sXETrapHeader P((XETrapHeader *hdr )); +void XETSwSimpleReq P((xReq *data )); +void XETSwResourceReq P((xResourceReq *data )); +void XETSwCreateWindow P((xCreateWindowReq *data )); +void XETSwChangeWindowAttributes P((xChangeWindowAttributesReq *data )); +void XETSwReparentWindow P((xReparentWindowReq *data )); +void XETSwConfigureWindow P((xConfigureWindowReq *data )); +void XETSwInternAtom P((xInternAtomReq *data )); +void XETSwChangeProperty P((xChangePropertyReq *data )); +void XETSwDeleteProperty P((xDeletePropertyReq *data )); +void XETSwGetProperty P((xGetPropertyReq *data )); +void XETSwSetSelectionOwner P((xSetSelectionOwnerReq *data )); +void XETSwConvertSelection P((xConvertSelectionReq *data )); +void XETSwSendEvent P((xSendEventReq *data )); +void XETSwGrabPointer P((xGrabPointerReq *data )); +void XETSwGrabButton P((xGrabButtonReq *data )); +void XETSwUngrabButton P((xUngrabButtonReq *data )); +void XETSwChangeActivePointerGrab P((xChangeActivePointerGrabReq *data )); +void XETSwGrabKeyboard P((xGrabKeyboardReq *data )); +void XETSwGrabKey P((xGrabKeyReq *data )); +void XETSwUngrabKey P((xUngrabKeyReq *data )); +void XETSwGetMotionEvents P((xGetMotionEventsReq *data )); +void XETSwTranslateCoords P((xTranslateCoordsReq *data )); +void XETSwWarpPointer P((xWarpPointerReq *data )); +void XETSwSetInputFocus P((xSetInputFocusReq *data )); +void XETSwOpenFont P((xOpenFontReq *data )); +void XETSwListFonts P((xListFontsReq *data )); +void XETSwListFontsWithInfo P((xListFontsWithInfoReq *data )); +void XETSwSetFontPath P((xSetFontPathReq *data )); +void XETSwCreatePixmap P((xCreatePixmapReq *data )); +void XETSwCreateGC P((xCreateGCReq *data )); +void XETSwChangeGC P((xChangeGCReq *data )); +void XETSwCopyGC P((xCopyGCReq *data )); +void XETSwSetDashes P((xSetDashesReq *data )); +void XETSwSetClipRectangles P((xSetClipRectanglesReq *data )); +void XETSwClearToBackground P((xClearAreaReq *data )); +void XETSwCopyArea P((xCopyAreaReq *data )); +void XETSwCopyPlane P((xCopyPlaneReq *data )); +void XETSwPoly P((xPolyPointReq *data )); +void XETSwFillPoly P((xFillPolyReq *data )); +void XETSwPutImage P((xPutImageReq *data )); +void XETSwGetImage P((xGetImageReq *data )); +void XETSwPolyText P((xPolyTextReq *data )); +void XETSwImageText P((xImageTextReq *data )); +void XETSwCreateColormap P((xCreateColormapReq *data )); +void XETSwCopyColormapAndFree P((xCopyColormapAndFreeReq *data )); +void XETSwAllocColor P((xAllocColorReq *data )); +void XETSwAllocNamedColor P((xAllocNamedColorReq *data )); +void XETSwAllocColorCells P((xAllocColorCellsReq *data )); +void XETSwAllocColorPlanes P((xAllocColorPlanesReq *data )); +void XETSwFreeColors P((xFreeColorsReq *data )); +void XETSwStoreColors P((xStoreColorsReq *data )); +void XETSwStoreNamedColor P((xStoreNamedColorReq *data )); +void XETSwQueryColors P((xQueryColorsReq *data )); +void XETSwLookupColor P((xLookupColorReq *data )); +void XETSwCreateCursor P((xCreateCursorReq *data )); +void XETSwCreateGlyphCursor P((xCreateGlyphCursorReq *data )); +void XETSwRecolorCursor P((xRecolorCursorReq *data )); +void XETSwQueryBestSize P((xQueryBestSizeReq *data )); +void XETSwQueryExtension P((xQueryExtensionReq *data )); +void XETSwChangeKeyboardMapping P((xChangeKeyboardMappingReq *data )); +void XETSwChangeKeyboardControl P((xChangeKeyboardControlReq *data )); +void XETSwChangePointerControl P((xChangePointerControlReq *data )); +void XETSwSetScreenSaver P((xSetScreenSaverReq *data )); +void XETSwChangeHosts P((xChangeHostsReq *data )); +void XETSwRotateProperties P((xRotatePropertiesReq *data )); +void XETSwNoOperation P((xReq *data )); +#ifdef vms +void SwapLongs P((long *list , unsigned long count )); +void SwapShorts P((short *list , unsigned long count )); +int SwapColorItem P((xColorItem *pItem )); +#endif /* vms */ +void NotImplemented P((void )); +int ProcBadRequest P((ClientPtr client )); + +#undef P + +#endif /* __XTRAPPROTO__ */ diff --git a/xie/build/elements.o b/xie/build/elements.o new file mode 100644 index 0000000000000000000000000000000000000000..12ac743115a6e301af8d410337ddf807e7263cd4 GIT binary patch literal 12496 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 M?IF=QfA#tQ2lxrrN&o-= literal 0 HcmV?d00001 diff --git a/xie/build/errors.o b/xie/build/errors.o new file mode 100644 index 0000000000000000000000000000000000000000..1dd25bfd8689b5328be745f64f0e62ac27b8a11a GIT binary patch literal 1416 zcmbtT&ubG=5S~q|i8f`^7_d;m2!but$0lG2vdEH}Z9wrL2tkl`8+Ti=`N8Iev^}Vx zh)WUtGxQ%&Z?^QH9y|%21rOp$J?X8^?7p{IA3;P1-p@ zV3**hC!^{n?o0$Q7 zY#o^C!Nr$Uz5f2=vjztJ?$d|;wEm)62<%F@v#+1LN9A8dw9h|YLtcaaC-iTSZ{7bn z$uE_5k@kRSVCMO}d5rIyQ~fVAOMwQUz7-s5I|At$a4zs6y~HKQ}9UwN0bDT@Wl0$w@5|SXsDqKS>jqA6w$J`J^buN0>q}{-T zsH%SDFZB)7(mk?pB`qTgP79Fk70oI8OMFyslF(fvTM3^4bT8Aut3~tLVpxbVAbQl~7IxNQ_y{%DYU!!00$(9t!*>VaFh}v?lC5^(au#E-nX*8B0 zjPJ8^0z^g5Mhr&+?=JFtDX|2HmVS^f+j0h!0JKNcUzh)E+^p%{ zp8dLvDP)X5x5x(_7aejS&h62ifIA@LquuFzjcp#U+ZXB9bikHzzSF^$6w29o7;Ej| z7-tPf9KsPW+B}RF=iHJ2RQ7SMtSJ~Yy1=h~0@oqVAcx2`ei4N|8r#5zUH*e!+>(d8 z&AB@+w;XpnOS*SQrY0xv$8S#MpWcd(O^D;-SbRJ&K9NX{C7h`e5(FKGh0hGaNPq}! z#Q0kj*#10VC=pi?Vf6_S8ew51G%)xcg2RB1GT#fP5#v0sJQzGDM`|9d$m}N5$fGk` zX8Lam>kX10zk9{>op#gp4uN^egY%lNFr3%M>%PnI6LtjmKVtZEHZWel%J3tGpZ1`x zs8y>jmdRXkNu4xw!%XYCQO+XlU>UV+%&U3BTGEg8oqo$um>MZ+>Q-N+bK7VT6XcYX=nv%A=qV1Fna=l$he_!Q^;&-!rQKhNXm@cxNd zZ&oa&1llrPy~r&~ZCFH{S1g5yrFxx+WusETafnsJQbl-{cj}f>e#!O=)n&0}8a36l znnW~JT@lsAIn7imIQ0LN5y;0Y>-U|LV*BgZm`B1M8_lb*FuxBs9?^Vx+{K;;-;x_( z4Z`}@{M(R=XC`2Ih4b_ODED!GuJ3_^+dKyKn={s*h1daD{_uAU@YjXCdgU2xkl&xb z&43MWFxdWl{Ep!FD+S9d4Fo|Nt|It7!#a6>l;OR&(UoKu(q?h^{Xoc{kLUXD4pV+H Z@HK8c;-B>}_eNs*#0YSgA3OInJxDEPTeC#IMtF}sm!g$k)3 z%UV$I59qEE-t4gEsnrst(-%T?y6Gyl za?xfwotp~&32{!DFfx4|uCeMs4mh*qA5KcP!C7)g*!Mhix! zaEbMTQ+H6QuX&MIv3}6Y-?F^8^^+>UzqC{qww43bo>1$mW}&JXwf&WaE#)_04TH7( z9@;@e`Gd2bXJ?sUq^n_nX6GP<>h@&FQM0}Sdm`qrS#Qtqz2a6I?APq1)`CnI!F^M! zE81L}pnU^oD~E;iwdO>w+PqfevroY&UYfgVc`({~B~n3BI+sxSm?0$(t&*N&$2!#3 zp8lcTYP?-*)8cAdtgSt^KORHJCSVnK6)^Y^A5oqmChw5qT5kaxl5+h7QN}~cwhe2V z?}Kv`uoiA1L`Qi%peFD6`YKI*xBbJ_q0xw1AO#xztnAiZ>7nXT5=47 zDTj8TBlzeJgetx(RZN0C+(itC+lB(_AQ&)a20@@WJ|OpbUKJOO30j94d|zy2^)F3f z*@}DE?7;b60ow{3T6SB~BA}svQ6PNJpzjlS2pa(6`vBPwjQ$s0cvj#~1kU#d7|E0v z)6(ShDC-98Bui)WqgTqz;06f~WD8~?lPmO;^kPdiJx6teZHm zZuf)$+sToYg8LUTE&69 p#s$!NV1(T9YXuIXp2YpRQID>e^(L^p&mKd<;zG-RnM~t8t3U2dj6wha literal 0 HcmV?d00001 diff --git a/xie/build/ieee.o b/xie/build/ieee.o new file mode 100644 index 0000000000000000000000000000000000000000..2e120ae72a1c190cbfc7dea1a8e5ae4d128d43af GIT binary patch literal 1232 zcmbVL-AV#M6h5n#R)!W`M0T-VRZxQpNpul{m;@CO1rmgqM`j0f7NRf%)!6&n zXY9OJjXm^Up^(e%=xc?evvoa{VQH4q)5&xuxt&VNN+Aq%91}P&4+5aQ5GTuP0#6}F zw%|I@?oUAL#I-~;9C^ZI;+MtRtnhz1svm-nuTeQculsN{g5kW6_j)uq=d1#yVuR<* z)*ZK;Q*%F`&kLz8d;mQS&zRk9Iz}0o?O3j_%gEs!2iTS27{JQ54Xk1|o4kcw%XB!y zW7@PGqjD{9t#!-Vmf6PEU0@c!F&M9xs+Q5@UbnG>1S;vQCY1_VfxUAOIIiTaASQiK z;SUuoA?5mQ6#Yqi@fBGWk(f^bc`O+PWjV=m;{x906>@WFIy-Cui3GH$)15Bf* iJ5u#jSG_xuBt`!v0zMP8$IM|gN?#X=H80Z*RQ)$#MM}B= literal 0 HcmV?d00001 diff --git a/xie/build/include/X11/extensions/XIE.h b/xie/build/include/X11/extensions/XIE.h new file mode 100644 index 0000000..f426db3 --- /dev/null +++ b/xie/build/include/X11/extensions/XIE.h @@ -0,0 +1,430 @@ +/* $XConsortium: XIE.h,v 1.5 94/04/17 20:11:11 mor Exp $ */ +/****************************************************************************** + + +Copyright (c) 1993, 1994 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + + + NOTICE + +This software is being provided by AGE Logic, Inc. under the +following license. By obtaining, using and/or copying this software, +you agree that you have read, understood, and will comply with these +terms and conditions: + + Permission to use, copy, modify, distribute and sell this + software and its documentation for any purpose and without + fee or royalty and to grant others any or all rights granted + herein is hereby granted, provided that you agree to comply + with the following copyright notice and statements, including + the disclaimer, and that the same appears on all copies and + derivative works of the software and documentation you make. + + "Copyright 1993, 1994 by AGE Logic, Inc." + + THIS SOFTWARE IS PROVIDED "AS IS". AGE LOGIC MAKES NO + REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. By way of + example, but not limitation, AGE LOGIC MAKE NO + REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE SOFTWARE DOES NOT + INFRINGE THIRD-PARTY PROPRIETARY RIGHTS. AGE LOGIC + SHALL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE. IN NO + EVENT SHALL EITHER PARTY BE LIABLE FOR ANY INDIRECT, + INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS + OF PROFITS, REVENUE, DATA OR USE, INCURRED BY EITHER PARTY OR + ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT OR + BASED ON A WARRANTY, EVEN IF AGE LOGIC LICENSEES + HEREUNDER HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + + The name of AGE Logic, Inc. may not be used in + advertising or publicity pertaining to this software without + specific, written prior permission from AGE Logic. + + Title to this software shall at all times remain with AGE + Logic, Inc. + +******************************************************************************/ + +#ifndef _XIE_H_ +#define _XIE_H_ + + +/* Extension Name and version number */ + +#define xieExtName "XIE" + +#define xieMajorVersion 5 +#define xieMinorVersion 0 +#define xieEarliestMinorVersion 0 +#define xieLatestMinorVersion 0 + + +/* ServiceClass */ + +#ifdef XIE_DIS +#define XIE_FULL 0 +#else +#define XIE_FULL 1 +#endif + +#define xieValFull 1 +#define xieValDIS 2 + + +/* Limits */ + +#define xieValMaxBands 3 + + +/* Alignment */ + +#define xieValAlignable 1 +#define xieValArbitrary 2 + + +/* ArithmeticOp */ + +#define xieValAdd 1 +#define xieValSub 2 +#define xieValSubRev 3 +#define xieValMul 4 +#define xieValDiv 5 +#define xieValDivRev 6 +#define xieValMin 7 +#define xieValMax 8 +#define xieValGamma 9 + + +/* ColorAllocTechnique */ + +#define xieValColorAllocDefault 0 +#define xieValColorAllocAll 2 +#define xieValColorAllocMatch 4 +#define xieValColorAllocRequantize 6 + + +/* Colorspace conversions */ + +#define xieValRGBToCIELab 2 +#define xieValRGBToCIEXYZ 4 +#define xieValRGBToYCbCr 6 +#define xieValRGBToYCC 8 + +#define xieValCIELabToRGB 2 +#define xieValCIEXYZToRGB 4 +#define xieValYCbCrToRGB 6 +#define xieValYCCToRGB 8 + + +/* CompareOp */ + +#define xieValLT 1 +#define xieValLE 2 +#define xieValEQ 3 +#define xieValNE 4 +#define xieValGT 5 +#define xieValGE 6 + + +/* ConstrainTechnique */ + +#define xieValConstrainClipScale 2 +#define xieValConstrainHardClip 4 + + +/* ConvolveTechnique */ + +#define xieValConvolveDefault 0 +#define xieValConvolveConstant 2 +#define xieValConvolveReplicate 4 + + +/* DataClass */ + +#define xieValSingleBand 1 +#define xieValTripleBand 2 + +/* DataType */ + +#define xieValConstrained 1 +#define xieValUnconstrained 2 + + +/* DecodeTechnique */ + +#define xieValDecodeUncompressedSingle 2 /* bitonal & grayscale */ +#define xieValDecodeUncompressedTriple 3 /* color */ +#define xieValDecodeG31D 4 /* FAX */ +#define xieValDecodeG32D 6 /* FAX */ +#define xieValDecodeG42D 8 /* FAX */ +#define xieValDecodeJPEGBaseline 10 /* grayscale & color */ +#define xieValDecodeJPEGLossless 12 /* grayscale & color */ +#define xieValDecodeTIFF2 14 /* TIFF modified G31D */ +#define xieValDecodeTIFFPackBits 16 /* TIFF APPLE FORMAT */ + + +/* DitherTechnique */ + +#define xieValDitherDefault 0 +#define xieValDitherErrorDiffusion 2 +#define xieValDitherOrdered 4 + + +/* EncodeTechnique */ + +#define xieValEncodeServerChoice 1 /* (to photomaps) */ +#define xieValEncodeUncompressedSingle 2 /* bitonal & grayscale */ +#define xieValEncodeUncompressedTriple 3 /* color */ +#define xieValEncodeG31D 4 /* FAX */ +#define xieValEncodeG32D 6 /* FAX */ +#define xieValEncodeG42D 8 /* FAX */ +#define xieValEncodeJPEGBaseline 10 /* grayscale & color */ +#define xieValEncodeJPEGLossless 12 /* grayscale & color */ +#define xieValEncodeTIFF2 14 /* TIFF modified G31D */ +#define xieValEncodeTIFFPackBits 16 /* TIFF APPLE FORMAT */ + +/* ServerChoice preference hints */ + +#define xieValPreferDefault 0 +#define xieValPreferSpace 1 +#define xieValPreferTime 2 + +/* JPEG-Lossless predictor */ + +#define xieValPredictorNone 0 +#define xieValPredictorA 1 +#define xieValPredictorB 2 +#define xieValPredictorC 3 +#define xieValPredictorABC 4 +#define xieValPredictorABC2 5 +#define xieValPredictorBAC2 6 +#define xieValPredictorAB2 7 + + +/* ExportNotify */ + +#define xieValDisable 1 +#define xieValFirstData 2 +#define xieValNewData 3 + + +/* ExportState */ + +#define xieValExportDone 1 +#define xieValExportMore 2 +#define xieValExportEmpty 3 +#define xieValExportError 4 + + +/* GamutTechnique */ + +#define xieValGamutDefault 0 +#define xieValGamutNone 1 +#define xieValGamutClipRGB 2 + + +/* GeometryTechnique */ + +#define xieValGeomDefault 0 +#define xieValGeomAntialias 2 +#define xieValGeomAntialiasByArea 4 +#define xieValGeomAntialiasByLPF 6 +#define xieValGeomBilinearInterp 8 +#define xieValGeomGaussian 10 +#define xieValGeomNearestNeighbor 12 + + +/* NearestNeighbor modify */ + +#define xieValFavorDown 1 +#define xieValFavorUp 2 +#define xieValRoundNW 3 +#define xieValRoundNE 4 +#define xieValRoundSE 5 +#define xieValRoundSW 6 + + +/* HistogramShape */ + +#define xieValHistogramFlat 2 +#define xieValHistogramGaussian 4 +#define xieValHistogramHyperbolic 6 + + +/* Interleave */ + +#define xieValBandByPixel 1 +#define xieValBandByPlane 2 + + +/* MathOp */ + +#define xieValExp 1 +#define xieValLn 2 +#define xieValLog2 3 +#define xieValLog10 4 +#define xieValSquare 5 +#define xieValSqrt 6 + + +/* Orientation */ + +#define xieValLSFirst 1 +#define xieValMSFirst 2 + + +/* PhotofloOutcome */ + +#define xieValFloSuccess 1 +#define xieValFloAbort 2 +#define xieValFloError 3 + + +/* PhotofloState */ + +#define xieValInactive 1 +#define xieValActive 2 +#define xieValNonexistent 3 + + +/* TechniqueGroup */ + +#define xieValDefault 0 +#define xieValAll 1 +#define xieValColorAlloc 2 +#define xieValConstrain 4 +#define xieValConvertFromRGB 6 +#define xieValConvertToRGB 8 +#define xieValConvolve 10 +#define xieValDecode 12 +#define xieValDither 14 +#define xieValEncode 16 +#define xieValGamut 18 +#define xieValGeometry 20 +#define xieValHistogram 22 +#define xieValWhiteAdjust 24 + +#define xieValMaxTechGroup 24 + + +/* WhiteAdjustTechnique */ + +#define xieValWhiteAdjustDefault 0 +#define xieValWhiteAdjustNone 1 +#define xieValWhiteAdjustCIELabShift 2 + + +/* Photoflo elements */ + +#define xieElemImportClientLUT 1 +#define xieElemImportClientPhoto 2 +#define xieElemImportClientROI 3 +#define xieElemImportDrawable 4 +#define xieElemImportDrawablePlane 5 +#define xieElemImportLUT 6 +#define xieElemImportPhotomap 7 +#define xieElemImportROI 8 +#define xieElemArithmetic 9 +#define xieElemBandCombine 10 +#define xieElemBandExtract 11 +#define xieElemBandSelect 12 +#define xieElemBlend 13 +#define xieElemCompare 14 +#define xieElemConstrain 15 +#define xieElemConvertFromIndex 16 +#define xieElemConvertFromRGB 17 +#define xieElemConvertToIndex 18 +#define xieElemConvertToRGB 19 +#define xieElemConvolve 20 +#define xieElemDither 21 +#define xieElemGeometry 22 +#define xieElemLogical 23 +#define xieElemMatchHistogram 24 +#define xieElemMath 25 +#define xieElemPasteUp 26 +#define xieElemPoint 27 +#define xieElemUnconstrain 28 +#define xieElemExportClientHistogram 29 +#define xieElemExportClientLUT 30 +#define xieElemExportClientPhoto 31 +#define xieElemExportClientROI 32 +#define xieElemExportDrawable 33 +#define xieElemExportDrawablePlane 34 +#define xieElemExportLUT 35 +#define xieElemExportPhotomap 36 +#define xieElemExportROI 37 + +#define xieMaxElem 37 + + +/* Event Codes */ + +#define xieEvnNoColorAlloc 0 +#define xieEvnNoDecodeNotify 1 +#define xieEvnNoExportAvailable 2 +#define xieEvnNoImportObscured 3 +#define xieEvnNoPhotofloDone 4 + +#define xieNumEvents 5 + + +/* Error Codes */ + +#define xieErrNoColorList 0 +#define xieErrNoLUT 1 +#define xieErrNoPhotoflo 2 +#define xieErrNoPhotomap 3 +#define xieErrNoPhotospace 4 +#define xieErrNoROI 5 +#define xieErrNoFlo 6 + +#define xieNumErrors 7 + + +/* Flo Error Codes */ + +#define xieErrNoFloAccess 1 +#define xieErrNoFloAlloc 2 +#define xieErrNoFloColormap 3 +#define xieErrNoFloColorList 4 +#define xieErrNoFloDomain 5 +#define xieErrNoFloDrawable 6 +#define xieErrNoFloElement 7 +#define xieErrNoFloGC 8 +#define xieErrNoFloID 9 +#define xieErrNoFloLength 10 +#define xieErrNoFloLUT 11 +#define xieErrNoFloMatch 12 +#define xieErrNoFloOperator 13 +#define xieErrNoFloPhotomap 14 +#define xieErrNoFloROI 15 +#define xieErrNoFloSource 16 +#define xieErrNoFloTechnique 17 +#define xieErrNoFloValue 18 +#define xieErrNoFloImplementation 19 + +#define xieNumFloErrors 19 + +#endif /* _XIE_H_ */ diff --git a/xie/build/include/X11/extensions/XIElib.h b/xie/build/include/X11/extensions/XIElib.h new file mode 100644 index 0000000..fff688b --- /dev/null +++ b/xie/build/include/X11/extensions/XIElib.h @@ -0,0 +1,1916 @@ +/* $XConsortium: XIElib.h,v 1.12 95/04/28 18:01:11 mor Exp $ */ + +/* + +Copyright (c) 1993, 1994 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +*/ + +#ifndef _XIELIB_H_ +#define _XIELIB_H_ + +#include +#include + +/*--------------------------------------------------------------------------* + * XIE types * + *--------------------------------------------------------------------------*/ + +typedef float XieFloat; + +typedef float XieConstant[3]; + +typedef float XieMatrix[9]; + +typedef unsigned XieAlignment; + +typedef unsigned XieArithmeticOp; + +typedef unsigned XieColorAllocTechnique; + +typedef XID XieColorList; + +typedef unsigned XieColorspace; + +typedef unsigned XieCompareOp; + +typedef unsigned XieConstrainTechnique; + +typedef unsigned XieConvolveTechnique; + +typedef unsigned XieDataClass; + +typedef unsigned XieDataType; + +typedef unsigned XieDecodeTechnique; + +typedef unsigned XieDitherTechnique; + +typedef unsigned XieEncodeTechnique; + +typedef XID XiePhotospace; + +typedef XID XiePhotoflo; + +typedef unsigned XieExportNotify; + +typedef unsigned XieExportState; + +typedef unsigned XieGamutTechnique; + +typedef unsigned XieGeometryTechnique; + +typedef struct { + unsigned long value; + unsigned long count; +} XieHistogramData; + +typedef unsigned XieHistogramShape; + +typedef unsigned XieInterleave; + +typedef unsigned long XieLevels[3]; + +typedef XID XieLut; + +typedef unsigned XieMathOp; + +typedef unsigned XieOrientation; + +typedef unsigned XiePhotofloOutcome; + +typedef unsigned XiePhotofloState; + +typedef XID XiePhotomap; + +typedef unsigned XiePhototag; + +typedef struct { + int offset_x; + int offset_y; + XiePhototag phototag; +} XieProcessDomain; + +typedef struct { /* this is bcopyable on 32 bit machines */ + long x; /* when using PutClientData */ + long y; + unsigned long width; + unsigned long height; +} XieRectangle; + +typedef XID XieRoi; + +typedef unsigned XieServiceClass; + +typedef unsigned XieTechniqueGroup; + +typedef struct { + Bool needs_param; + XieTechniqueGroup group; + unsigned int number; + unsigned int speed; + char *name; +} XieTechnique; + +typedef struct { + XiePhototag src; + int dst_x; + int dst_y; +} XieTile; + +typedef unsigned long XieLTriplet[3]; + +typedef unsigned XieWhiteAdjustTechnique; + +#if NeedFunctionPrototypes +typedef void *XiePointer; +#else +typedef char *XiePointer; +#endif + + +/*--------------------------------------------------------------------------* + * Extension information * + *--------------------------------------------------------------------------*/ + +typedef struct { + unsigned server_major_rev; + unsigned server_minor_rev; + XieServiceClass service_class; + XieAlignment alignment; + int uncnst_mantissa; + int uncnst_min_exp; + int uncnst_max_exp; + int n_cnst_levels; /* number of constrained levels */ + unsigned long *cnst_levels; /* recommended constrained levels */ + int major_opcode; + int first_event; + int first_error; +} XieExtensionInfo; + + +/*--------------------------------------------------------------------------* + * Photoflo element union * + *--------------------------------------------------------------------------*/ + +typedef struct { + + int elemType; + + union { + + /* + * Import Elements + */ + + struct { + XieDataClass data_class; + XieOrientation band_order; + XieLTriplet length; + XieLevels levels; + } ImportClientLUT; + + struct { + XieDataClass data_class; + XieLTriplet width; + XieLTriplet height; + XieLevels levels; + Bool notify; + XieDecodeTechnique decode_tech; + XiePointer decode_param; + } ImportClientPhoto; + + struct { + unsigned int rectangles; + } ImportClientROI; + + struct { + Drawable drawable; + int src_x; + int src_y; + unsigned int width; + unsigned int height; + unsigned long fill; + Bool notify; + } ImportDrawable; + + struct { + Drawable drawable; + int src_x; + int src_y; + unsigned int width; + unsigned int height; + unsigned long fill; + unsigned long bit_plane; + Bool notify; + } ImportDrawablePlane; + + struct { + XieLut lut; + } ImportLUT; + + struct { + XiePhotomap photomap; + Bool notify; + } ImportPhotomap; + + struct { + XieRoi roi; + } ImportROI; + + + /* + * Process Elements + */ + + struct { + XiePhototag src1; + XiePhototag src2; + XieProcessDomain domain; + XieConstant constant; + XieArithmeticOp operator; + unsigned int band_mask; + } Arithmetic; + + struct { + XiePhototag src1; + XiePhototag src2; + XiePhototag src3; + } BandCombine; + + struct { + XiePhototag src; + unsigned int levels; + float bias; + XieConstant coefficients; + } BandExtract; + + struct { + XiePhototag src; + unsigned int band_number; + } BandSelect; + + struct { + XiePhototag src1; + XiePhototag src2; + XieConstant src_constant; + XiePhototag alpha; + float alpha_constant; + XieProcessDomain domain; + unsigned int band_mask; + } Blend; + + struct { + XiePhototag src1; + XiePhototag src2; + XieProcessDomain domain; + XieConstant constant; + XieCompareOp operator; + Bool combine; + unsigned int band_mask; + } Compare; + + struct { + XiePhototag src; + XieLevels levels; + XieConstrainTechnique constrain_tech; + XiePointer constrain_param; + } Constrain; + + struct { + XiePhototag src; + Colormap colormap; + XieDataClass data_class; + unsigned int precision; + } ConvertFromIndex; + + struct { + XiePhototag src; + XieColorspace color_space; + XiePointer color_param; + } ConvertFromRGB; + + struct { + XiePhototag src; + Colormap colormap; + XieColorList color_list; + Bool notify; + XieColorAllocTechnique color_alloc_tech; + XiePointer color_alloc_param; + } ConvertToIndex; + + struct { + XiePhototag src; + XieColorspace color_space; + XiePointer color_param; + } ConvertToRGB; + + struct { + XiePhototag src; + XieProcessDomain domain; + float *kernel; + int kernel_size; + unsigned int band_mask; + XieConvolveTechnique convolve_tech; + XiePointer convolve_param; + } Convolve; + + struct { + XiePhototag src; + XieLevels levels; + unsigned int band_mask; + XieDitherTechnique dither_tech; + XiePointer dither_param; + } Dither; + + struct { + XiePhototag src; + unsigned int width; + unsigned int height; + float coefficients[6]; + XieConstant constant; + unsigned int band_mask; + XieGeometryTechnique sample_tech; + XiePointer sample_param; + } Geometry; + + struct { + XiePhototag src1; + XiePhototag src2; + XieProcessDomain domain; + XieConstant constant; + int operator; + unsigned int band_mask; + } Logical; + + struct { + XiePhototag src; + XieProcessDomain domain; + XieHistogramShape shape; + XiePointer shape_param; + } MatchHistogram; + + struct { + XiePhototag src; + XieProcessDomain domain; + XieMathOp operator; + unsigned int band_mask; + } Math; + + struct { + unsigned int width; + unsigned int height; + XieConstant constant; + XieTile *tiles; + unsigned int tile_count; + } PasteUp; + + struct { + XiePhototag src; + XieProcessDomain domain; + XiePhototag lut; + unsigned int band_mask; + } Point; + + struct { + XiePhototag src; + } Unconstrain; + + /* + * Export Elements + */ + + struct { + XiePhototag src; + XieProcessDomain domain; + XieExportNotify notify; + } ExportClientHistogram; + + struct { + XiePhototag src; + XieOrientation band_order; + XieExportNotify notify; + XieLTriplet start; + XieLTriplet length; + } ExportClientLUT; + + struct { + XiePhototag src; + XieExportNotify notify; + XieEncodeTechnique encode_tech; + XiePointer encode_param; + } ExportClientPhoto; + + struct { + XiePhototag src; + XieExportNotify notify; + } ExportClientROI; + + struct { + XiePhototag src; + Drawable drawable; + GC gc; + int dst_x; + int dst_y; + } ExportDrawable; + + struct { + XiePhototag src; + Drawable drawable; + GC gc; + int dst_x; + int dst_y; + } ExportDrawablePlane; + + struct { + XiePhototag src; + XieLut lut; + Bool merge; + XieLTriplet start; + } ExportLUT; + + struct { + XiePhototag src; + XiePhotomap photomap; + XieEncodeTechnique encode_tech; + XiePointer encode_param; + } ExportPhotomap; + + struct { + XiePhototag src; + XieRoi roi; + } ExportROI; + + } data; +} XiePhotoElement; + +typedef XiePhotoElement *XiePhotofloGraph; + + +/*--------------------------------------------------------------------------* + * Technique Parameters * + *--------------------------------------------------------------------------*/ + +/* Color Alloc */ + +typedef struct { + unsigned long fill; +} XieColorAllocAllParam; + +typedef struct { + float match_limit; + float gray_limit; +} XieColorAllocMatchParam; + +typedef struct { + unsigned long max_cells; +} XieColorAllocRequantizeParam; + + +/* Colorspace - conversion from RGB */ + +typedef struct { + XieMatrix matrix; + XieWhiteAdjustTechnique white_adjust_tech; + XiePointer white_adjust_param; +} XieRGBToCIELabParam, XieRGBToCIEXYZParam; + +typedef struct { + XieLevels levels; + float luma_red; + float luma_green; + float luma_blue; + XieConstant bias; +} XieRGBToYCbCrParam; + +typedef struct { + XieLevels levels; + float luma_red; + float luma_green; + float luma_blue; + float scale; +} XieRGBToYCCParam; + + +/* Colorspace - conversion to RGB */ + +typedef struct { + XieMatrix matrix; + XieWhiteAdjustTechnique white_adjust_tech; + XiePointer white_adjust_param; + XieGamutTechnique gamut_tech; + XiePointer gamut_param; +} XieCIELabToRGBParam, XieCIEXYZToRGBParam; + +typedef struct { + XieLevels levels; + float luma_red; + float luma_green; + float luma_blue; + XieConstant bias; + XieGamutTechnique gamut_tech; + XiePointer gamut_param; +} XieYCbCrToRGBParam; + +typedef struct { + XieLevels levels; + float luma_red; + float luma_green; + float luma_blue; + float scale; + XieGamutTechnique gamut_tech; + XiePointer gamut_param; +} XieYCCToRGBParam; + +/* Constrain */ + +typedef struct { + XieConstant input_low,input_high; + XieLTriplet output_low,output_high; +} XieClipScaleParam; + + +/* Convolve */ + +typedef struct { + XieConstant constant; +} XieConvolveConstantParam; + + +/* Decode */ + +typedef struct { + XieOrientation fill_order; + XieOrientation pixel_order; + unsigned int pixel_stride; + unsigned int left_pad; + unsigned int scanline_pad; +} XieDecodeUncompressedSingleParam; + +typedef struct { + unsigned char left_pad[3]; + XieOrientation fill_order; + unsigned char pixel_stride[3]; + XieOrientation pixel_order; + unsigned char scanline_pad[3]; + XieOrientation band_order; + XieInterleave interleave; +} XieDecodeUncompressedTripleParam; + +typedef struct { + XieOrientation encoded_order; + Bool normal; + Bool radiometric; +} XieDecodeG31DParam, XieDecodeG32DParam, XieDecodeG42DParam, + XieDecodeTIFF2Param; + +typedef struct { + XieOrientation encoded_order; + Bool normal; +} XieDecodeTIFFPackBitsParam; + +typedef struct { + XieInterleave interleave; + XieOrientation band_order; + Bool up_sample; +} XieDecodeJPEGBaselineParam; + +typedef struct { + XieInterleave interleave; + XieOrientation band_order; +} XieDecodeJPEGLosslessParam; + + +/* Dither */ + +typedef struct { + unsigned int threshold_order; +} XieDitherOrderedParam; + + +/* Encode */ + +typedef struct { + XieOrientation fill_order; + XieOrientation pixel_order; + unsigned int pixel_stride; + unsigned int scanline_pad; +} XieEncodeUncompressedSingleParam; + +typedef struct { + unsigned char pixel_stride[3]; + XieOrientation pixel_order; + unsigned char scanline_pad[3]; + XieOrientation fill_order; + XieOrientation band_order; + XieInterleave interleave; +} XieEncodeUncompressedTripleParam; + +typedef struct { + Bool align_eol; + Bool radiometric; + XieOrientation encoded_order; +} XieEncodeG31DParam; + +typedef struct { + Bool uncompressed; + Bool align_eol; + Bool radiometric; + XieOrientation encoded_order; + unsigned long k_factor; +} XieEncodeG32DParam; + +typedef struct { + Bool uncompressed; + Bool radiometric; + XieOrientation encoded_order; +} XieEncodeG42DParam; + +typedef struct { + unsigned int preference; +} XieEncodeServerChoiceParam; + +typedef struct { + XieInterleave interleave; + XieOrientation band_order; + unsigned char horizontal_samples[3]; + unsigned char vertical_samples[3]; + char *q_table; + unsigned int q_size; + char *ac_table; + unsigned int ac_size; + char *dc_table; + unsigned int dc_size; +} XieEncodeJPEGBaselineParam; + +typedef struct { + XieInterleave interleave; + XieOrientation band_order; + unsigned char predictor[3]; + char *table; + unsigned int table_size; +} XieEncodeJPEGLosslessParam; + +typedef struct { + XieOrientation encoded_order; + Bool radiometric; +} XieEncodeTIFF2Param; + +typedef struct { + XieOrientation encoded_order; +} XieEncodeTIFFPackBitsParam; + + +/* Geometry */ + +typedef struct { + int simple; +} XieGeomAntialiasByAreaParam; + +typedef struct { + int kernel_size; +} XieGeomAntialiasByLowpassParam; + +typedef struct { + float sigma; + float normalize; + unsigned int radius; + Bool simple; +} XieGeomGaussianParam; + +typedef struct { + unsigned int modify; +} XieGeomNearestNeighborParam; + + +/* Histogram */ + +typedef struct { + float mean; + float sigma; +} XieHistogramGaussianParam; + +typedef struct { + float constant; + Bool shape_factor; +} XieHistogramHyperbolicParam; + + +/* White Adjust */ + +typedef struct { + XieConstant white_point; +} XieWhiteAdjustCIELabShiftParam; + + +/*--------------------------------------------------------------------------* + * Events * + *--------------------------------------------------------------------------*/ + +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + unsigned long name_space; + Time time; + unsigned long flo_id; + XiePhototag src; + unsigned int elem_type; + XieColorList color_list; + XieColorAllocTechnique color_alloc_technique; + unsigned long color_alloc_data; +} XieColorAllocEvent; + +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + unsigned long name_space; + Time time; + unsigned long flo_id; + XiePhototag src; + unsigned int elem_type; + XieDecodeTechnique decode_technique; + Bool aborted; + unsigned int band_number; + unsigned long width; + unsigned long height; +} XieDecodeNotifyEvent; + +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + unsigned long name_space; + Time time; + unsigned long flo_id; + XiePhototag src; + unsigned int elem_type; + unsigned int band_number; + unsigned long data[3]; +} XieExportAvailableEvent; + +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + unsigned long name_space; + Time time; + unsigned long flo_id; + XiePhototag src; + unsigned int elem_type; + Window window; + int x; + int y; + unsigned int width; + unsigned int height; +} XieImportObscuredEvent; + +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + unsigned long name_space; + Time time; + unsigned long flo_id; + XiePhotofloOutcome outcome; +} XiePhotofloDoneEvent; + + +/*--------------------------------------------------------------------------* + * Photoflo Errors * + *--------------------------------------------------------------------------*/ + +typedef struct { + int type; + Display *display; + unsigned long flo_id; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; + unsigned int flo_error_code; + unsigned long name_space; + XiePhototag phototag; + unsigned int elem_type; +} XieFloAccessError, XieFloAllocError, XieFloElementError, XieFloIDError, + XieFloLengthError, XieFloMatchError, XieFloSourceError; + +typedef struct { + int type; + Display *display; + unsigned long flo_id; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; + unsigned int flo_error_code; + unsigned long name_space; + XiePhototag phototag; + unsigned int elem_type; + XID resource_id; +} XieFloResourceError; + +typedef struct { + int type; + Display *display; + unsigned long flo_id; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; + unsigned int flo_error_code; + unsigned long name_space; + XiePhototag phototag; + unsigned int elem_type; + XiePhototag domain_src; +} XieFloDomainError; + +typedef struct { + int type; + Display *display; + unsigned long flo_id; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; + unsigned int flo_error_code; + unsigned long name_space; + XiePhototag phototag; + unsigned int elem_type; + unsigned int operator; +} XieFloOperatorError; + +typedef struct { + int type; + Display *display; + unsigned long flo_id; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; + unsigned int flo_error_code; + unsigned long name_space; + XiePhototag phototag; + unsigned int elem_type; + unsigned int technique_number; + unsigned int num_tech_params; + XieTechniqueGroup tech_group; +} XieFloTechniqueError; + +typedef struct { + int type; + Display *display; + unsigned long flo_id; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; + unsigned int flo_error_code; + unsigned long name_space; + XiePhototag phototag; + unsigned int elem_type; + unsigned long bad_value; +} XieFloValueError; + + +/*--------------------------------------------------------------------------* + * Function prototypes * + *--------------------------------------------------------------------------*/ + +/* Startup functions -------------------------------------------------------*/ + +extern Status XieInitialize ( +#if NeedFunctionPrototypes + Display * /* display */, + XieExtensionInfo ** /* extinfo_ret */ +#endif +); + +extern Status XieQueryTechniques ( +#if NeedFunctionPrototypes + Display * /* display */, + XieTechniqueGroup /* technique_group */, + int * /* ntechniques_ret */, + XieTechnique ** /* techniques_ret */ +#endif +); + +extern void XieFreeTechniques ( +#if NeedFunctionPrototypes + XieTechnique * /* techs */, + unsigned int /* count */ +#endif +); + + +/* Color List functions ---------------------------------------------------*/ + +extern XieColorList XieCreateColorList ( +#if NeedFunctionPrototypes + Display * /* display */ +#endif +); + +extern void XieDestroyColorList ( +#if NeedFunctionPrototypes + Display * /* display */, + XieColorList /* color_list */ +#endif +); + +extern void XiePurgeColorList ( +#if NeedFunctionPrototypes + Display * /* display */, + XieColorList /* color_list */ +#endif +); + +extern Status XieQueryColorList ( +#if NeedFunctionPrototypes + Display * /* display */, + XieColorList /* color_list */, + Colormap * /* colormap_ret */, + unsigned * /* ncolors_ret */, + unsigned long ** /* colors_ret */ +#endif +); + + +/* LUT functions -----------------------------------------------------------*/ + +extern XieLut XieCreateLUT ( +#if NeedFunctionPrototypes + Display * /* display */ +#endif +); + +extern void XieDestroyLUT ( +#if NeedFunctionPrototypes + Display * /* display */, + XieLut /* lut */ +#endif +); + + +/* Photomap functions ------------------------------------------------------*/ + +extern XiePhotomap XieCreatePhotomap ( +#if NeedFunctionPrototypes + Display * /* display */ +#endif +); + +extern void XieDestroyPhotomap ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotomap /* photomap */ +#endif +); + +extern Status XieQueryPhotomap ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotomap /* photomap */, + Bool * /* populated_ret */, + XieDataType * /* datatype_ret */, + XieDataClass * /* class_ret */, + XieDecodeTechnique * /* decode_technique_ret */, + XieLTriplet /* width_ret */, + XieLTriplet /* height_ret */, + XieLTriplet /* levels_ret */ +#endif +); + + +/* ROI functions -----------------------------------------------------------*/ + +extern XieRoi XieCreateROI ( +#if NeedFunctionPrototypes + Display * /* display */ +#endif +); + +extern void XieDestroyROI ( +#if NeedFunctionPrototypes + Display * /* display */, + XieRoi /* roi */ +#endif +); + + +/* Photospace functions ----------------------------------------------------*/ + +extern XiePhotospace XieCreatePhotospace ( +#if NeedFunctionPrototypes + Display * /* display */ +#endif +); + +extern void XieDestroyPhotospace ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotospace /* photospace */ +#endif +); + +extern void XieExecuteImmediate ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotospace /* photospace */, + unsigned long /* flo_id */, + Bool /* notify */, + XiePhotoElement * /* elem_list */, + int /* elem_count */ +#endif +); + + +/* Photoflo functions ------------------------------------------------------*/ + +extern XiePhotoElement *XieAllocatePhotofloGraph ( +#if NeedFunctionPrototypes + unsigned int /* count */ +#endif +); + +extern void XieFreePhotofloGraph ( +#if NeedFunctionPrototypes + XiePhotoElement * /* elements */, + unsigned int /* count */ +#endif +); + +extern XiePhotoflo XieCreatePhotoflo ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotoElement * /* elem_list */, + int /* elem_count */ +#endif +); + +extern void XieDestroyPhotoflo ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotoflo /* photoflo */ +#endif +); + +extern void XieExecutePhotoflo ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotoflo /* photoflo */, + Bool /* notify */ +#endif +); + +extern void XieModifyPhotoflo ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotoflo /* photoflo */, + int /* start */, + XiePhotoElement * /* elem_list */, + int /* elem_count */ +#endif +); + +extern void XieRedefinePhotoflo ( +#if NeedFunctionPrototypes + Display * /* display */, + XiePhotoflo /* photoflo */, + XiePhotoElement * /* elem_list */, + int /* elem_count */ +#endif +); + +extern Status XieQueryPhotoflo ( +#if NeedFunctionPrototypes + Display * /* display */, + unsigned long /* name_space */, + unsigned long /* flo_id */, + XiePhotofloState * /* state_ret */, + XiePhototag ** /* data_expected_ret */, + unsigned int * /* nexpected_ret */, + XiePhototag ** /* data_available_ret */, + unsigned int * /* navailable_ret */ +#endif +); + + +/* Client Data functions ---------------------------------------------------*/ + +extern void XiePutClientData ( +#if NeedFunctionPrototypes + Display * /* display */, + unsigned long /* name_space */, + unsigned long /* flo_id */, + XiePhototag /* element */, + Bool /* final */, + unsigned /* band_number */, + unsigned char * /* data */, + unsigned /* nbytes */ +#endif +); + +extern Status XieGetClientData ( +#if NeedFunctionPrototypes + Display * /* display */, + unsigned long /* name_space */, + unsigned long /* flo_id */, + XiePhototag /* element */, + unsigned /* max_bytes */, + Bool /* terminate */, + unsigned /* band_number */, + XieExportState * /* new_state_ret */, + unsigned char ** /* data_ret */, + unsigned * /* nbytes_ret */ +#endif +); + + +/* Abort and Await functions -----------------------------------------------*/ + +extern void XieAbort ( +#if NeedFunctionPrototypes + Display * /* display */, + unsigned long /* name_space */, + unsigned long /* flo_id */ +#endif +); + +extern void XieAwait ( +#if NeedFunctionPrototypes + Display * /* display */, + unsigned long /* name_space */, + unsigned long /* flo_id */ +#endif +); + + +/* Photoflo element functions ----------------------------------------------*/ + +extern void XieFloImportClientLUT ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XieDataClass /* data_class */, + XieOrientation /* band_order */, + XieLTriplet /* length */, + XieLevels /* levels */ +#endif +); + +extern void XieFloImportClientPhoto ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XieDataClass /* data_class */, + XieLTriplet /* width */, + XieLTriplet /* height */, + XieLevels /* levels */, + Bool /* notify */, + XieDecodeTechnique /* decode_tech */, + XiePointer /* decode_param */ +#endif +); + +extern void XieFloImportClientROI ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + unsigned int /* rectangles */ +#endif +); + +extern void XieFloImportDrawable ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + Drawable /* drawable */, + int /* src_x */, + int /* src_y */, + unsigned int /* width */, + unsigned int /* height */, + unsigned long /* fill */, + Bool /* notify */ +#endif +); + +extern void XieFloImportDrawablePlane ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + Drawable /* drawable */, + int /* src_x */, + int /* src_y */, + unsigned int /* width */, + unsigned int /* height */, + unsigned long /* fill */, + unsigned long /* bit_plane */, + Bool /* notify */ +#endif +); + +extern void XieFloImportLUT ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XieLut /* lut */ +#endif +); + +extern void XieFloImportPhotomap ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhotomap /* photomap */, + Bool /* notify */ +#endif +); + +extern void XieFloImportROI ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XieRoi /* roi */ +#endif +); + +extern void XieFloArithmetic ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src1 */, + XiePhototag /* src2 */, + XieProcessDomain * /* domain */, + XieConstant /* constant */, + XieArithmeticOp /* operator */, + unsigned int /* band_mask */ +#endif +); + +extern void XieFloBandCombine ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src1 */, + XiePhototag /* src2 */, + XiePhototag /* src3 */ +#endif +); + +extern void XieFloBandExtract ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + unsigned int /* levels */, + double /* bias */, + XieConstant /* coefficients */ +#endif +); + +extern void XieFloBandSelect ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + unsigned int /* band_number */ +#endif +); + +extern void XieFloBlend ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src1 */, + XiePhototag /* src2 */, + XieConstant /* src_constant */, + XiePhototag /* alpha */, + double /* alpha_const */, + XieProcessDomain * /* domain */, + unsigned int /* band_mask */ +#endif +); + +extern void XieFloCompare ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src1 */, + XiePhototag /* src2 */, + XieProcessDomain * /* domain */, + XieConstant /* constant */, + XieCompareOp /* operator */, + Bool /* combine */, + unsigned int /* band_mask */ +#endif +); + +extern void XieFloConstrain ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieLevels /* levels */, + XieConstrainTechnique /* constrain_tech */, + XiePointer /* constrain_param */ +#endif +); + +extern void XieFloConvertFromIndex ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + Colormap /* colormap */, + XieDataClass /* data_class */, + unsigned int /* precision */ +#endif +); + +extern void XieFloConvertFromRGB ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieColorspace /* color_space */, + XiePointer /* color_param */ +#endif +); + +extern void XieFloConvertToIndex ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + Colormap /* colormap */, + XieColorList /* color_list */, + Bool /* notify */, + XieColorAllocTechnique /* color_alloc_tech */, + XiePointer /* color_alloc_param */ +#endif +); + +extern void XieFloConvertToRGB ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieColorspace /* color_space */, + XiePointer /* color_param */ +#endif +); + +extern void XieFloConvolve ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieProcessDomain * /* domain */, + float * /* kernel */, + int /* kernel_size */, + unsigned int /* band_mask */, + XieConvolveTechnique /* convolve_tech */, + XiePointer /* convolve_param */ +#endif +); + +extern void XieFloDither ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + unsigned int /* band_mask */, + XieLevels /* levels */, + XieDitherTechnique /* dither_tech */, + XiePointer /* dither_param */ +#endif +); + +extern void XieFloGeometry ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + unsigned int /* width */, + unsigned int /* height */, + float[6] /* coefficients[6] */, + XieConstant /* constant */, + unsigned int /* band_mask */, + XieGeometryTechnique /* sample_tech */, + XiePointer /* sample_param */ +#endif +); + +extern void XieFloLogical ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src1 */, + XiePhototag /* src2 */, + XieProcessDomain * /* domain */, + XieConstant /* constant */, + unsigned long /* operator */, + unsigned int /* band_mask */ +#endif +); + +extern void XieFloMatchHistogram ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieProcessDomain * /* domain */, + XieHistogramShape /* shape */, + XiePointer /* shape_param */ +#endif +); + +extern void XieFloMath ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieProcessDomain * /* domain */, + XieMathOp /* operator */, + unsigned int /* band_mask */ +#endif +); + +extern void XieFloPasteUp ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + unsigned int /* width */, + unsigned int /* height */, + XieConstant /* constant */, + XieTile * /* tiles */, + unsigned int /* tile_count */ +#endif +); + +extern void XieFloPoint ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieProcessDomain * /* domain */, + XiePhototag /* lut */, + unsigned int /* band_mask */ +#endif +); + +extern void XieFloUnconstrain ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */ +#endif +); + +extern void XieFloExportClientHistogram ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieProcessDomain * /* domain */, + XieExportNotify /* notify */ +#endif +); + +extern void XieFloExportClientLUT ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieOrientation /* band_order */, + XieExportNotify /* notify */, + XieLTriplet /* start */, + XieLTriplet /* length */ +#endif +); + +extern void XieFloExportClientPhoto ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieExportNotify /* notify */, + XieEncodeTechnique /* encode_tech */, + XiePointer /* encode_param */ +#endif +); + +extern void XieFloExportClientROI ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieExportNotify /* notify */ +#endif +); + +extern void XieFloExportDrawable ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + Drawable /* drawable */, + GC /* gc */, + int /* dst_x */, + int /* dst_y */ +#endif +); + +extern void XieFloExportDrawablePlane ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + Drawable /* drawable */, + GC /* gc */, + int /* dst_x */, + int /* dst_y */ +#endif +); + +extern void XieFloExportLUT ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieLut /* lut */, + Bool /* merge */, + XieLTriplet /* start */ +#endif +); + +extern void XieFloExportPhotomap ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XiePhotomap /* photomap */, + XieEncodeTechnique /* encode_tech */, + XiePointer /* encode_param */ +#endif +); + +extern void XieFloExportROI ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */, + XiePhototag /* src */, + XieRoi /* roi */ +#endif +); + + +/* Technique functions -----------------------------------------------------*/ + +extern XieColorAllocAllParam *XieTecColorAllocAll ( +#if NeedFunctionPrototypes + unsigned long /* fill */ +#endif +); + +extern XieColorAllocMatchParam *XieTecColorAllocMatch ( +#if NeedFunctionPrototypes + double /* match_limit */, + double /* gray_limit */ +#endif +); + +extern XieColorAllocRequantizeParam *XieTecColorAllocRequantize ( +#if NeedFunctionPrototypes + unsigned long /* max_cells */ +#endif +); + +extern XieRGBToCIELabParam *XieTecRGBToCIELab ( +#if NeedFunctionPrototypes + XieMatrix /* matrix */, + XieWhiteAdjustTechnique /* white_adjust_tech */, + XiePointer /* white_adjust_param */ +#endif +); + +extern XieRGBToCIEXYZParam *XieTecRGBToCIEXYZ ( +#if NeedFunctionPrototypes + XieMatrix /* matrix */, + XieWhiteAdjustTechnique /* white_adjust_tech */, + XiePointer /* white_adjust_param */ +#endif +); + +extern XieRGBToYCbCrParam *XieTecRGBToYCbCr ( +#if NeedFunctionPrototypes + XieLevels /* levels */, + double /* luma_red */, + double /* luma_green */, + double /* luma_blue */, + XieConstant /* bias */ +#endif +); + +extern XieRGBToYCCParam *XieTecRGBToYCC ( +#if NeedFunctionPrototypes + XieLevels /* levels */, + double /* luma_red */, + double /* luma_green */, + double /* luma_blue */, + double /* scale */ +#endif +); + +extern XieCIELabToRGBParam *XieTecCIELabToRGB ( +#if NeedFunctionPrototypes + XieMatrix /* matrix */, + XieWhiteAdjustTechnique /* white_adjust_tech */, + XiePointer /* white_adjust_param */, + XieGamutTechnique /* gamut_tech */, + XiePointer /* gamut_param */ +#endif +); + +extern XieCIEXYZToRGBParam *XieTecCIEXYZToRGB ( +#if NeedFunctionPrototypes + XieMatrix /* matrix */, + XieWhiteAdjustTechnique /* white_adjust_tech */, + XiePointer /* white_adjust_param */, + XieGamutTechnique /* gamut_tech */, + XiePointer /* gamut_param */ +#endif +); + +extern XieYCbCrToRGBParam *XieTecYCbCrToRGB ( +#if NeedFunctionPrototypes + XieLevels /* levels */, + double /* luma_red */, + double /* luma_green */, + double /* luma_blue */, + XieConstant /* bias */, + XieGamutTechnique /* gamut_tech */, + XiePointer /* gamut_param */ +#endif +); + +extern XieYCCToRGBParam *XieTecYCCToRGB ( +#if NeedFunctionPrototypes + XieLevels /* levels */, + double /* luma_red */, + double /* luma_green */, + double /* luma_blue */, + double /* scale */, + XieGamutTechnique /* gamut_tech */, + XiePointer /* gamut_param */ +#endif +); + +extern XieClipScaleParam *XieTecClipScale ( +#if NeedFunctionPrototypes + XieConstant /* in_low */, + XieConstant /* in_high */, + XieLTriplet /* out_low */, + XieLTriplet /* out_high */ +#endif +); + +extern XieConvolveConstantParam *XieTecConvolveConstant ( +#if NeedFunctionPrototypes + XieConstant /* constant */ +#endif +); + +extern XieDecodeUncompressedSingleParam *XieTecDecodeUncompressedSingle ( +#if NeedFunctionPrototypes + XieOrientation /* fill_order */, + XieOrientation /* pixel_order */, + unsigned int /* pixel_stride */, + unsigned int /* left_pad */, + unsigned int /* scanline_pad */ +#endif +); + +extern XieDecodeUncompressedTripleParam *XieTecDecodeUncompressedTriple ( +#if NeedFunctionPrototypes + XieOrientation /* fill_order */, + XieOrientation /* pixel_order */, + XieOrientation /* band_order */, + XieInterleave /* interleave */, + unsigned char[3] /* pixel_stride[3] */, + unsigned char[3] /* left_pad[3] */, + unsigned char[3] /* scanline_pad[3] */ +#endif +); + +extern XieDecodeG31DParam *XieTecDecodeG31D ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */, + Bool /* normal */, + Bool /* radiometric */ +#endif +); + +extern XieDecodeG32DParam *XieTecDecodeG32D ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */, + Bool /* normal */, + Bool /* radiometric */ +#endif +); + +extern XieDecodeG42DParam *XieTecDecodeG42D ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */, + Bool /* normal */, + Bool /* radiometric */ +#endif +); + +extern XieDecodeTIFF2Param *XieTecDecodeTIFF2 ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */, + Bool /* normal */, + Bool /* radiometric */ +#endif +); + +extern XieDecodeTIFFPackBitsParam *XieTecDecodeTIFFPackBits ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */, + Bool /* normal */ +#endif +); + +extern XieDecodeJPEGBaselineParam *XieTecDecodeJPEGBaseline ( +#if NeedFunctionPrototypes + XieInterleave /* interleave */, + XieOrientation /* band_order */, + Bool /* up_sample */ +#endif +); + +extern XieDecodeJPEGLosslessParam *XieTecDecodeJPEGLossless ( +#if NeedFunctionPrototypes + XieInterleave /* interleave */, + XieOrientation /* band_order */ +#endif +); + +extern XieDitherOrderedParam *XieTecDitherOrderedParam ( +#if NeedFunctionPrototypes + unsigned int /* threshold_order */ +#endif +); + +extern XieEncodeUncompressedSingleParam *XieTecEncodeUncompressedSingle ( +#if NeedFunctionPrototypes + XieOrientation /* fill_order */, + XieOrientation /* pixel_order */, + unsigned int /* pixel_stride */, + unsigned int /* scanline_pad */ +#endif +); + +extern XieEncodeUncompressedTripleParam *XieTecEncodeUncompressedTriple ( +#if NeedFunctionPrototypes + XieOrientation /* fill_order */, + XieOrientation /* pixel_order */, + XieOrientation /* band_order */, + XieInterleave /* interleave */, + unsigned char[3] /* pixel_stride[3] */, + unsigned char[3] /* scanline_pad[3] */ +#endif +); + +extern XieEncodeG31DParam *XieTecEncodeG31D ( +#if NeedFunctionPrototypes + Bool /* align_eol */, + Bool /* radiometric */, + XieOrientation /* encoded_order */ +#endif +); + +extern XieEncodeG32DParam *XieTecEncodeG32D ( +#if NeedFunctionPrototypes + Bool /* uncompressed */, + Bool /* align_eol */, + Bool /* radiometric */, + XieOrientation /* encoded_order */, + unsigned long /* k_factor */ +#endif +); + +extern XieEncodeG42DParam *XieTecEncodeG42D ( +#if NeedFunctionPrototypes + Bool /* uncompressed */, + Bool /* radiometric */, + XieOrientation /* encoded_order */ +#endif +); + +extern XieEncodeServerChoiceParam *XieTecEncodeServerChoice ( +#if NeedFunctionPrototypes + unsigned int /* preference */ +#endif +); + +extern XieEncodeJPEGBaselineParam *XieTecEncodeJPEGBaseline ( +#if NeedFunctionPrototypes + XieInterleave /* interleave */, + XieOrientation /* band_order */, + unsigned char[3] /* horizontal_samples[3] */, + unsigned char[3] /* vertical_samples[3] */, + char * /* q_table */, + unsigned int /* q_size */, + char * /* ac_table */, + unsigned int /* ac_size */, + char * /* dc_table */, + unsigned int /* dc_size */ +#endif +); + +extern void XieFreeEncodeJPEGBaseline ( +#if NeedFunctionPrototypes + XieEncodeJPEGBaselineParam * /* param */ +#endif +); + +extern XieEncodeJPEGLosslessParam *XieTecEncodeJPEGLossless ( +#if NeedFunctionPrototypes + XieInterleave /* interleave */, + XieOrientation /* band_order */, + unsigned char[3] /* predictor[3] */, + char * /* table */, + unsigned int /* table_size */ +#endif +); + +extern void XieFreeEncodeJPEGLossless ( +#if NeedFunctionPrototypes + XieEncodeJPEGLosslessParam * /* param */ +#endif +); + +extern void XieFreePasteUpTiles ( +#if NeedFunctionPrototypes + XiePhotoElement * /* element */ +#endif +); + +extern XieEncodeTIFF2Param *XieTecEncodeTIFF2 ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */, + Bool /* radiometric */ +#endif +); + +extern XieEncodeTIFFPackBitsParam *XieTecEncodeTIFFPackBits ( +#if NeedFunctionPrototypes + XieOrientation /* encoded_order */ +#endif +); + +extern XieGeomAntialiasByAreaParam *XieTecGeomAntialiasByArea ( +#if NeedFunctionPrototypes + int /* simple */ +#endif +); + +extern XieGeomAntialiasByLowpassParam *XieTecGeomAntialiasByLowpass ( +#if NeedFunctionPrototypes + int /* kernel_size */ +#endif +); + +extern XieGeomGaussianParam *XieTecGeomGaussian ( +#if NeedFunctionPrototypes + double /* sigma */, + double /* normalize */, + unsigned int /* radius */, + Bool /* simple */ +#endif +); + +extern XieGeomNearestNeighborParam *XieTecGeomNearestNeighbor ( +#if NeedFunctionPrototypes + unsigned int /* modify */ +#endif +); + +extern XieHistogramGaussianParam *XieTecHistogramGaussian ( +#if NeedFunctionPrototypes + double /* mean */, + double /* sigma */ +#endif +); + +extern XieHistogramHyperbolicParam *XieTecHistogramHyperbolic ( +#if NeedFunctionPrototypes + double /* constant */, + Bool /* shape_factor */ +#endif +); + +extern XieWhiteAdjustCIELabShiftParam *XieTecWhiteAdjustCIELabShift ( +#if NeedFunctionPrototypes + XieConstant /* white_point */ +#endif +); + + +#endif /* _XIELIB_H_ */ diff --git a/xie/build/include/X11/extensions/XIEproto.h b/xie/build/include/X11/extensions/XIEproto.h new file mode 100644 index 0000000..b097319 --- /dev/null +++ b/xie/build/include/X11/extensions/XIEproto.h @@ -0,0 +1,687 @@ +/* $XConsortium: XIEproto.h,v 1.6 94/04/17 20:11:12 mor Exp $ */ +/****************************************************************************** +Copyright (c) 1993, 1994 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + + + NOTICE + +This software is being provided by AGE Logic, Inc. under the +following license. By obtaining, using and/or copying this software, +you agree that you have read, understood, and will comply with these +terms and conditions: + + Permission to use, copy, modify, distribute and sell this + software and its documentation for any purpose and without + fee or royalty and to grant others any or all rights granted + herein is hereby granted, provided that you agree to comply + with the following copyright notice and statements, including + the disclaimer, and that the same appears on all copies and + derivative works of the software and documentation you make. + + "Copyright 1993, 1994 by AGE Logic, Inc." + + THIS SOFTWARE IS PROVIDED "AS IS". AGE LOGIC MAKES NO + REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. By way of + example, but not limitation, AGE LOGIC MAKE NO + REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE SOFTWARE DOES NOT + INFRINGE THIRD-PARTY PROPRIETARY RIGHTS. AGE LOGIC + SHALL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE. IN NO + EVENT SHALL EITHER PARTY BE LIABLE FOR ANY INDIRECT, + INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS + OF PROFITS, REVENUE, DATA OR USE, INCURRED BY EITHER PARTY OR + ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT OR + BASED ON A WARRANTY, EVEN IF AGE LOGIC LICENSEES + HEREUNDER HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + + The name of AGE Logic, Inc. may not be used in + advertising or publicity pertaining to this software without + specific, written prior permission from AGE Logic. + + Title to this software shall at all times remain with AGE + Logic, Inc. +******************************************************************************/ + +#ifndef _XIEPROTO_H_ +#define _XIEPROTO_H_ + +#include + +#define Drawable CARD32 +#define Colormap CARD32 +#define GContext CARD32 + + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; +} xieReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + CARD16 majorVersion B16; + CARD16 minorVersion B16; +} xieQueryImageExtensionReq; + +typedef struct { + CARD8 type; + CARD8 data; + CARD16 sequenceNum B16; + CARD32 length B32; + CARD16 majorVersion B16; + CARD16 minorVersion B16; + xieTypServiceClass serviceClass; + xieTypAlignment alignment; + CARD16 unconstrainedMantissa B16; + INT32 unconstrainedMaxExp B32; + INT32 unconstrainedMinExp B32; + CARD8 pad2[8]; + /* LISTofCARD32 (constrained-levels) */ +} xieQueryImageExtensionReply; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypTechniqueGroup techniqueGroup; + CARD8 pad[3]; +} xieQueryTechniquesReq; + +typedef struct { + CARD8 type; + CARD8 data; + CARD16 sequenceNum B16; + CARD32 length B32; + CARD16 numTechniques B16; + CARD8 pad[22]; + /* LISTofTechniqueRec (numTechniques) */ +} xieQueryTechniquesReply; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypColorList colorList B32; +} xieCreateColorListReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypColorList colorList B32; +} xieDestroyColorListReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypColorList colorList B32; +} xiePurgeColorListReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypColorList colorList B32; +} xieQueryColorListReq; + +typedef struct { + CARD8 type; + CARD8 data; + CARD16 sequenceNum B16; + CARD32 length B32; + Colormap colormap B32; + CARD8 pad[20]; + /* LISTofCARD32 (length) */ +} xieQueryColorListReply; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypLUT lut B32; +} xieCreateLUTReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypLUT lut B32; +} xieDestroyLUTReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotomap photomap B32; +} xieCreatePhotomapReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotomap photomap B32; +} xieDestroyPhotomapReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotomap photomap B32; +} xieQueryPhotomapReq; + +typedef struct { + CARD8 type; + BOOL populated; + CARD16 sequenceNum B16; + CARD32 length B32; + xieTypDataClass dataClass; + xieTypDataType dataType; + xieTypDecodeTechnique decodeTechnique B16; + CARD32 width0 B32; + CARD32 width1 B32; + CARD32 width2 B32; + CARD32 height0 B32; + CARD32 height1 B32; + CARD32 height2 B32; + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; +} xieQueryPhotomapReply; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypROI roi B32; +} xieCreateROIReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypROI roi B32; +} xieDestroyROIReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotospace nameSpace B32; +} xieCreatePhotospaceReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotospace nameSpace B32; +} xieDestroyPhotospaceReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotospace nameSpace B32; + CARD32 floID B32; + CARD16 numElements B16; + BOOL notify; + CARD8 pad; + /* LISTofPhotoElement (numElements) */ +} xieExecuteImmediateReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotoflo floID B32; + CARD16 numElements B16; + CARD16 pad B16; + /* LISTofPhotoElement (numElements) */ +} xieCreatePhotofloReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotoflo floID B32; +} xieDestroyPhotofloReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotoflo floID B32; + BOOL notify; + CARD8 pad[3]; +} xieExecutePhotofloReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotoflo floID B32; + xieTypPhototag start B16; + CARD16 numElements B16; + /* LISTofPhotoElement (numElements) */ +} xieModifyPhotofloReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + xieTypPhotoflo floID B32; + CARD16 numElements B16; + CARD16 pad B16; + /* LISTofPhotoElement (numElements) */ +} xieRedefinePhotofloReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + CARD32 nameSpace B32; + CARD32 floID B32; + xieTypPhototag element B16; + BOOL final; + CARD8 bandNumber; + CARD32 byteCount B32; + /* LISTofCARD8 (byteCount) */ + /* pad (byteCount) */ +} xiePutClientDataReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + CARD32 nameSpace B32; + CARD32 floID B32; + CARD32 maxBytes B32; + xieTypPhototag element B16; + BOOL terminate; + CARD8 bandNumber; +} xieGetClientDataReq; + +typedef struct { + CARD8 type; + CARD8 newState; + CARD16 sequenceNum B16; + CARD32 length B32; + CARD32 byteCount B32; + CARD8 pad[20]; + /* LISTofCARD8 (byteCount) */ + /* pad (byteCount) */ +} xieGetClientDataReply; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + CARD32 nameSpace B32; + CARD32 floID B32; +} xieQueryPhotofloReq; + +typedef struct { + CARD8 type; + CARD8 state; + CARD16 sequenceNum B16; + CARD32 length B32; + CARD16 expectedCount B16; + CARD16 availableCount B16; + CARD8 pad[20]; + /* LISTofPhototag (expectedCount) */ + /* pad (expectedCount * 2) */ + /* LISTofPhototag (availableCount) */ + /* pad (availableCount * 2) */ +} xieQueryPhotofloReply; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + CARD32 nameSpace B32; + CARD32 floID B32; +} xieAwaitReq; + +typedef struct { + CARD8 reqType; + CARD8 opcode; + CARD16 length B16; + CARD32 nameSpace B32; + CARD32 floID B32; +} xieAbortReq; + + +/* + * Request codes + */ + +#define X_ieQueryImageExtension 1 +#define X_ieQueryTechniques 2 +#define X_ieCreateColorList 3 +#define X_ieDestroyColorList 4 +#define X_iePurgeColorList 5 +#define X_ieQueryColorList 6 +#define X_ieCreateLUT 7 +#define X_ieDestroyLUT 8 +#define X_ieCreatePhotomap 9 +#define X_ieDestroyPhotomap 10 +#define X_ieQueryPhotomap 11 +#define X_ieCreateROI 12 +#define X_ieDestroyROI 13 +#define X_ieCreatePhotospace 14 +#define X_ieDestroyPhotospace 15 +#define X_ieExecuteImmediate 16 +#define X_ieCreatePhotoflo 17 +#define X_ieDestroyPhotoflo 18 +#define X_ieExecutePhotoflo 19 +#define X_ieModifyPhotoflo 20 +#define X_ieRedefinePhotoflo 21 +#define X_iePutClientData 22 +#define X_ieGetClientData 23 +#define X_ieQueryPhotoflo 24 +#define X_ieAwait 25 +#define X_ieAbort 26 + +#define xieNumProtoReq 26 + + +/* + * Events + */ +typedef struct { + CARD8 event; + xieTypPhotofloOutcome outcome; + CARD16 sequenceNum B16; + CARD32 time B32; + CARD32 instanceNameSpace B32; + CARD32 instanceFloID B32; + CARD8 pad[16]; +} xiePhotofloDoneEvn; + +typedef struct { + CARD8 event; + CARD8 pad1; + CARD16 sequenceNum B16; + CARD32 time B32; + CARD32 instanceNameSpace B32; + CARD32 instanceFloID B32; + xieTypPhototag src B16; + CARD16 type B16; + CARD32 pad2 B32; + CARD32 pad3 B16; + CARD32 pad4 B32; +} xieFloEvn; + +typedef struct { + CARD8 event; + CARD8 pad1; + CARD16 sequenceNum B16; + CARD32 time B32; + CARD32 instanceNameSpace B32; + CARD32 instanceFloID B32; + xieTypPhototag src B16; + CARD16 type B16; + xieTypColorList colorList B32; + xieTypColorAllocTechnique colorAllocTechnique B16; + CARD16 pad2 B16; + CARD32 data B32; +} xieColorAllocEvn; + +typedef struct { + CARD8 event; + CARD8 bandNumber; + CARD16 sequenceNum B16; + CARD32 time B32; + CARD32 instanceNameSpace B32; + CARD32 instanceFloID B32; + xieTypPhototag src B16; + CARD16 type B16; + xieTypDecodeTechnique decodeTechnique B16; + BOOL aborted; + CARD8 pad; + CARD32 width B32; + CARD32 height B32; +} xieDecodeNotifyEvn; + +typedef struct { + CARD8 event; + CARD8 bandNumber; + CARD16 sequenceNum B16; + CARD32 time B32; + CARD32 instanceNameSpace B32; + CARD32 instanceFloID B32; + xieTypPhototag src B16; + CARD16 type B16; + CARD32 data0 B32; + CARD32 data1 B32; + CARD32 data2 B32; +} xieExportAvailableEvn; + +typedef struct { + CARD8 event; + CARD8 pad; + CARD16 sequenceNum B16; + CARD32 time B32; + CARD32 instanceNameSpace B32; + CARD32 instanceFloID B32; + xieTypPhototag src B16; + CARD16 type B16; + Window window B32; + INT16 x B16; + INT16 y B16; + CARD16 width B16; + CARD16 height B16; +} xieImportObscuredEvn; + + +/* + * Errors + */ +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 resourceID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 pad[21]; +} xieResourceErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + xieTypPhototag phototag B16; + CARD16 type B16; + CARD32 resourceID B32; + CARD8 pad[8]; +} xieFloResourceErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + xieTypPhototag phototag B16; + CARD16 type B16; + CARD8 pad[12]; +} xieFloErr, xieFloAccessErr, xieFloAllocErr, xieFloElementErr, + xieFloLengthErr, xieFloMatchErr, xieFloSourceErr, xieFloImplementationErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + xieTypPhototag phototag B16; + CARD16 type B16; + xieTypPhototag domainSrc B16; + CARD8 pad[10]; +} xieFloDomainErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + CARD8 pad[16]; +} xieFloIDErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + xieTypPhototag phototag B16; + CARD16 type B16; + CARD8 operator; + CARD8 pad[11]; +} xieFloOperatorErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + xieTypPhototag phototag B16; + CARD16 type B16; + CARD16 techniqueNumber B16; + CARD16 lenTechParams B16; + CARD8 techniqueGroup; + CARD8 pad[7]; +} xieFloTechniqueErr; + +typedef struct { + CARD8 error; + CARD8 code; + CARD16 sequenceNum B16; + CARD32 floID B32; + CARD16 minorOpcode B16; + CARD8 majorOpcode; + CARD8 floErrorCode; + CARD32 nameSpace B32; + xieTypPhototag phototag B16; + CARD16 type B16; + CARD32 badValue B32; + CARD8 pad[8]; +} xieFloValueErr; + + + +/* + * SIZEOF values + */ +#define sz_xieReq 4 +#define sz_xieQueryImageExtensionReq 8 +#define sz_xieQueryImageExtensionReply 32 +#define sz_xieQueryTechniquesReq 8 +#define sz_xieQueryTechniquesReply 32 +#define sz_xieCreateColorListReq 8 +#define sz_xieDestroyColorListReq 8 +#define sz_xiePurgeColorListReq 8 +#define sz_xieQueryColorListReq 8 +#define sz_xieQueryColorListReply 32 +#define sz_xieCreateLUTReq 8 +#define sz_xieDestroyLUTReq 8 +#define sz_xieCreatePhotomapReq 8 +#define sz_xieDestroyPhotomapReq 8 +#define sz_xieQueryPhotomapReq 8 +#define sz_xieQueryPhotomapReply 48 +#define sz_xieCreateROIReq 8 +#define sz_xieDestroyROIReq 8 +#define sz_xieCreatePhotospaceReq 8 +#define sz_xieDestroyPhotospaceReq 8 +#define sz_xieExecuteImmediateReq 16 +#define sz_xieCreatePhotofloReq 12 +#define sz_xieDestroyPhotofloReq 8 +#define sz_xieExecutePhotofloReq 12 +#define sz_xieModifyPhotofloReq 12 +#define sz_xieRedefinePhotofloReq 12 +#define sz_xiePutClientDataReq 20 +#define sz_xieGetClientDataReq 20 +#define sz_xieGetClientDataReply 32 +#define sz_xieQueryPhotofloReq 12 +#define sz_xieQueryPhotofloReply 32 +#define sz_xieAwaitReq 12 +#define sz_xieAbortReq 12 + +#define sz_xiePhotofloDoneEvn 32 +#define sz_xieColorAllocEvn 32 +#define sz_xieDecodeNotifyEvn 32 +#define sz_xieExportAvailableEvn 32 +#define sz_xieImportObscuredEvn 32 +#define sz_xieFloEvn 32 + +#define sz_xieResourceErr 32 +#define sz_xieFloAccessErr 32 +#define sz_xieFloAllocErr 32 +#define sz_xieFloElementErr 32 +#define sz_xieFloIDErr 32 +#define sz_xieFloLengthErr 32 +#define sz_xieFloMatchErr 32 +#define sz_xieFloSourceErr 32 +#define sz_xieFloDomainErr 32 +#define sz_xieFloOperatorErr 32 +#define sz_xieFloTechniqueErr 32 +#define sz_xieFloValueErr 32 +#define sz_xieFloImplementationErr 32 +#define sz_xieFloErr 32 + +#undef Drawable +#undef Colormap +#undef GContext + +#endif /* _XIEPROTO_H_ */ diff --git a/xie/build/include/X11/extensions/XIEprotost.h b/xie/build/include/X11/extensions/XIEprotost.h new file mode 100644 index 0000000..2298afe --- /dev/null +++ b/xie/build/include/X11/extensions/XIEprotost.h @@ -0,0 +1,1118 @@ +/* $XConsortium: XIEprotost.h,v 1.6 94/04/17 20:11:12 mor Exp $ */ +/****************************************************************************** + + +Copyright (c) 1993, 1994 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + + + NOTICE + +This software is being provided by AGE Logic, Inc. under the +following license. By obtaining, using and/or copying this software, +you agree that you have read, understood, and will comply with these +terms and conditions: + + Permission to use, copy, modify, distribute and sell this + software and its documentation for any purpose and without + fee or royalty and to grant others any or all rights granted + herein is hereby granted, provided that you agree to comply + with the following copyright notice and statements, including + the disclaimer, and that the same appears on all copies and + derivative works of the software and documentation you make. + + "Copyright 1993, 1994 by AGE Logic, Inc." + + THIS SOFTWARE IS PROVIDED "AS IS". AGE LOGIC MAKES NO + REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. By way of + example, but not limitation, AGE LOGIC MAKE NO + REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE SOFTWARE DOES NOT + INFRINGE THIRD-PARTY PROPRIETARY RIGHTS. AGE LOGIC + SHALL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE. IN NO + EVENT SHALL EITHER PARTY BE LIABLE FOR ANY INDIRECT, + INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS + OF PROFITS, REVENUE, DATA OR USE, INCURRED BY EITHER PARTY OR + ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT OR + BASED ON A WARRANTY, EVEN IF AGE LOGIC LICENSEES + HEREUNDER HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + + The name of AGE Logic, Inc. may not be used in + advertising or publicity pertaining to this software without + specific, written prior permission from AGE Logic. + + Title to this software shall at all times remain with AGE + Logic, Inc. + + +******************************************************************************/ + +#ifndef _XIEPROTOST_H_ +#define _XIEPROTOST_H_ + +#include /* defines things like CARD32 */ + +#define Drawable CARD32 +#define Colormap CARD32 +#define GContext CARD32 + +typedef CARD32 xieTypFloat; + +#ifndef WORD64 + +typedef xieTypFloat xieTypConstant[3]; + +typedef xieTypFloat xieTypMatrix[9]; + +#else /* WORD64 */ + +typedef CARD8 xieTypConstant[12]; + +typedef CARD8 xieTypMatrix[36]; + +#endif /* WORD64 */ + + +typedef CARD8 xieTypAlignment; + +typedef CARD8 xieTypArithmeticOp; + +typedef CARD16 xieTypColorAllocTechnique; + +typedef CARD32 xieTypColorList; + +typedef CARD8 xieTypCompareOp; + +typedef CARD16 xieTypConstrainTechnique; + +typedef CARD16 xieTypConvertFromRGBTechnique; + +typedef CARD16 xieTypConvertToRGBTechnique; + +typedef CARD16 xieTypConvolveTechnique; + +typedef CARD8 xieTypDataClass; + +typedef CARD8 xieTypDataType; + +typedef CARD16 xieTypDecodeTechnique; + +typedef CARD16 xieTypDitherTechnique; + +typedef CARD16 xieTypEncodeTechnique; + +typedef CARD32 xieTypPhotospace; + +typedef CARD32 xieTypPhotoflo; + +typedef struct { + union { + struct { + xieTypPhotospace nameSpace B32; + CARD32 floID B32; + } immed; + struct { + CARD32 nameSpace B32; + xieTypPhotoflo floID B32; + } stored; + } u; +} xieTypExecutable; + +typedef CARD8 xieTypExportNotify; + +typedef CARD8 xieTypExportState; + +typedef CARD16 xieTypGamutTechnique; + +typedef CARD16 xieTypGeometryTechnique; + +typedef struct { + CARD32 value B32; + CARD32 count B32; +} xieTypHistogramData; + +typedef CARD16 xieTypHistogramShape; + +typedef CARD8 xieTypInterleave; + +typedef CARD32 xieTypLevels[3]; + +typedef CARD32 xieTypLUT; + +typedef CARD8 xieTypMathOp; + +typedef CARD8 xieTypOrientation; + +typedef CARD8 xieTypPhotofloOutcome; + +typedef CARD8 xieTypPhotofloState; + +typedef CARD32 xieTypPhotomap; + +typedef CARD16 xieTypPhototag; + +typedef struct { + INT32 offsetX B32; + INT32 offsetY B32; + xieTypPhototag domain B16; +} xieTypProcessDomain; + +typedef struct { + INT32 x B32; + INT32 y B32; + CARD32 width B32; + CARD32 height B32; +} xieTypRectangle; + +typedef CARD32 xieTypROI; + +typedef CARD8 xieTypServiceClass; + +typedef CARD8 xieTypTechniqueGroup; + +typedef struct { + BOOL needsParam; + xieTypTechniqueGroup group; + CARD16 number B16; + CARD8 speed; + CARD8 nameLength; + CARD16 pad B16; + /* LISTofCARD8 (nameLength) */ + /* pad (nameLength) */ +} xieTypTechniqueRec; + +typedef struct { + xieTypPhototag src B16; + CARD16 pad B16; + INT32 dstX B32; + INT32 dstY B32; +} xieTypTile; + +typedef CARD8 xieTypTripleofCARD8[3]; + +typedef CARD16 xieTypTripleofCARD16[3]; + +typedef CARD32 xieTypTripleofCARD32[3]; + +typedef CARD16 xieTypWhiteAdjustTechnique; + + +/* + * Generic Element + */ + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; +} xieFlo; + +/* + * Import Elements + */ +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypDataClass class; + xieTypOrientation bandOrder; + CARD16 pad B16; + CARD32 length0 B32; + CARD32 length1 B32; + CARD32 length2 B32; + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; +} xieFloImportClientLUT; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + BOOL notify; + xieTypDataClass class; + CARD16 pad B16; + CARD32 width0 B32; + CARD32 width1 B32; + CARD32 width2 B32; + CARD32 height0 B32; + CARD32 height1 B32; + CARD32 height2 B32; + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypDecodeTechnique decodeTechnique B16; + CARD16 lenParams B16; + /* Technique dependent decode params */ +} xieFloImportClientPhoto; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + CARD32 rectangles B32; +} xieFloImportClientROI; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + Drawable drawable B32; + INT16 srcX B16; + INT16 srcY B16; + CARD16 width B16; + CARD16 height B16; + CARD32 fill B32; + BOOL notify; + CARD8 pad[3]; +} xieFloImportDrawable; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + Drawable drawable B32; + INT16 srcX B16; + INT16 srcY B16; + CARD16 width B16; + CARD16 height B16; + CARD32 fill B32; + CARD32 bitPlane B32; + BOOL notify; + CARD8 pad[3]; +} xieFloImportDrawablePlane; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypLUT lut B32; +} xieFloImportLUT; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhotomap photomap B32; + BOOL notify; + CARD8 pad[3]; +} xieFloImportPhotomap; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypROI roi B32; +} xieFloImportROI; + + +/* + * Process Elements + */ +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src1 B16; + xieTypPhototag src2 B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + xieTypArithmeticOp operator; + CARD8 bandMask; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; +} xieFloArithmetic; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src1 B16; + xieTypPhototag src2 B16; + xieTypPhototag src3 B16; + CARD16 pad B16; +} xieFloBandCombine; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + CARD32 levels B32; + xieTypFloat bias B32; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; +} xieFloBandExtract; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD8 bandNumber; + CARD8 pad; +} xieFloBandSelect; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src1 B16; + xieTypPhototag src2 B16; + xieTypPhototag alpha B16; + CARD16 pad1 B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + CARD8 bandMask; + CARD8 pad2; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; + xieTypFloat alphaConst B32; +} xieFloBlend; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src1 B16; + xieTypPhototag src2 B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + xieTypCompareOp operator; + BOOL combine; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; + CARD8 bandMask; + CARD8 pad[3]; +} xieFloCompare; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypConstrainTechnique constrain B16; + CARD16 lenParams B16; + /* Technique dependent constrain params */ +} xieFloConstrain; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + xieTypDataClass class; + CARD8 precision; + Colormap colormap B32; +} xieFloConvertFromIndex; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + xieTypConvertFromRGBTechnique convert B16; + CARD16 lenParams B16; + /* Technique dependent conversion params */ +} xieFloConvertFromRGB; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + BOOL notify; + CARD8 pad; + Colormap colormap B32; + xieTypColorList colorList B32; + xieTypColorAllocTechnique colorAlloc B16; + CARD16 lenParams B16; + /* Technique dependent color alloc params */ +} xieFloConvertToIndex; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + xieTypConvertToRGBTechnique convert B16; + CARD16 lenParams B16; + /* Technique dependent conversion params */ +} xieFloConvertToRGB; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + CARD8 bandMask; + CARD8 kernelSize; + xieTypConvolveTechnique convolve B16; + CARD16 lenParams B16; + /* LISTofFloat (kernelSize^2) */ + /* Technique dependent convolve params */ +} xieFloConvolve; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD8 bandMask; + CARD8 pad; + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypDitherTechnique dither B16; + CARD16 lenParams B16; + /* Technique dependent dither params */ +} xieFloDither; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD8 bandMask; + CARD8 pad; + CARD32 width B32; + CARD32 height B32; + xieTypFloat a B32; + xieTypFloat b B32; + xieTypFloat c B32; + xieTypFloat d B32; + xieTypFloat tx B32; + xieTypFloat ty B32; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; + xieTypGeometryTechnique sample B16; + CARD16 lenParams B16; + /* Technique dependent sample params */ +} xieFloGeometry; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src1 B16; + xieTypPhototag src2 B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + CARD8 operator; + CARD8 bandMask; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; +} xieFloLogical; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad1 B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + CARD16 pad2 B16; + xieTypHistogramShape shape B16; + CARD16 lenParams B16; + /* Technique dependent shape params */ +} xieFloMatchHistogram; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + xieTypMathOp operator; + CARD8 bandMask; +} xieFloMath; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + CARD16 numTiles B16; + CARD16 pad B16; + CARD32 width B32; + CARD32 height B32; + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; + /* LISTofTile (numTiles) */ +} xieFloPasteUp; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + xieTypPhototag lut B16; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + CARD8 bandMask; + CARD8 pad; +} xieFloPoint; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; +} xieFloUnconstrain; + + +/* + * Export Elements + */ +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + xieTypExportNotify notify; + CARD8 pad1; + INT32 domainOffsetX B32; + INT32 domainOffsetY B32; + xieTypPhototag domainPhototag B16; + CARD16 pad2 B16; +} xieFloExportClientHistogram; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + xieTypExportNotify notify; + xieTypOrientation bandOrder; + CARD32 start0 B32; + CARD32 start1 B32; + CARD32 start2 B32; + CARD32 length0 B32; + CARD32 length1 B32; + CARD32 length2 B32; +} xieFloExportClientLUT; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + xieTypExportNotify notify; + CARD8 pad; + xieTypEncodeTechnique encodeTechnique B16; + CARD16 lenParams B16; + /* Technique dependent encode params */ +} xieFloExportClientPhoto; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + xieTypExportNotify notify; + CARD8 pad; +} xieFloExportClientROI; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + INT16 dstX B16; + INT16 dstY B16; + CARD16 pad B16; + Drawable drawable B32; + GContext gc B32; +} xieFloExportDrawable; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + INT16 dstX B16; + INT16 dstY B16; + CARD16 pad B16; + Drawable drawable B32; + GContext gc B32; +} xieFloExportDrawablePlane; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD8 merge; + CARD8 pad; + xieTypLUT lut B32; + CARD32 start0 B32; + CARD32 start1 B32; + CARD32 start2 B32; +} xieFloExportLUT; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + xieTypPhotomap photomap B32; + xieTypEncodeTechnique encodeTechnique B16; + CARD16 lenParams B16; + /* Technique dependent encode params */ +} xieFloExportPhotomap; + +typedef struct { + CARD16 elemType B16; + CARD16 elemLength B16; + xieTypPhototag src B16; + CARD16 pad B16; + xieTypROI roi B32; +} xieFloExportROI; + + +/* + * Technique Parameters + */ + +typedef struct { + xieTypFloat inputLow0 B32; + xieTypFloat inputLow1 B32; + xieTypFloat inputLow2 B32; + xieTypFloat inputHigh0 B32; + xieTypFloat inputHigh1 B32; + xieTypFloat inputHigh2 B32; + CARD32 outputLow0 B32; + CARD32 outputLow1 B32; + CARD32 outputLow2 B32; + CARD32 outputHigh0 B32; + CARD32 outputHigh1 B32; + CARD32 outputHigh2 B32; +} xieTecClipScale; + +typedef struct { + CARD32 fill B32; +} xieTecColorAllocAll; + +typedef struct { + xieTypFloat matchLimit B32; + xieTypFloat grayLimit B32; +} xieTecColorAllocMatch; + +typedef struct { + CARD32 maxCells B32; +} xieTecColorAllocRequantize; + +typedef struct { + xieTypFloat matrix00 B32; + xieTypFloat matrix01 B32; + xieTypFloat matrix02 B32; + xieTypFloat matrix10 B32; + xieTypFloat matrix11 B32; + xieTypFloat matrix12 B32; + xieTypFloat matrix20 B32; + xieTypFloat matrix21 B32; + xieTypFloat matrix22 B32; + xieTypWhiteAdjustTechnique whiteAdjusted B16; + CARD16 lenParams B16; + /* Technique dependent white params */ +} xieTecRGBToCIELab, xieTecRGBToCIEXYZ; + +typedef struct { + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypFloat lumaRed B32; + xieTypFloat lumaGreen B32; + xieTypFloat lumaBlue B32; + xieTypFloat bias0 B32; + xieTypFloat bias1 B32; + xieTypFloat bias2 B32; +} xieTecRGBToYCbCr; + +typedef struct { + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypFloat lumaRed B32; + xieTypFloat lumaGreen B32; + xieTypFloat lumaBlue B32; + xieTypFloat scale B32; +} xieTecRGBToYCC; + +typedef struct { + xieTypFloat matrix00 B32; + xieTypFloat matrix01 B32; + xieTypFloat matrix02 B32; + xieTypFloat matrix10 B32; + xieTypFloat matrix11 B32; + xieTypFloat matrix12 B32; + xieTypFloat matrix20 B32; + xieTypFloat matrix21 B32; + xieTypFloat matrix22 B32; + xieTypWhiteAdjustTechnique whiteAdjusted B16; + CARD16 lenWhiteParams B16; + xieTypGamutTechnique gamutCompress B16; + CARD16 lenGamutParams B16; + /* Technique dependent white params */ + /* Technique dependent gamut params */ +} xieTecCIELabToRGB, xieTecCIEXYZToRGB; + +typedef struct { + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypFloat lumaRed B32; + xieTypFloat lumaGreen B32; + xieTypFloat lumaBlue B32; + xieTypFloat bias0 B32; + xieTypFloat bias1 B32; + xieTypFloat bias2 B32; + xieTypGamutTechnique gamutCompress B16; + CARD16 lenGamutParams B16; + /* Technique dependent gamut params */ +} xieTecYCbCrToRGB; + +typedef struct { + CARD32 levels0 B32; + CARD32 levels1 B32; + CARD32 levels2 B32; + xieTypFloat lumaRed B32; + xieTypFloat lumaGreen B32; + xieTypFloat lumaBlue B32; + xieTypFloat scale B32; + xieTypGamutTechnique gamutCompress B16; + CARD16 lenGamutParams B16; + /* Technique dependent gamut params */ +} xieTecYCCToRGB; + +typedef struct { + xieTypFloat constant0 B32; + xieTypFloat constant1 B32; + xieTypFloat constant2 B32; +} xieTecConvolveConstant; + +typedef struct { + xieTypOrientation fillOrder; + xieTypOrientation pixelOrder; + CARD8 pixelStride; + CARD8 leftPad; + CARD8 scanlinePad; + CARD8 pad[3]; +} xieTecDecodeUncompressedSingle; + +typedef struct { + CARD8 leftPad[3]; + xieTypOrientation fillOrder; + CARD8 pixelStride[3]; + xieTypOrientation pixelOrder; + CARD8 scanlinePad[3]; + xieTypOrientation bandOrder; + xieTypInterleave interleave; + CARD8 pad[3]; +} xieTecDecodeUncompressedTriple; + +typedef struct { + xieTypOrientation encodedOrder; + BOOL normal; + BOOL radiometric; + CARD8 pad; +} xieTecDecodeG31D, xieTecDecodeG32D, xieTecDecodeG42D, + xieTecDecodeTIFF2; + +typedef struct { + xieTypOrientation encodedOrder; + BOOL normal; + CARD16 pad B16; +} xieTecDecodeTIFFPackBits; + +typedef struct { + xieTypInterleave interleave; + xieTypOrientation bandOrder; + BOOL upSample; + CARD8 pad; +} xieTecDecodeJPEGBaseline; + +typedef struct { + xieTypInterleave interleave; + xieTypOrientation bandOrder; + CARD16 pad B16; +} xieTecDecodeJPEGLossless; + +typedef struct { + CARD8 thresholdOrder; + CARD8 pad[3]; +} xieTecDitherOrdered; + +typedef struct { + CARD8 preference; + CARD8 pad[3]; +} xieTecEncodeServerChoice; + +typedef struct { + xieTypOrientation fillOrder; + xieTypOrientation pixelOrder; + CARD8 pixelStride; + CARD8 scanlinePad; +} xieTecEncodeUncompressedSingle; + +typedef struct { + CARD8 pixelStride[3]; + xieTypOrientation pixelOrder; + CARD8 scanlinePad[3]; + xieTypOrientation fillOrder; + xieTypOrientation bandOrder; + xieTypInterleave interleave; + CARD16 pad B16; +} xieTecEncodeUncompressedTriple; + +typedef struct { + xieTypOrientation encodedOrder; + BOOL alignEol; + BOOL radiometric; + CARD8 pad; +} xieTecEncodeG31D; + +typedef struct { + xieTypOrientation encodedOrder; + BOOL alignEol; + BOOL radiometric; + BOOL uncompressed; + CARD32 kFactor B32; +} xieTecEncodeG32D; + +typedef struct { + xieTypOrientation encodedOrder; + BOOL radiometric; + BOOL uncompressed; + CARD8 pad; +} xieTecEncodeG42D; + +typedef struct { + xieTypInterleave interleave; + xieTypOrientation bandOrder; + CARD8 horizontalSamples[3]; + CARD8 verticalSamples[3]; + CARD16 lenQtable B16; /* multiple of 4 */ + CARD16 lenACtable B16; /* multiple of 4 */ + CARD16 lenDCtable B16; /* multiple of 4 */ + CARD16 pad B16; + /* LISTofCARD8 (Qtable) */ + /* LISTofCARD8 (ACtable) */ + /* LISTofCARD8 (DCtable) */ +} xieTecEncodeJPEGBaseline; + +typedef struct { + xieTypInterleave interleave; + xieTypOrientation bandOrder; + CARD16 lenTable B16; /* multiple of 4 */ + CARD8 predictor[3]; + CARD8 pad; + /* LISTofCARD8 (table) */ +} xieTecEncodeJPEGLossless; + +typedef struct { + xieTypOrientation encodedOrder; + BOOL radiometric; + CARD16 pad B16; +} xieTecEncodeTIFF2; + +typedef struct { + xieTypOrientation encodedOrder; + CARD8 pad[3]; +} xieTecEncodeTIFFPackBits; + +typedef struct { + INT16 simple B16; + CARD16 pad B16; +} xieTecGeomAntialiasByArea; + +typedef struct { + INT16 kernelSize B16; + CARD16 pad B16; +} xieTecGeomAntialiasByLowpass; + +typedef struct { + CARD8 radius; + BOOL simple; + CARD16 pad B16; + xieTypFloat sigma B32; + xieTypFloat normalize B32; +} xieTecGeomGaussian; + +typedef struct { + CARD8 modify; + CARD8 pad[3]; +} xieTecGeomNearestNeighbor; + +typedef struct { + xieTypFloat mean B32; + xieTypFloat sigma B32; +} xieTecHistogramGaussian; + +typedef struct { + BOOL shapeFactor; + CARD8 pad[3]; + xieTypFloat constant B32; +} xieTecHistogramHyperbolic; + +typedef struct { + xieTypFloat whitePoint0 B32; + xieTypFloat whitePoint1 B32; + xieTypFloat whitePoint2 B32; +} xieTecWhiteAdjustCIELabShift; + + +/* + * SIZEOF values + */ +#define sz_xieTypAlignment 1 +#define sz_xieTypArithmeticOp 1 +#define sz_xieTypColorAllocTechnique 2 +#define sz_xieTypColorList 4 +#define sz_xieTypCompareOp 1 +#define sz_xieTypConstant 12 +#define sz_xieTypConstrainTechnique 2 +#define sz_xieTypConvertFromRGBTechnique 2 +#define sz_xieTypConvertToRGBTechnique 2 +#define sz_xieTypConvolveTechnique 2 +#define sz_xieTypDataClass 1 +#define sz_xieTypDataType 1 +#define sz_xieTypDecodeTechnique 2 +#define sz_xieTypDitherTechnique 2 +#define sz_xieTypEncodeTechnique 2 +#define sz_xieTypPhotospace 4 +#define sz_xieTypPhotoflo 4 +#define sz_xieTypExecutable 8 +#define sz_xieTypExportNotify 1 +#define sz_xieTypExportState 1 +#define sz_xieTypFloat 4 +#define sz_xieTypGamutTechnique 2 +#define sz_xieTypGeometryTechnique 2 +#define sz_xieTypHistogramData 8 +#define sz_xieTypHistogramShape 2 +#define sz_xieTypInterleave 1 +#define sz_xieTypLevels 12 +#define sz_xieTypLUT 4 +#define sz_xieTypMathOp 1 +#define sz_xieTypMatrix 36 +#define sz_xieTypOrientation 1 +#define sz_xieTypPhotofloOutcome 1 +#define sz_xieTypPhotofloState 1 +#define sz_xieTypPhotomap 4 +#define sz_xieTypPhototag 2 +#define sz_xieTypProcessDomain 12 +#define sz_xieTypRectangle 16 +#define sz_xieTypROI 4 +#define sz_xieTypServiceClass 1 +#define sz_xieTypTechniqueGroup 1 +#define sz_xieTypTechniqueRec 8 +#define sz_xieTypTile 12 +#define sz_xieTypTripleofCARD8 3 +#define sz_xieTypTripleofCARD16 6 +#define sz_xieTypTripleofCARD32 12 +#define sz_xieTypWhiteAdjustTechnique 2 +#define sz_xieFloImportClientLUT 32 +#define sz_xieFloImportClientPhoto 48 +#define sz_xieFloImportClientROI 8 +#define sz_xieFloImportDrawable 24 +#define sz_xieFloImportDrawablePlane 28 +#define sz_xieFloImportLUT 8 +#define sz_xieFloImportPhotomap 12 +#define sz_xieFloImportROI 8 +#define sz_xieFloArithmetic 32 +#define sz_xieFloBandCombine 12 +#define sz_xieFloBandExtract 28 +#define sz_xieFloBandSelect 8 +#define sz_xieFloBlend 40 +#define sz_xieFloCompare 36 +#define sz_xieFloConstrain 24 +#define sz_xieFloConvertFromIndex 12 +#define sz_xieFloConvertFromRGB 12 +#define sz_xieFloConvertToIndex 20 +#define sz_xieFloConvertToRGB 12 +#define sz_xieFloConvolve 24 +#define sz_xieFloDither 24 +#define sz_xieFloGeometry 56 +#define sz_xieFloLogical 32 +#define sz_xieFloMatchHistogram 24 +#define sz_xieFloMath 20 +#define sz_xieFloPasteUp 28 +#define sz_xieFloPoint 20 +#define sz_xieFloUnconstrain 8 +#define sz_xieFloExportClientHistogram 20 +#define sz_xieFloExportClientLUT 32 +#define sz_xieFloExportClientPhoto 12 +#define sz_xieFloExportClientROI 8 +#define sz_xieFloExportDrawable 20 +#define sz_xieFloExportDrawablePlane 20 +#define sz_xieFloExportLUT 24 +#define sz_xieFloExportPhotomap 16 +#define sz_xieFloExportROI 12 +#define sz_xieTecColorAllocAll 4 +#define sz_xieTecColorAllocMatch 8 +#define sz_xieTecColorAllocRequantize 4 +#define sz_xieTecClipScale 48 +#define sz_xieTecHardClip 0 +#define sz_xieTecRGBToCIELab 40 +#define sz_xieTecRGBToCIEXYZ 40 +#define sz_xieTecRGBToYCbCr 36 +#define sz_xieTecRGBToYCC 28 +#define sz_xieTecYCbCrToRGB 40 +#define sz_xieTecYCCToRGB 32 +#define sz_xieTecCIELabToRGB 44 +#define sz_xieTecCIEXYZToRGB 44 +#define sz_xieTecConvolveConstant 12 +#define sz_xieTecConvolveReplicate 0 +#define sz_xieTecDecodeUncompressedSingle 8 +#define sz_xieTecDecodeUncompressedTriple 16 +#define sz_xieTecDecodeG31D 4 +#define sz_xieTecDecodeG32D 4 +#define sz_xieTecDecodeG42D 4 +#define sz_xieTecDecodeTIFF2 4 +#define sz_xieTecDecodeTIFFPackBits 4 +#define sz_xieTecDecodeJPEGBaseline 4 +#define sz_xieTecDecodeJPEGLossless 4 +#define sz_xieTecDitherOrdered 4 +#define sz_xieTecDitherErrorDiffusion 4 +#define sz_xieTecEncodeServerChoice 4 +#define sz_xieTecEncodeUncompressedSingle 4 +#define sz_xieTecEncodeUncompressedTriple 12 +#define sz_xieTecEncodeG31D 4 +#define sz_xieTecEncodeG32D 8 +#define sz_xieTecEncodeG42D 4 +#define sz_xieTecEncodeJPEGBaseline 16 +#define sz_xieTecEncodeJPEGLossless 8 +#define sz_xieTecEncodeTIFF2 4 +#define sz_xieTecEncodeTIFFPackBits 4 +#define sz_xieTecGamutNone 0 +#define sz_xieTecGamutClipRGB 0 +#define sz_xieTecGeomAntialias 0 +#define sz_xieTecGeomAntialiasByArea 4 +#define sz_xieTecGeomAntialiasByLowpass 4 +#define sz_xieTecGeomBilinearInterpolation 0 +#define sz_xieTecGeomGaussian 12 +#define sz_xieTecGeomNearestNeighbor 4 +#define sz_xieTecHistogramFlat 0 +#define sz_xieTecHistogramGaussian 8 +#define sz_xieTecHistogramHyperbolic 8 +#define sz_xieTecWhiteAdjustNone 0 +#define sz_xieTecWhiteAdjustCIELabShift 12 + +#undef Drawable +#undef Colormap +#undef GContext + +#endif /* _XIEPROTOST_H_ */ diff --git a/xie/build/init.o b/xie/build/init.o new file mode 100644 index 0000000000000000000000000000000000000000..cb7d582661c37c6d7122f11700e6fa8dc7340d24 GIT binary patch literal 15936 zcmeI3e{@^beZZe2|4`%1&xVw^kPy)-G=;=i`2jXzL9!(K2^3;t2TXz5iu@F-$dV$< z!4S>}C<=L11m4O9h11h)-Fm_(E3Ac3I$DQ7Qo1yll&!SkEIH$_MNKwBGiWFj@B6*) zUg@hB-FEwP=j@)Ncklh&@BQBI{q=qCT}k%_!##GJO%cJStWhdCK^4W@Mba$kRpu$@ zEB#twA!a>CwEWQt*U2GukynYu+SNtdnUq%Ww`s;NwfuB8pc(tMuGJH#7|S2YuGWn1 zHpsMSg-O>56xRw{Tg-%UjK$BREw}Ek=<`h9x*wa+jC!naa@yKn?i93lo7<@wXSBj9 zl+p4ZsLYs<@w(QvCi_LL(9;G6soO8DgHq$Ylglhhs_gFrefzZh5mSd|%xGPm6DPC+ za%O{O+z81ud=7wSr}|vKtKglRn{McODGOagTXHYA?T@L80*VqgUVWh%jQSyVENo=m zEn4x9(aN>PVbaLb`|_?t@vr=TD0zd%{DW8JZ!x8!W;msCa=V5#HOn3?O&o5 zS--=^Z#>gXqR`*LGQ5DZmFF_QJ9om7JFDK=W^G-}XSe_+moA;1oz)8com?U7BxqxW zo@wlE32m=PP+P7!x7~j4AJ9Y^JNc(Hv%S*B$(Kk$X|&qJ(x4@;L7vpzLF+EH$S#09 z4*z+zhQDNdVwQfYX6YTg^p9$muH~gQC$@A2FKw(@x0RR9tyy~JccxXfOaF@iT&OOp_MgK4WN%}>rw#q5#rI5t7xlJiMi5)gHfYAN z*_)g%poh^40e9z!c6l8$QO%FA=Ft2C*bcrd_wpd~r(t8n-KQN4LLFwi&?5FF_s1dQ zW#&1bg^p>3oY|l0Y&|yF@*@}2WzOYCosbF}!{CJjZYM)pVE`Oqq3|^7M@x-vaE{!8 zUdZkQMIXqUPOmHXJjki{KV=8$T<%fG*fgWCn^n#+9ffYE=L5Ly7{?0Ux|p%KK`Vl5 zI^eU}cG?d5>~^JI@x02KHeSk4PxKITn+>!DOzv}~_KR=f*vte&4@4j9{JmT)@2`rf&R+ z5rjKKz`f82&PC~qL2ep2+!hl1)Yf222xh7d24;y55_64U2Q!_SXB-3Wg4;`R-k*b= z<`9$aunF&T`U)${Hw`{rKJeBs=;oM~8B9rq71K7>5;j|f?X|I^Hm)n5LB((xOLK*+e)-F?Hyrgwqh|ed; z`NYHHj&XNe=~d`W?fsnZz@qZ#n)}%tS*Noqm`anDLps^_}cWP2AJir_WxKT|reuj>-&v-u!(QwH4T^M#xdL&%9hPf=v zb%u=B&_CK|VV4xy=7(_%b>&ST@ge#MbDTrDJaZKxqqrMJBV^>6v>4-X*A?JJ`C{0< z6Mfhp9$)me2k7%(xNC{!`R^tW0UvA}1l>;NhCD~Y#=GE`ygTD{;F9b+ZO?<1O3d)t zg;RP3oKhrI$O|9Z05!lN0pV*rTaRSsAeaeVIfyr7=x4P*e-_;pOg4@rc=Wz7T!zEo zo6_LfC-=vuKz<&m!TA`($Ia2=$~-D!a{~p;L4#K}<^HWWuTmON_h#K~0b|AW#id)c zeeXCl<6TxQWHbixnfg1RCj?_-dnIhVtuESzde!F~;o?@O&uCDe^V@tzPo28gZ-*GX zpT7>`xe(WD#Yr19%C+^ty4mMbpL;oX)~n|J7PRbfsrhc$S9@C2dSNb46;f}rt?J1?ra7&0yg^DX1�-MX|*+Ao5s`(re-j898umR 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 literal 0 HcmV?d00001 diff --git a/xie/build/libXIE.a b/xie/build/libXIE.a new file mode 100644 index 0000000000000000000000000000000000000000..73b384fd31f7e7f21c6fd52656e985c54425511d GIT binary patch literal 107536 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 T!hfz-;kRo{?dS4eYE1oaT*R5Q literal 0 HcmV?d00001 diff --git a/xie/build/lut.o b/xie/build/lut.o new file mode 100644 index 0000000000000000000000000000000000000000..bd379fd3d6c8b5b98f2dccf03652b452eaf401ca GIT binary patch literal 2664 zcmbtW&2Jk;6o0#Ro271T7Zu5<71={U;cJydsA~9xTkYrjYje@jdiI^78069)0$0c8c_HbNOeF@39~jrdFH zFSVOG2vxtNi@;OW@8#N0V?W*&SAhNOVPs2qKN-UBo;~+tZnTI>x4U6*xkc>n?pUwa zyUSp#zOwND8q%U2&wgjV=Zp{CnYa3#`Hubk2ltLvbE7l6@;_>SjQ`M|=cCqapFP*R zGpH}mp)dXOLKo4(uuURJKW(7$TxQ3jx#{Vb&9S*R%g>q<$E-$?yQ!WAHo`o_R$&AR`S~6{UgRY$Ya2cgeyc(uyZM!zp9tA1ur$1 zHTB>2WeYRed?{dP-pEv7BLm`hFH{YAWo~ZfpcoJ%)$*fjud4HCOrt;E%`RhrI$eg^|Zd z$|(SY@CD!;$K;Jb!hW$)@3__?y}RU0w;bDb=F4wei_Ln4kr}7$wwkMPs86EvAk40~ zCmYqKaO{fH0&=3>Y1ejpatfALB89yZaS!g}PO@Adg5Q@o-z~nQieHxXC*%Au1V6+? zNHWg*5ggW&g013zH3UBxiy!B^30ytXH-_NHWj(Aoj^dlKypj?k^D&(HN-EM|E)R9C z*J3#H)jcAsy}In$7opu&q-)A*Id$7|ofVg?itXBDU2L~01guV@zI4f{uM#fB^0Lza zrO|X93qSoA+pfKMNzOlLbgav*=4Gelf*S^OYUishd)bi%{ZD1WpIfT>rNR}Z@oKzj zz)XoNbr=TUfuaJW?lK5b{ma1SJbdR^_^n`h27~eV88H4yA}?bs%#92GjydL|`cJ@@ zVMd3)%3tY|SWvd&u)gt-`+pDI=KNiv1xB&Yw(oM*`x k{ObO2%;ebvqR-_0vw0GeWUmimZIFLW*8g$Lm(8UAKO$v=NB{r; literal 0 HcmV?d00001 diff --git a/xie/build/photoflo.o b/xie/build/photoflo.o new file mode 100644 index 0000000000000000000000000000000000000000..9dde04db281e90fa3e2c2490b361811b66d38291 GIT binary patch literal 8296 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 literal 0 HcmV?d00001 diff --git a/xie/build/roi.o b/xie/build/roi.o new file mode 100644 index 0000000000000000000000000000000000000000..c914a510d2f173cfc85102257905947497b784d0 GIT binary patch literal 2664 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 literal 0 HcmV?d00001 diff --git a/xie/build/utils.o b/xie/build/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..38f4c22041b7509d96cf413b5f164aa98dbc4859 GIT binary patch literal 1816 zcmbtU%TE(w5T7jtDvxb_97rH^4@!!UO^cBLF{Vp}F4A~FFeHLd>Xs7vO1n)!V>CgG zn~K4sH%|Ty-fYqX#Dg~z67OI_jCwHfV1hHd-`8$7#e+^VJ2Ss|eLM5*J{gORy95C^ z32+1I7Doa0o9cSlRKw5-9iZIZ_$I`*t`VfnOcT_=pgszl{sZzxnE6s z{Wk&hUbXDLKyGil*B^#S!+oIchRyh+kI8MbS*UWf=k-6uAi&e9Tg{}YiDOLtgfkVDcya9}Vv6bfRt8(Bi8QWyd*5GsW6 zSqTpN9Qufahf^S|`GoF{R?jvDUq`IR^Z>jeIV$>Ixng41R@0a$y>w5Af#=N;F}Ts< zinNIVMU+OxE{qu!J<)ayr@C{Lhjh^re|^&V-0^Dt-^Ui6XE^PScFFPAHoV1#zh$_yj%35h$7zu%gc0vB z8|318MvpI{)C-nOajl@Gv52mibaqUxlBgOB9_hRnv8euN>Ps|R++t= zEy?*pF0U2zb&$;pT52I#h-Wn3@xP>m*>rbk7Iq3V`eGU?2pN4(MghS)%Pf7&1A@_fF( yM!l)k9_wEr1Bw1=RMMGG{~_n@5P}!%g(k_c5i46mPNUW+KgGawEz(k)`F{X1k;gIs literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/abort.o b/xie/build/xieperf/abort.o new file mode 100644 index 0000000000000000000000000000000000000000..417928d1c3b395688cbf59d6a7b414964c9d6972 GIT binary patch literal 4336 zcmbtXUu;uV7(eZXlz+DshfZ0fhG|BC+Peq=QEXYe-I^jqwlFhrE8Q)fZ0mA+ivuMt z8AYyj2}a|KK9Hyn`XUcLm}#(a1VSQ-k(j7^Fd8%rOo#~~MwI$}=bo=UoU~7V$-U=0 zzw`Tj=eysz=iK(Sc(U8;@h~zE+s@K6U%_wa`XcpsNMb9X0benDZEyKCSvAAB=FY0CJ zo^3{o^D~Ew<-%vi^f}+a{^-8w{<%5-n&T*Ce8SSx=$`e$O~j?SlI6^A<~PS zc$ng?f?>F^jAF%JB?Y{&2!&`uU;w#kVD1z=7N29ls8Jv}pgrTxU4yTG0C==F;oR&q zoPYN~nTCKhY?Rs_?ZCj!zV?3SvJ|Jj>xOlBLPoLdKfVO&S)4CyN; yXj`k~6XP;8|QYBONf( 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 WSq{TD)J*aZ2>ZXsl~q1e`Tqc?CHKDo literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/await.o b/xie/build/xieperf/await.o new file mode 100644 index 0000000000000000000000000000000000000000..1bdd2fcbbe847b572656ab97141ec40a9c85af1e GIT binary patch literal 8736 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 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/cache.o b/xie/build/xieperf/cache.o new file mode 100644 index 0000000000000000000000000000000000000000..5bea221806771bec2eb52ee17940bfefdd4cd9a9 GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/creatdstry.o b/xie/build/xieperf/creatdstry.o new file mode 100644 index 0000000000000000000000000000000000000000..6d4f73424072214f3b038b0987ca73df04073d91 GIT binary patch literal 7536 zcmchcdu&@*8NiR7qz!%8VJlncis}w;YuRez^q~L)?8Q#5S9dLKBBHe=b^U0fIdQOW z)?{p5P?}12PEnCIX_Gdo(m(>VKZ-N~DjEa=EtA4jVA3jWplu+ruxT5wJwzdV-?`uC zd^zzId!Qca-gD0He6RD}bI(0a?oXz>{63%J;!|Hxi#?`Fo&ES?JEog46;uJ`T%0YO zE)*icjVCmn`t9*dyeIBF+iN-h-XDGb)%Ato#)MK<^*&`e=O<@#P|4yMwy`X@Az_Ykihe40pim`BOhk zB@G=b<^0of4u;!uR&~P-n{k5B+wA;KL@S!^%uv~V0FKTJyu`s1zee5cePd}S7mlTz z%lw3bCyv1zJ@x!(x8+>WFkJb=N0-qDmB ziu1MzsR~x-vkMCgv~THM>0AgVre9jxleEJ8tsqAG8%~4W{S7>70oUKu47s#VFY(7K z$6aoEs1ST(CVeUqZizl^RoyV%74Q1KkO*TSD!2titW#qHu05SfjN7?1|D*pbEa>d( z^em3gpN0V)&mv3fxgLW7)i;>$Eax+JzOz&;mD7V2J5vdPJ!Psym?8PM|Iz>k70?`xAlIlMRVLXtL2>H5+K%bw1FNnhP}FzB(Rg zjR#t83pB@P&(EQ55p|$^5Z&*%svk)APai@zM2UO9G2aS450dWP=-AB=H<>^LfeH~g~!dCK`0zhh!SC_l_j_>1gFoWIzw5zO7Qg1X zid`O$WEFfh`}4*8P=461VCN`)LKS~dd-4@KJ!(fy(5@os&NjS7@us`mu(cg;JMgws zrG^J>_vDZOGv(5_N|cuLYX=JamXpj9W}G`z#m?o+WmPy<9<=kOH8_I^JJfS6V8`&y zhZCV9k*ilDhBBOAgdX)=73>(&+KN8d2&JV^xN`;TnSiHb8XzRpktBz6F5$eJKszVh zu5y0q`AH#JqR-;{?a@ME`D5i_46g2pObuo5pr#67Sas*^zElzx6^eHiOR1reQrV`* z1^wh0_xt-Rb|!mQe|F%memrryud&)jHGbDV3fE;gX=8~CewE<6iNoult`_{T;P`E0 zJC74b`_~BmeZj94{3+t5{fmO*8ItW^O&b#0$KRyPHwlh^=wQB;xM@Eo_$nbkDeU06 zlA4cFqX?X~CZqT+Zt#$Y8eBAt3Liv|LE{&WTadg$(QYMP(}Osf&M}{Gn99y`=Re4uz*ut zVOWY$fAO!@F5u_O;`qBC*IbMN)en>4#7Y<7`+J(&urmfBzoyHvkIwi0Cz8b@d|Yn{jdcEI0uTjK$P%q33QH1ExOyU8dgp zX{80yOcTZRgXdk==k-(1H;Ab|JbXi$K;uyGY!`&f)JHLM?Eq4jPyxz0BYw`iJL>)x Rsiz;J|BpVvf>fLO{{>rpy~zLo literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/cvttoindex.o b/xie/build/xieperf/cvttoindex.o new file mode 100644 index 0000000000000000000000000000000000000000..a62405e010c58b51125ac77ba05046c89bf4535b GIT binary patch literal 8272 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 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/dither.o b/xie/build/xieperf/dither.o new file mode 100644 index 0000000000000000000000000000000000000000..8b993a5e24a0facb6073bbb5ce8b7e9746d51aba GIT binary patch literal 7592 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 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/encode.o b/xie/build/xieperf/encode.o new file mode 100644 index 0000000000000000000000000000000000000000..d3f73a2d1b09b2d5f251b8b91a1c9245ec735425 GIT binary patch literal 15856 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 DiwV{xrYcI?7)PK*(P>y=c0>v`QUX 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 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/events.o b/xie/build/xieperf/events.o new file mode 100644 index 0000000000000000000000000000000000000000..e1bb144e4a61cf6aa43ce1bf36191db54932050f GIT binary patch literal 17336 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 g)5}ByV8A5rPCkNt{fWU_QoVqQQ!y z$)K-eAXVGCyT7&m*6OdjwpLr~`c+8?pjZVL?26iU@uNzL7U?RD>qqvSd+(V!bD4+Q zcCXI7_x|sH|M%Q;&pr3Pm*K`>xVFIMGN`zW3ytg*p@z}BBzs;hPOFV$jbjX}?_I0e zN*7Hp1JJSq-V)zXYM0sH2_lxg!aLQnKep^PugCXZ*lzZgg`;nT;j$uRe;Brt-pcU6 zxu_PlulH7m2d?)Pji%tTrQAHVA92(#@js3hh3!9C_J8}A`X4KRE8md+(nY>q`y^+J z$4VcMr$OJ4Z#&SQE)pDhJ6$YT>2Kj7od63JE~-@Bd@I0a>Sp-1`nI~lRev!1Z%3xM zZKW@;(!xen=>p%OT-l?6YosG3eZ7+l%+&nx@$tUL)&T?;7sACC?ZIdjkO!@_kbB|` z5O^B9Z4C&sRg>t@GHLrnj7p5BG|z@BE+!@x&(vW!t@eR*5>!`eCc1|P32$V zX_34tFnJx(y_tMPy>mz!(woA!7{(cYikY6xZvIOnxk<{m-8Up1E4>XVPIM=bo(}#q z)HnuHZ{2W)a&W+Y$2Zh6XxRnkqmw6CeM2s*Z*!?-&l|I<#(MTyG8=}XFA1I0P)}1J zUDKPX{5p=57$RsYGiR&|+HiPI{IbL2g;@i`qjKAcVDVwOZU2KRwvRM=&>xr|mOa~> zZ;q_yb0ob|WIQ%CV5&eAi0PnW1R_I>_5P`u`GK=S24VlFV5S_-PpI`nGv2dn8=-VX_v5L+PGUY}T@0wPY}bUGH1zl5pB84X3LiqN=CLNDrlh zp39b5ReO4#M3GSX@-k5Ad4jK$V69pyvERZdH3JL3>=5H}^Mz)hc`9EI7UTXv#-f!P zPnJr@JR`g(-7S_symta$hB-rqY3fkV+^ka1gykc+^r&eB@qIvB$(LJMjgidw14%bw z|G%;I%ev{^TfwfJ@N2-iQd`RO98PT+6saMzzYJp)hRuG;yAJgH_RHDS2su7(+5cnF z)+p)i4cVVrkjG*Ews{lM!1UQr54Hz@s!rO$66oi*a6OA-;!I$=>`A5DJ$4`>_3&OtQ;sxo>FnA_zzG)Bwz|?N7*D$*bLEWvop; zxC!qoOScXNQ{!f;6O6Y~?R2zBJGumeVLNP1ED5kA= zIOfYtj(!E*|{Ig zOJ;vR)P4;2{o4ZGNv@!8J1pTXxP7+N+5O?l_tK1wi&4${DTEg@D0SgmKO@4mtL3`E-0djHZSMz-Zw~ zWh#uytzdmR(g=sIq$AC6n3Rsh;V?NJX@kSj=|}<&?)0GOPtFjI{u+cKEKq4b4M;B@1=GnuPo=&LO9 zUh;UVDdRc$bx}QFk2$1((Xo%ozk<2{r9p8Vz2+0SIfb-?X~V{}p)!*oWc7SQIZ0*o zeo*Ak4=`6}{I6&PeQOwh*Ze+O~^f}W85sTGACW)ipKZJ3xpw8ct=nR@u0V%%#~Kvrk<*r{}Cw#{t* zGW)-WBX4gGrVib3HExMYe6QiIbSmueAuhxA-kfc~@ZMtk6+iyJ$Fff@5Sw~?ML`MF zEC8cc6if}Jmv|OieIt`ZqXFrM2DJ-V7OZ;v#s_eCVFv+?1nh&B{U_KKP)5!qzn-&m zZs2MK-Ns!xJdA=Da93Uddw@!CJ}_fe2xLL(kYx`m#JqFJN^Ljq94>j* zOs#@3ho#)?zXDEzaI)bnIPnhz$Nd96<9%apbNyuyb(@MH@&fk07PI3}*#2`%!0dQ= zcwbSA*?6eMyym@4C2+gNy!tmKEoRdpdl>KU+%y?y-tgO3A!4Md;Wgpaym*TI&c znb-w&Iv`LIhYY;jF208VOpF_9-GjQX!sj{oY{mz!7Qgu!0&hS=ziu&GM-bQxz$*Ye z3&0*^wwRy2j5mfQs}sPcEiLA2F96}UK!6IZZvqDURDo}8F;_w5&TTE`*syub-1n`j z=X&~w_ZIo9wkA*E`OE(EjLrUAr-%nYxOw9N@J7(y7qCae_S^7ir{+2A4PpGn!jjsR zEVf`D8O$Nze6RPytD(&P@njqcNF0z#FjgRY#4#JlO($(E2W4b9KhH!t7DccksGl^5{pnWf>a%F&vJZPlkb!vw&uvFP6YUA##X#`oBoEE-ZxP z327T&a{7jrUp{&}uGO%A7I{HbNgaY+yYRYLY2ca2Og#_%%jOF+b(^@(~0nf3ps zckcq1gwvP8D`!~S-~q$lEp|EZ?kp#d;Zs~z0y(gLQvUVBeCEnN{# z%dx{}ZuG_Io$w|0Lm_k1TzIys$G7i0;Q3SiNn?fVWCh-yB*qf^T#1*Ek0FuanH$ew znH7zT(G5f11@FM?U}2Sfe!y3Jsa+B=Q?JVBn2bfDRiz=5Ie!^&qVN_yeM9!fNdr4M znRVgW5KI>4*)N7+4o!s@wg;gjVc0j6N++QqyWg;fxtZ2oJPfaf35$kLmFD_IE)T=1 zQaXAP7%TT*@R}2YLN!;4jmZd5frmR)>n?Oc>A)q>Uy5>Dtk`DiO?Z+Sod_+d_4tT+ zTKQ6r+2|{fHU?FYsCd9Agq$q*s2Er!5Iz3KCZdHHf|(E>@E6L6rQpZy%T+^hsB0C< z44jE&5uhSsg9B@d;LU7&bTRawH|c*0lZ5|QVwPk#(87YpDj^=RVG)*U>6Fvsi8$06 zeF`7uB<|bgpd>^DJ-?FtliTRkAeA%MDLK((7a_^_8((~VoA%N8xM4)%oypGjri7=X zGwJDyH8p#pon2kAXtHgM=gKvnXj^NnBRR=18d_uiwzke_Q!*y1w6t~Bbu}g8o|dN8 zwpjBdBiNhh>`K-Met1cJ2A|$Nb9y(p6Fvs^QfOAd}~ zd;WzTJ9C;f>Y>ds)o!C~w{bO!SgdQ;y5n{3#6oxP#qM>kkh`&98E^OS&VXJsd?Kg^ zMI@VmyK(hx#nNl!vbFB`B6q@a_xeG1Ip}_e>w=Hmjl4fA^K_sQ^u^z?;J8`Y-`qDb zB(2|AP``e{hQfkH?)atdgx}p8fQDd{67G1+oe*QySm5W4=Ie|Hv`@yMgK{5!`Q4>` z1qGJ@H+a-?_+E097`tl4nIZztJ?JWkY%I8>ulV8(g$vdfHDfb7tewkooCaNe#p}hu z7u>AyFd>ECak=ku&2`@cpC7~LA#nMitMGQ$B*mP6)S{7XJ9aLm3iAN31LaaMZHux2 z()9CHD8?oovWu8jp=pxmSQ<#3Lg>k9(zseOfYZqH)()R4Q>?=CSs zaO+vc!(?q(Vyyaj+YJD}t2oVatnP7zp`+_36x;*R@&Zmu==<-UpZ9_Vew_!{x*bV( zNdU$K&i}ZhmZojtu`Zlbm(#UThD{d17nCE}DH-{{(d;7QAY|ynOJOE^<=!h4*)A8u zXKEM2OVsU+(09Z=>Y8vIKg26F9RFsBxXh|DuOeld!l&W|6w;Xi=g6mPJ(J#R;u;gc`;zaC$6QL`AG|aPdRRq?A;z}|a1K#R@ z-{gSb;eh`XaEymiw+PEj=H0AtkHW=%1SqdL=!`1TpDdFj~dNQ$tI(d?nw{{ri;hGBk^5NGk{5l7}&NTv^{P|cs zLDwwqX*U+Z6Zb-4hrAy^6PGr%CTlyp8bZO~HPE0@6OTo&LN+{v2YX}Dp6oNY(Xe<; zNAxh6`mWYQTTF;`C!1qkT}I2bU9HKOv2ta1vMGAi%4qzmmH6bI&oB+M&_CdXcB8$s zqcz#twY0UPx${~h(A9Kp_FirW;RS%v9&3-bCp57|7l(`nthoq$*wnGAEoRhq#h_Q& zmj}W*i<3PqEk+C6!cHS4=dFVg>K51V;v&>h(-e&hS|HY)?CM-Ycd#ahU@(mk^x&|@ zWK1NQl5wLu(bd|KY%%I$$y#`?A%?fT3156Tz5zil3{|bafj3+qiv~NQoz1cOP;G4l zTt2rIVx|FmqAKKNFM&GkiLO|8cdU7FtMCu>A|qCJ&a40$k_Bc1APtaXo>z5VBv?1M zsXNxz+94d3sgB0Y$`RxSNX4Anb?5km0kv(Np>`ZI-X4I5`xdONf%i&0WaWTL_vDxs z>}Wn*K#vayAsHRn;l-%ZM^;1{jA2_g(xjgjb+%%cGCdGPan0LCw7IhbUTDRdx(v-Q zys4W7A+MW-vp_csF=uJB^EWcLP+R_h`UQVU>c}Nsautqpwc$o zn#}DyE$6?7bGPYAn6_$AJ7KzDPoPgV;I6LDwn$r(j56?W1aIp`XN4h0*Qh)V+a2*f z4_!ioPM3P+uPfDhqM zYkboAordE(4J_}-L#AD_^Ie6b{;BXG{X-1*F#J=6lbzIV5$waU5Kj7Y6^{C+!H4u0 zGyXJ&H!~cUa^kl#ozodE{z3%TsPAR?acBq>vWIkLX*l_3j)s%{eueA)na^+!v_txf zG#&EKG7TsFJD3h)q;t0e|53*0api&iCl=k$^v+B7&p#?Y%Hio0tPJJn8czNh)^M_a zo5FSf{3pXbpiBLFQ`5nESPp79>Emxru^^B8$E_-o{lxbw91q+-vo${T_X38W33bTM z`Anyb;Xh%xm*Hbf2TdlOV__eNh3q7Mo~+?y|7i+GIX)lHVz>wHk-ksU3Bx@sehnx6 z6-bbSi4^bjC6KseA4+n!}&P= zk?HVpoT=Vx;J8d<`qd1_cZ}3-P~kW(r!#yt!+AWs&U7#yXxu;0a2l77m<}KJqKQx$ z3byNk583lIg;QJ+ewv1pekIf4<9>t2C!OyzKH5(BFEu{tzrgrBPRiB$7qp-Ir%vIz z{g*I4J~L6f4H|z;t;y(tnBZ@!d7q|C+|9_pfgCYL)!#Q957MaMJf`IO)vP@Yzb|Vum9| z_FTbm)F8Y^;TRA2t0cm&XMCJ5q<<^ppU3zwG5manzozMs{+}4XlJP&(_!K`b_!~18 z@*CN648u*hPx_}bd>X@NGyJOzuTnVrf#;JD!_Q{?bqud!xXtv@Z%O!Ixr_1fZy99g z!y2FZHNyB8F#hiuK8N9d&~&KX4>g?hC*U9EpkRN$1s}4Th!tiQ_ zcRJ{7&~UPIJJYFQI{O&T?L4UI(72Qw4V9r_e*^HLaXCrhdcUS=xECu!nZa~|a7{WD z8lUX1({R#>Fr8Yav(kaz%=mSTzgpv$!96TJ8cyrNO&U&iZe;p=em%}`3v{W!!w&cx z49C6_|4j8hn*2<-PvJ$t;2lG@v9a8M~u(c%?C6-wfl1or*&|I>C6Xh^7C^Vzd^OT-vK`w z7Y`^jUUTH7ak_?k6ke|3WY75uM?dg&@IsAG;~Ua&^5;*O&H~V)e*Hq@lbug$IO)8` zbQUt5H#9!^`2)tE$M|1UFYU=cYI|dpDIELD*YTMe-wXG#T%h69ZVl797Q0SMdEiHk zk3OJwAJF)Xs@;-fQdf6^{Mo`Nya6!%C-8!)e^B9ds6Gd>Y?H z4*ZoGpZu_g;a>w=2p>648iw{?%J3ZuC;v1{n(-FnFJ}B{sw2dwd{v=v)aUu?e2wo_ z`gIyk?Ox1uma=xQ*Z8D!ALBPL{sS7H;`WysPC8F89iFeYF#efL|2c+ZexN+|8x5y8 zf0gMkV>)j!+{5sXna(tZPgZ{qM*s8tc8tP{0O$GbbcSPJDIVrB9p0}x#$V3(QO3vq z()x0(h9}`3mRmHuO~S?xG`v~i_iDK6zVTCqW50O5eMI9^p4_D2*k>%yX*k8hPNvWE z*neq!k5Dm;*EO8R_XDOg3%KOxPc%N|lgaqf9}4!X9zMiBPT@4a8sQ$6(;2@4u8DuH z#wS02lkt6w@7MTo6o;~y@wt9X0Kd8424`F=93@o^4gc~Qd~1q#1c z(Qx9wt>M(}K@F$=exl)}N`K;s@`U{FQTVYMPUAR3!zmxmbig+%9LN29_|Q1st??=T z|6Ri=ZhyvfDw)os8lU2SH{;J?{5Lc{jqjf|occ9Eb)5V|`cZ{rzxea)Y6t#}jDH2Q zXM@H^JuDAuIJNsY(^&~T^5-UvPkwt&!%1f+)8YC5RmSIeaxcSq{@<_Rlpo$_`aJ)C z%y190za5i16zo5LzPL%@2L*M;MM>r*vmBsVKLzVd%e1+nB&`2nx)2sO8C&J-h zaEVeT4;lWD;(tTK+Z4Y-!xIXht>O4@$got(Lq37i2YB>EK_O}{NzlZ%q!|8Xg zb8zyrc3)J1L;b*N_@UpQCN)0&&h$qbPQL?vUc>44p6_co{oXT-69o#jTS@^~-o2(h z*>t5*4!^~d$2gsJ#oC(6ld;~UQ7(RpS$<`Aw^82Ji5E!sl~?9o!p|s09ZAXDi*_e{ z=NaYjOF8^Krcn+*wq z#}H9}M$U*;tFsHqAL`npjZg)XcnfR4C{g>sKa91If<*be0tn*V1gTn&#T!}kqZ zyL3Z^GhK?mkE5nuf1RqoF2j^3)IPyzCTij{1}{`U#6dWx`ea8nVEO8ASMB3(uXv$) zbgYM)c#iSM%RW^doGcbyHrEy|B3J+`^o<+07Hs;%>ie!RNx=u zp-^6zSJ`XASHlggPx+I0)vCVg2El@h7s@Q7o1JG!aI!+x=NO(-J;M9o1pB4?uTj<4 z?V|ou{eOlN)YR(_s`?4d;d=e=L*0D-uf&%;P`Ll`PcT%U{GYFFQE{61HX7C6nbF@k q*Yx^$TaSIL*?1Oy8^*sB%Oid3{yPS4W@khI literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/funcode.o b/xie/build/xieperf/funcode.o new file mode 100644 index 0000000000000000000000000000000000000000..9b7cb445c94dfe7c5099e908d293431f10ca048f GIT binary patch literal 14208 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 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/geometry.o b/xie/build/xieperf/geometry.o new file mode 100644 index 0000000000000000000000000000000000000000..7c449ea6a0e972bfbf68e4bd80a49a63bf121660 GIT binary patch literal 16016 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 AHUIzs literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/import.o b/xie/build/xieperf/import.o new file mode 100644 index 0000000000000000000000000000000000000000..78e6d74c49fcd0a90b5c34d86dfae2161b457a69 GIT binary patch literal 20280 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 L+ds)~-T(g!RGiR1 literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/importcl.o b/xie/build/xieperf/importcl.o new file mode 100644 index 0000000000000000000000000000000000000000..c317ab3fc557adb38d15917642ded76d84e91888 GIT binary patch literal 14288 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%0A|XzxtWy?)4hB5VGfm2IGV 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 Xru{I-8WdHr865-4xAZCZYu5i??&XKM literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/mtchhist.o b/xie/build/xieperf/mtchhist.o new file mode 100644 index 0000000000000000000000000000000000000000..f548b932f1888126f0a7fab3078b3f7ddd6fa6ad GIT binary patch literal 10552 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 ZpjGPr!?RSQ@OB?a`|swZ@jrU|{{Z(}vcUiV literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/pasteup.o b/xie/build/xieperf/pasteup.o new file mode 100644 index 0000000000000000000000000000000000000000..0859a3f4e7faf2a0f2cd9765036d1eb69c8f9309 GIT binary patch literal 10632 zcmbVR4R934m7ZCxkPejH#ZfMbql6_{F2W|tF5zq`=;9riL9@W)g0pUS1~k~?3;cja?@IpMnC6@Nl8KL!)?mxA+ENTHJn7#tyD zf$qJYZmF4QE9L8|+3xxJ_3QUuzkctH^exR;=8Jjq`y7g5( zJ8E8wSv4U9uh7}SrDL?O9!XzZvrbuiK;QQM%eaiZ66&V?9o>4wAU_W6fH#dC)XCaV zmqA_+?V+>vp`cETklv(QBTQ5nJTa0KDa7C3Q3ISZAMMfzxEKMKMvZMZkLazdyf4&-80ix~ff+@iI z0UK09rO1Qw`|hoe6mpPJ!%O58QA1TRyS7D#K}F2|_S-;;<8YsDfi-k;oz#bFbaGR_ zbyg>4D5^!S>b7@)oHXo3NBWwZEBW~}`#WH(X2sueEON>q6S`%Ff|`7}*}q}nrhjYB zzXsgH8=^}1E4*-Y?-#4&J;SCtQ}O(tR6{KrrHv&Ui>&(4D&5)=(hXY;bvkCUN-ye} zgF!8l!$(NLsRLa%FfuI1XAO(_>b8R~ z1AM^EXXNMHe}XVg4GK=fT!`*GvYR_8_gf0X6$80-FkI&SutIK-GYWZ213${*G`QN% zUqP>AZp#LEKu{s?>ZCm6-+e$C_}v^WGGvgZP(UF^75QCd;Qcwu$-6pf3l%H!QRUV} z1BPYbG|I_wgKP;^sO0yC-Q`to{n|e#Dhd9hk}E3EjxV##Pe_qd;AGLrP|Wszd!&NO zr`U^1H1d1W>9v!xDxcFcxe}GMe5h34@b_E;0m%)udVkv6b0K}29M{OPk<*S|R(VLb zKpw*aF%1}%8R(h@9Bl>oQ}}?Rzmge~)7P@2TSpvCsZOVejUt~WzocdW z#RvWulpRN7L@vmH0&CFg(Mm;j`P_@Tuq-<$PsdJZ@~-U z2z0wXE0OC!53Kdf{t~j}!|EgH8<{~_z9^ro{wRH>AMfFsbr8evIZyJoZao#yv#0z$ zM}Yz(=0WI{ruh$w%OG6{_`2xoSNcfCXVKdqJ~P1)AMjph7$@)%>xW z)!b2maEY9kgL$XnQ+28XB?5bN3 zZvPVGl-@vTsmi+bDFh-zksKT>3kH|i)M6GZl+$1M(JIrjl@m`EJg1_4ec+QQf_$k_kp@_>fI?4-*#XU?lOy``L!b|(uvf?~ z<F0f}ynwWwf-4>H&ZDH5g85WROdd9KAh|@C=A~DpUqe z@nv9$%|bY#XJBg9%5t4KB9dNGsP8NN=&Vm#D+5pJWPc=Qfc61u*VW(5=8%U9E?(@< zV*CMrpi9|_V9Kw@;_SgvnkD_&J&=<6mv|M zLPq_u!=h@Dze-*%^ah9srWqpbpv zU#K7&c~7@#^g}U=vG6U^t)*eqKqqH(P$`h9k`-GkLb(=1ApwHSC~Q#i#|{mQ72GJminif00f{sev!=fHd z{gNIiMurSbLM(|{-+)qd2(*q_bzoVL&E7OYGukyMl+diMnCRHri6`WI%v#Jm5Y8OS zl1_GiusZ32IjrN~#Gm0E0O*cvEZWiion7tzE1)ao4cR+XrSuoU z8b-bsU3TAW_<;|DD0GqzgDN_(`&R%ZU5FaP{-DJ0Y`6)3R9Le7W{`3xrW#gxi0Uw` zjZaKqLD)hs4fSH~zmzisW2e4|RXh39p6 zuw6x^YJF83b{5oTiXQJRT(^CO?R{*Q$CEsu9oCL&$F$?x33aBgxOP@uZz1dsl$oMB zWEF&^wucEh5 z^@X?3P<&OHqFUdx1wWB}Rf;dH_$q(`D8WKt4&}h%qsNY)SOhFO8Na#MQ~P~m%6@xh zas$@R@@$~v9LUS40oi*C#)*eMY9pbKSQ`R((H`S3s`->Zt{7)mffZw%23! z7Va$Au**|0D1#}CF z|9|Ge-^zoZ%Y%;qj&fdSmz~BV*cbooHl3Ykg8xs4m*>I10yy#yvP47U7Vux3hyKw# z`06}(M;^R858jst{{i4AXV?eAL7R+yoee27p6;w{lv45M+T$H&N@`4Wq|Am6Q=)S# zJ7Y~<66EveFrP~%r1O-tDyA7}Q)*9iK&EeaPO3DPM(}4L{)DAiN2^)K*)45Lq~eor zPzR{-l$lIyrgZ`o0uq~>e80C;NOd+e#`D$}e_U5cDYGe_OiIn0lC36PxU4M^Ywt`X zO>qYRYvYObxS8CHJm6L9a?@yC@y4_nkF~eQn_8iCkyh1h?r4;rZfG@^C6ZtR?FBFx zU7n2JTlXL+>gi~)emxkr@%i%pL_R!d9Lt!+)q<8>esA}L8ttiYpL z*@>)}B)qhm+|r?N7C2f6iwhxzw^M8op$p6m; z`eg$Brv?0J0mr{5asG`0AFN3@j{l>;hWp}KaJ&KmXt*!_BZT8$V>p)+=drC5=F|E5ng~9z0y%*YnUH5$HuboDy)+ zZWmpAIRC3IoZqV(0-wJSg9@$6S2)zJ;t{=l10MXEGf5 zi}s)GqVHk%cCHKG!tjU-9|wNeo)P$q@v6f`&*gbhpcn7gHWxkr&gpgG+@3!X_+U)t zc6h}_&*lG_3-4xn4GMf76!@HX(Q`hR1bR{5-@52|9K0jYFA(_8VD%wCFJ5CBE}YxB z&V}>5_KXWJXL>cbaGuv%TzCzmPq=WN*IsbpYZ?7ZE}ZAJ9WI=ob(0iQ46KXCJ5`T8}1 z{wo6gpo^a0yVEWlme5v&e<*;4@`(BUeui_s`29+_aITjn@DcOx-@52IpVwS?4V6NY z{+<0ng73@meix4NVmso($C!OiG92l?1P{0K85ceB!1fvX&#b9)`W#)<4JQf zti;{oE$f?;4efDerT>2ygr#T-R!&Vain7te{KJR62U*WMtd-FRq8woTSr(w9?7pKL z;XW*FP5!+RYX`(xnF=GPZF23)advF{RayWeiDS(9V(Vw?c|PNF{GIpfU;@{NIRWdBu=PA1 z@M*p;@0($Qk2wwYzhUb|499NT7XZW3kzE@kq3sG=@0N?(kJIgh0rGUOFT)@NE$EtX zuO~n=o&S}E=yK_-(@E%m=!$$jbI)n_#wAs=@mG?@kU2C|2W{?NkL7{e_W+W@_z?{4 YpI!31?T6b;xBfble-Gs{_2XXue-4_AdjJ3c literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/point.o b/xie/build/xieperf/point.o new file mode 100644 index 0000000000000000000000000000000000000000..57a185efef3d6c0dbfe88ea5ff5dd222d699ed26 GIT binary patch literal 14344 zcmbtaeRNyJl^@woVuGuuq#+nc8-*3E1HrWdr3s|PFP6wN2ylrL!V*Y?Ek!z!C1cBw z&}?E>QpiIwcv+UsAA1fy3oV>&PucB(mLxRDaY$-D^2vq|w;U7Lf*{?H-PVKz@ZLK! zR~}FNSkCU8^E_{U^P4+&?%bJsC3#aYbX}Rt#i+R0kJwm?P{yn)$KLDtYdtfVo8=Ct z7n#kWmSf8-`-`RiAuInkEPoyntjvJR%6}hUKjdxb@sIG=#)ZG{I(qvZ=E{NI0b_PO zi$-gW*;yp9rIvlh%KwlL$c-AgN8wFvzslQOs+Aita-VB$1C*Du^8Sl?o8+ZustWC! zgwtSAM@$_*!XuO)>ZUdHc@de;L%=Km~Ma~j-dTAZ#9=U+9T#N zvzdE1!F;fVLLF`4xBY)k688z={kY@ z44<`)_QO&Z-v``)eaPgRiZSMqVM`p(e8>m$oTX?2#)#v0R@arFhMD=oWn>>0Z)HZ- z0xQwsvG@58o4Xc(0Q0w~B^LnDj&f*N`vN`>)a?0#@P{wu#Teq^Kw9Pez;FXvc7@Ld z?ZBATLWz8Z57iCYr>t_Zw>`~1&n}$AviC_2?|_}QJs;C!pvf|xx+^8F=$!& z8@*P3nFsrW{z0&6z&i>083k$JuC3C zH19C)G*=BojoAU|2cW(fZy!XjJ2DKrjV7!VYNLIQ9JBjNjsiXCf7UiQ8*)8H_CD~r zVi~B*<&swm2{1bo{$0F?Gr$2ptBe}=3>lC1gByeY{w+|lgXxV?<3z!j#*At89(cU) z)WK5^PZK<=;c1T=rv{8^-Q6$(s$Nm`iRxcPRS*^W2vCMa^$Aqt{JwNL(D#eyfM$4t z;;`QAppgwjjqZ{g+&I|tD70#^wuQ`^}xWqW)q<)JTp*jnsM2V$q@JqUaVz`Fqa4uD}~MvX7uz>a>w zN&y&tDQXP80)+nn0t|>B2W*eT!AaJ@;M86)dA~8u{KQ)LSy#6ISj9qc0VDeizrede zd1jxSduU6Q$I9$>Vc(_`#Ydp?E3ca3wlkxn;_`|Dw|EmY<)wnR6nY&Us^ZT+A3FwK z=s4>b6wh!54|Bnuu5#|a{D6e)lQ*s%iRII9xr!SJ&p#e~xJs%)77MvPZOrVAakeGy z>tN5aisJbo5-)wOiZ~#a@nVz5f}`QZx9Rv+gKsn7PyI}6)}d&x1$X&^39iLuV_HgO z@UFuP*8DAA%c>4^rO}ON^{f**?m(uw16}ZWye7Bf#rPundhsu(M@M&I_t?D-r&PJi zU*|@a$pODbNP!8a_8%@?w_j)SbuhXAaPcIZBQC60$;bSKVtfRG62+JQQ@$5k_}#w)dT6P!{;!kE?HWH~f?Q7Sb*|8r`+7OtS`5)+`D$srk^3?9kh+vL zN$r&|0t?Ch0GRUrpD4eo=G|G)9oKty{&lI^fB*4qK!aSXLgrclU(8>~Y+6wcnJGA# zWhZ>=AUDr!YKF+&h6tu-kdn3AM?&_KzHS)aX#d&jkNFR=rz<+?;0;0KiWyaiquSua8j}+9_uhmwjP$AA+ zZm8?Fko`yHB<8_bRvzpa$_smi@?!OH-&wGx7({Ggej|4TOck&T*8O{MUk3QFkKZVr zpZtx@CXZzSxM^mA#?|JLV*%I=Ph-nzp8jx4$y^a&2-T1ifEj>p*?UW2`w^HY2x-kj zCSF24i^27{^)ja*)_oIhmVkW_qTHtttp8-$CqwqLzAd0o|A!UkE*J{IY4r$3wxg!q zZ|srV}x)`kIi695Qr@wea|qN9j+gMyU;5ToM|#Ju?LfdIiV{vKcu z|2X~{#5)-L`Cg25p@oB8Tl$A9LV2;|z`}#+^XdNTshYB-YO<9nxXgvSH=V?c-vdF+ zJ{0N+`I=;wA@&}3!-HE>#kXYqeLMu0CGLp_G7XRL78wJ{@0H8@mp~S~BR3ahswvo7 z*h1PMGjj&c=}&M|GiM;fKFm)nKbvr^+xyI27&Xin@G|7mAP#KDXo6S17eL44Is{3z z2c9ZeSB+SbPzsh%C1b0XpU#l$1KBUKWpHyymILsqBfkMWQsnBAF;Uh`x1fDOx%h-V zq;*XDO@1;gJX&L?N^BUNu3{fVUAiaj&vwj##c}=M=u}xsE-hW3YlNFp#l?<0vBhSP z1;Old*b2(a(OPFGBrcvkz(pm~2XqEZ6)HrQ0B@7=Z2@AHm_AI!W<914aIFS>*4Yk_ zdjMu4cP#cnDF2FBpFT?F6T9O-EG;cASrJi0gvSNI4XmaYV>yMnou?=Ku$wQShZK+V z#g9)SCJ|{5pWp$5#}bMev-t*bNbjojT8PIv`&b647XZ#*6I-g0we=TuxV zmKE`cnMkBs!s$p;ER{}06R9N~;r5s}8jdF-ttDPVsw>f&{BGL2CX)7sy`AZBvNhb% z>TO9SQXOsKb|Nkt>JQ&#rRQ{9!pbD@cS33#x)J_Y_Pc6%N!TkNiWs66QQ_Eao(*KD0+ zy6ZMi4!9R&rUcx*uJWbjQ{4*yGu<_d-Cp3r7?^Ph%EOTH0z6ny9F}?T;Pr*&>*`E~ zK|hu{Zv>r9oFfa57jY<$<5x3F+J_r0k2mCPy{O1lheq%b( zy7oBWuQ=duJK#kJ90S%w^WqoQ6XCNR@b5X`*E--$fTKSQ%K%5Q;WmkXB5{*@3u9{} zUN7S_p{I8>uT=4p$?Z0iIDtT1(msEyPSE zP;hTa#m8w5`7cUoNF~9>iKaw28DXndK}OrMc2!Gk?JCTCSuoiumJmoacf{KhVl(-+ zDs8d3XnX}k;gkk9$n=;++ado=N8u;hL|11_TZJ4q``VP-cqbg4YqxpD72Oqv0!M`#ZA6h<-ji@S%+tzk*jQ_^lEr`Tr!_YczbTY-1e8 zLi|TXlRY47!n3mdj~c!~wx81QR@wfQhKoFevEN7>*L5L0v@ZN66AR6|nztAmlr`aG zpSLs|^B*kliHc`J7r{Hp|48B_$CB+c3V)Wu{|3YpEW{^!PM0|9|1Ee({skJJ?CjO> zZ738>1JUb}7GI!%6?2Xn42eZ`N?q|6z%vzs-S%?EILLv~oI z;iP|yhG*rx^i4YHNp{<)@tY+-BXQJI%}XED_^T!VA2giS`%?`MN&Yj6d^IoqwZ^w3 ze?Z~S0*vf`NaK@zjw*aLKm3EnC%e6`;gtWB%kLS`4(hzqB~JDvITtE?b>2A|pZ29j z!?(!w1{67JK6!)2@0R>lg|Fs;Yc)RQQLkz^+4BuW&eb5B@OKpcJO%%gg5!NSL+bNq z1xJkJOsNtCvK!hJ%XAI*37CCL;>f!O9+Klz`12HeuEJlW;MXX8)RX32qTw{}%^FVY zTCU-%K^B&ThLitfG@SPLXBtj<^0OM=&80K8Tf=D|4`?`@-(iX4Iv2o0c3aB-MNzE( zVg>J%IPFVF&fBBmS4#YVf~)cRk8VN0d4C8G&3i)PB%jWy+Yo%hY2NcBj&d$hC^b6&r=#s^0zB;YLs;q9Qbc3{J9E$ z#DRZC;a{roCwasI$DRuTbRwNRhum z;h(4A_bdF%6?}`rpQqqG3SYeke&fLZor0@*;A@H;b>5knWJ5vwsQK8pBu;ita~Axp zs_^j)k=<_4_**6aRt+aVyi>zzzaol!)jtys{7wz0c^`0)^Q^`veRgU%>9gBG&Y%PT zpoWv(jwy1~eDYkpbfBR9)qJc@!Rw)q?CgbiEVwWDP-&7cgj2g+!)Z`K!|C^o*EO7e z&!|wohrv1M_Y9wg)9)F-&~W-)fz@`dZ%c>of;!zH>KMIsL=xfJbYxwc)wYJyVOD!r zXD6%eNMQr%{@MklW=m(f{4_@KO|hvzgL#+HOa2p_KsA0q$9l^ zMxyvgY*n-)+!m3`{C`(okbp~-ANxx3>gAgy_mMih^df7_8FBCHWt*xkm@GkQpCRfh zsBoT2(PY)K##n$j<^pQjqRmTva$Bg$|EB?EI*tEDi78&ZTH6n8lsR9+Y5tuWPWqD` z_0W&+y1Eu#UQpzvSeAl^a0Gk4j zdKQtlPL9|0qV*#O%O-eGrat~@IliDxsE@x7#!lovr{sndpdSnR4}LVD@#H@f&5isR y1}!Mn(y=j3!rwad@%V94_Z@&(H##mZjAOAmR*7ddk literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/purgecolst.o b/xie/build/xieperf/purgecolst.o new file mode 100644 index 0000000000000000000000000000000000000000..8b65c52aad8a23c801797d0d026ccd0df84a2189 GIT binary patch literal 2272 zcmb_d-D?v;5T8q`O~0;Dd?;4vfg%d^$VDuER839NCQzl=7Fw$4HMz9GBp2_lv{g_c zRtQnZqX^=we}fNFi1_4#C__d=by>?YT3^5($a%>3pzv%8ty&C~egxKEOR ziv-u8>2Va`{-LHFam@(G&04|B8)Ynz|6sXN*ji_bljuAC;rZt(h9VMe@b4I!wU?Lj5tely+ zHG5XkM%1vXDdA9fBy>>=0d(NR3J%&DGQbDYCSm+Hk_7)4#z>?`w?SG9N`t+ffhv+u zAVz~EN}n+~Sn|zx%YpHpML7V&2#pesqS0qu4!-ooitOI_-qk+W~*~TE+d1-RzJ0-QDlUWOOAD&SxBSX`VyE(iGH3J@wta zBX%A~5Qiw^2(-d)w!vo*r}|T@ko()AZM5O9GJciu-QN!FavMGrSF9x?W#(*0O~G6; z-Z(#?PDVqJEM%Q2qBQY?M-6NzZCDm$R;{dKK+HUtAt3QWT0pRB%&;BHTyM^VYwl$G zpfgGK?p|G}Pb5AZejFS>NgxX0)H{xk5QsuJb&=y&2t=X!T{t+tL?DV-->kzfzXxs3 zf5UK*|IWjwmxA*Z51(?lM3_Ms4c_;nfb;%>YOm)VeG#=|)%7yBEF-6@j;S-?l;fp y{ckllrF>=c^L6whMrTyar7hC`12D5I6`Tqdz_!e{k literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/query.o b/xie/build/xieperf/query.o new file mode 100644 index 0000000000000000000000000000000000000000..c7208ddf753c6717cbfb77cb00677efce95e6281 GIT binary patch literal 10976 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 B;i~`u literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/xieperf b/xie/build/xieperf/xieperf new file mode 100755 index 0000000000000000000000000000000000000000..1b2a2622cf4cd569b6dadd0de66b687ca327e973 GIT binary patch literal 506896 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

xJ$->s!H#7RASU7^EGt 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

!If^;2Feu9Y22u^9~>M90mD@ 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 HGZ*<^7QYMe literal 0 HcmV?d00001 diff --git a/xie/build/xieperf/xieperf.o b/xie/build/xieperf/xieperf.o new file mode 100644 index 0000000000000000000000000000000000000000..01fb2638b4b7f93707d5f7195c351a842edcd081 GIT binary patch literal 103096 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 XieCreatePhoto -> XiePutTile -> XieExport + * + * Usage: decclient + */ +#include +#include +#include +#include + +#include +#include +#include + +/* the client never calls the DDX dispatch table; satisfy the linker */ +unsigned long (*xieDdxProc[1])() = { 0 }; + + +/* Read a drawable back from the SERVER (not from the framebuffer) and report + * how many pixels are set. This is server-side truth: if the tile is there, + * the server drew it and the remaining problem is only the framebuffer mapping; + * if it is zero, the export produced nothing at all. */ +static void readback(Display *dpy, Drawable d, int w, int h, const char *label) +{ + XImage *im; + int x, y, ones = 0, total = 0; + im = XGetImage(dpy, d, 0, 0, w, h, AllPlanes, ZPixmap); + if (!im) { printf(" %s: XGetImage FAILED\n", label); fflush(stdout); return; } + for (y = 0; y < h; y++) + for (x = 0; x < w; x++) { + total++; + if (XGetPixel(im, x, y) != 0) ones++; + } + printf(" %s: %d/%d pixels set (first row bits: ", label, ones, total); + for (x = 0; x < 8 && x < w; x++) printf("%ld", XGetPixel(im, x, 0) ? 1L : 0L); + printf(")\n"); fflush(stdout); + XDestroyImage(im); +} + +int main(int argc, char **argv) +{ + Display *dpy; + Window win; + GC gc; + XSetWindowAttributes swa; + XieImage img; + XiePhotomap pm; + unsigned long lvl[3]; + unsigned int fill; + int w = 64, h = 64, nbytes, org; + + if (argc < 3) { + fprintf(stderr, "usage: %s \n", argv[0]); + return 2; + } + fill = (unsigned int) strtoul(argv[2], NULL, 16); + org = argc > 3 ? atoi(argv[3]) : XieK_BandByPlane; + + dpy = XOpenDisplay(argv[1]); + if (!dpy) { fprintf(stderr, "cannot open %s\n", argv[1]); return 1; } + printf("display %s opened (root depth %d)\n", argv[1], + DefaultDepth(dpy, DefaultScreen(dpy))); + + lvl[0] = lvl[1] = lvl[2] = 2; + + img = XieCreateImage((unsigned long) w, (unsigned long) h, + XieK_PCM, (unsigned char) org, XieK_Bitonal, 1, lvl, + XieK_PP0, XieK_LP270); + if (!img) { fprintf(stderr, "XieCreateImage failed\n"); return 1; } + printf("image: org=%d w=%lu h=%lu levels=%lu,%lu,%lu arSize=%d\n", org, + Width_(img), Height_(img), CmpLvl_(img,0), CmpLvl_(img,1), + CmpLvl_(img,2), (int) uArSize_(img, 0)); + + if (!uBase_(img, 0)) { + nbytes = (int) uArSize_(img, 0); + if (nbytes <= 0) nbytes = (w + 7) / 8 * h; + uBase_(img, 0) = (unsigned char *) calloc(1, nbytes); + uArSize_(img, 0) = nbytes; + OwnData_(img) = 1; + } + nbytes = (int) uArSize_(img, 0); + printf("filling %d bytes with %02X\n", nbytes, fill); + memset(uBase_(img, 0), fill, nbytes); + + pm = XieCreatePhoto(dpy, XieK_Photomap, (unsigned long) w, (unsigned long) h, + XieK_Bitonal, 1, lvl, XieK_ZeroDark, 1.0, + XieK_BandByPlane, XieK_BandByPlane); + if (!pm) { fprintf(stderr, "XieCreatePhoto failed\n"); return 1; } + printf("photomap created\n"); + XSync(dpy, False); + + XiePutTile(pm, img, XieK_AllPlanes, 0, 0, 0, 0, + (unsigned long) w, (unsigned long) h); + XSync(dpy, False); + printf("put tile sent\n"); + fflush(stdout); + + swa.background_pixel = 0; + swa.event_mask = ExposureMask; + win = XCreateWindow(dpy, DefaultRootWindow(dpy), 150, 200, w, h, 0, + CopyFromParent, InputOutput, CopyFromParent, + CWBackPixel | CWEventMask, &swa); + XMapWindow(dpy, win); + XSync(dpy, False); + gc = XCreateGC(dpy, win, 0, NULL); + XSync(dpy, False); + + if (argc > 4 && atoi(argv[4]) == 9) { + /* control run: window mapped, NO export at all */ + printf("NO EXPORT (baseline)\n"); fflush(stdout); + readback(dpy, win, w, h, "window (no export)"); + } else if (argc > 4 && atoi(argv[4]) == 2) { + /* DEC's IDS pattern: crop element on the photomap, tap it, export the tap + * into a pixmap (ids_build_xie_pipe.c: XieTapFlo(XieCrop(Photo_,0),True)) */ + /* The photoflo must exist and the photomap be bound to it before the + * element chain can be built (crash without it: XieTapFlo derefs a + * flo link that XieCrop never set). */ + XiePhoto flo = XieCreatePhoto(dpy, XieK_Photoflo, (unsigned long) w, + (unsigned long) h, XieK_Bitonal, 1, lvl, + XieK_ZeroDark, 1.0, + XieK_BandByPlane, XieK_BandByPlane); + printf("photoflo=%lx\n", (unsigned long) flo); fflush(stdout); + XieBindMapToFlo(flo, pm); + XSync(dpy, False); + printf("bound map to flo\n"); fflush(stdout); + XiePhoto crop = XieCrop(flo, 0); + printf("crop=%lx\n", (unsigned long) crop); fflush(stdout); + XiePhoto tap = XieTapFlo(crop, 1); + printf("tap=%lx\n", (unsigned long) tap); fflush(stdout); + Pixmap px = XCreatePixmap(dpy, win, w, h, 1); + GC pgc = XCreateGC(dpy, px, 0, NULL); + XSync(dpy, False); + printf("crop=%lx tap=%lx\n", (unsigned long) crop, (unsigned long) tap); fflush(stdout); + XieExport(tap, px, pgc, 0, 0, 0, 0, w, h, 0, 0, 0.0, 0.0); + XSync(dpy, False); + printf("export sent (tap->pixmap)\n"); fflush(stdout); + XCopyArea(dpy, px, win, gc, 0, 0, w, h, 0, 0); + XSync(dpy, False); + printf("copyarea sent\n"); fflush(stdout); + } else if (argc > 4 && atoi(argv[4]) == 1) { + Pixmap pmap = XCreatePixmap(dpy, win, w, h, 1); + XSync(dpy, False); + printf("exporting to PIXMAP depth 1\n"); fflush(stdout); + /* Clear the pixmap to a known value so the readback is unambiguous. */ + XSetForeground(dpy, gc, 0L); + XFillRectangle(dpy, pmap, gc, 0, 0, w, h); + XSync(dpy, False); + readback(dpy, pmap, w, h, "pixmap after clear(=0)"); + XieExport(pm, pmap, gc, 0, 0, 0, 0, w, h, 0, + DefaultColormap(dpy, DefaultScreen(dpy)), 0.0, 0.0); + XSync(dpy, False); + printf("export sent (pixmap)\n"); fflush(stdout); + readback(dpy, pmap, w, h, "pixmap after export"); + readback(dpy, win, w, h, "window before copy"); + XCopyArea(dpy, pmap, win, gc, 0, 0, w, h, 0, 0); + XSync(dpy, False); + printf("copyarea sent\n"); fflush(stdout); + readback(dpy, win, w, h, "window after copy"); + } else { + XieExport(pm, win, gc, 0, 0, 0, 0, w, h, 0, + DefaultColormap(dpy, DefaultScreen(dpy)), 0.0, 0.0); + XSync(dpy, False); + printf("export sent (with colormap)\n"); + readback(dpy, win, w, h, "window after direct export"); + } + fflush(stdout); + + sleep(6); + XCloseDisplay(dpy); + return 0; +} diff --git a/xie/docs/dec/DECimage-1200-install-use-EK-V120I-IN-001.pdf b/xie/docs/dec/DECimage-1200-install-use-EK-V120I-IN-001.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b112564f2537aa557be9c499bd10c0070d9100c GIT binary patch literal 790999 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 z zpRB_NlAF<&8ytQ&!od;_I-WVC>Wi9R6p_NgjqWeuTz0YO=l6-nBzg!)x^Nhe2YE4C zWqo*A@R}PENQvQa z(ZrjV`JE`(sNf+p7zihpRJ+RGOihW((sWb=9mrIIDq^6ou;mDfbTx63z5!(DNy8b2ODlY9q-xj|6?VXf& zS*;F~@-rJoMNe~e&`@3?Q$Q(`WDaD!y&r%%43Ru?lO&IL3W zdwk8UnOk_zF#?G_=x-v|wZ&mwRL;GWjn+6(NUY2%@MP9tg!$@ZQs#p)D1AjgJ23Nb zY)X_lI>wb*p4@(3!;C3Z-1RTSNAsi&@}E_BIN;Z!QQofkW$BXVrHXJVv8YXQm>sF` zC_snY8SPT$%;T-$ZgIrX&`zdf4G#S8`&s8s^}b?W3CG1nX;0g_S}07X*^nTZg5@6(^L;o4qbpqrB-bjVWJ*!*lR1N-Ro3m#1eR;=Z%2K(B@RO@wh-tlzJl?-D9gE+Dyn}l{NTkj{ALCMBk;W z?_~n1&L8xqYld-t=kVpIAPF2_Y4i}X%w1b*bebRBcXzpA+e>N-YNp*CCp)^*E2X#N)VEp5odDe=TEmLPgV^APZw$blxHC} zi%YIa_O>Xl5`=l+GzQ;ob+ohLQiyGpDra*3MR9JS9*7DWlnWa2A}@E!`DMgKy$twTU#nGMfu4{PC_#i+`pR)NBsX4m0g=N?S+R-;3!X+&Z%dwRyyrS-7DR!+ z^G2}U+Aoi#2_6C;3+u-b$s++4%@o%gE?ae}gYlBBN9#NsUkjbu_y1?koQ<4?j{D@$ zM&==xvvQf=_(l^0h;kJ$aF15PvXh5Bn%G+Q;{ zta%s%MMGAHz(M01_Sh6@yV2umC}rWOZtDW|pS`VF7uI6Ku96n!ty!Ile`wFBwbWtS z!;$d67@0!P0n$va@HZEeTwx!@9coQ-z{tfSKaUGft3|~B0gga%zebKup6zShhnAb1 zZLj;u_1W_H4a&V9<9bJ`4YY`}c?QT%_e4@U9D6zI{D*ROZdejknfp!@>fV2O?b0ZE z=lL^Q;XEsE>>b}y?Uxw1W5Yc0Q(wcsT{~XRbQ!!pwR)Gw^z&@Flhd7#$#}EoK4rk& zx+r9Lo}C#Yf_8ea7gypwch6t$`jNA@+Sjt#a2p^^avVItFDhztFv}sojSI1yyx*>! zFR~W5(^t1wOI{CoeyinAIa&9U>$BzY8qjn%kgYu(nGbrWJqY-6(DLq0 z*e|(rbP`GNuyW7ZXF!y?edh~09gETCflPjp9{LDz{s3U>mP)HIf%|s=9LZ zDOYc&zAUG`@tX7O$622Js9iHd1oMU5xCovQzn!apaZaNfq7r+Odr)dw-@x-c2t-dnZ7$ zYK^2^ajMSL2+`?}#q+sOw7w2|%G+DM>uK6K7Sg=cEI9Fhzr${xdpkY%UUbIK_JtSX zYuzxvmpf&vjaSs!GL^IOc3>M-ddd~cNfm=p?bybvZM(;disvG&oQ*e+oi)a%Tq!Gl zsh<16>se#98pW%hR4G5@O8Jy4g-tHrssvMUtsfWFboz4K4_?n2qt!@Wtteiu;yxa{o;9|u9~0)}LDkAru2xRD z+<9L{AsMGb_)U~Z*`uYwn^QVHGwd#vVvxyi?Dkz0?;REM)(>o>sumrJ7d>!MRlUu0 zVjGpb5#wd?sHogmYKNUQ7OPRbbUK4n{yfNzZM^1FUwjqEl~Zo*4LfVJ)9S{nom6(? z>%=x*W0Py0Kq{^u7ZSF9beN|aZR^KHHJx1K-X6S)>&Jz}tse(G>~>JitslQtW8L&M za9S#Os_pEe$J#*^PJJ;~!bUZ=e*9LA7I_-4zDsZU8@@iUjh8f08Bg6&NmE}6k@bwE zTv}4iLfn}wWhqWPoj949s9XHJV;fa*C*;VBJ7l2B%J2O3fo;6TQ?3|xD$AJi^?_|v z$;PaBRh=lbTpa!6^`XZ8L9VH2dU);!uV;<^3?q1@@}Qa@4UPG64u&g(;s!)yB>5osLQMisVxym|4BZbvn?estJIRkwb; zvD6Mt%#^o&OonZ|+?V8pbE8?`)K$*DM|rFtRPJl3crj`bRZd$!eyhe|HIi3}Csl4w zxpF(@vKuLtUlG@rJnq*RqICpcpOD`#@x%f$kh1TV|DUFI5r?Swh1O2ekrz)HSUH_C zKe3HU_RM%?onazXwv!YGw((L7;dqU+#_UflZrDZ@tw!=H>8vqNi}oCLQnjaCrJr(@ z@|3HTQ?3#=xz?A+diGFD&wgy_q^fi4$92{_?sFF(g0b>gCi#kI#N&4B>bU zr!RYHtscDGsXT`ra@i}ej+f4clFFZm+p&#Tw;J=%XvDeOhoVWOW<%#RhX8O|DQRXwqd%5L5nuX@U5tLlcG(vMAF5ql(C58b}{(T~JD zRp?tkE?#4=@s0%YgI9e}#iv{;?fSBOXLtupr5c_|(-#GUI`9&Q`= zP2Agq*R#gz`Vra9vhVE(?p`j3d8(xGwZ4inYxLlGe?t_fMtlWIFUPB$a<%;I z$M%rEg{>cNUVKN}QH`x1t6?vX*!{%84BDOd|3%d;3ia4Hc)7C`(2yan?(fgbS|C32(O^)8NWMUtuO)K*`&8;RVs9XXPW zYTzAoPc>JDUPpzD%AV@JVURpki8w#ysSuPm2?6ou#cPeVosHo+Q3ccZ|&|@1Fde%{) z_l-&jT632ZCi_h!R@?a|7UY=-iFyfAV%|@ZI12{xAP}6}VEu#Rlw`f4=zq{=%=sex0;GU&xhbu+9PK_0#K@UvCcA zM{pAU-(Uawx9^u6Zza52^A_ZH@olu<3-g!XUDr&?P4^FfyofHfpy0p$@-MeEfs*|C zho64^=?@onJ;N||0dIM(K>i`j1rq(^FTdWk+zXeg`4z1$1=!zy`t|kaH_!iYmw$Wf z89)5fFL&{KXA-0fNmnMBh5Y9~{r;cd3{Z8UBJ=ks+5!BJTT|c9I47ai;@{=#_+)-7 z=dFx(|M1s8{qiqAucp5{hb;e$UcBIRkwTWmfpiPe7V-^chvUf*Pp(7kKAhs{gSWGiu&Oqx__+inC`cJ zy*lSxjQ`vF-~R`gxa^5#Ze(+Ga%Ev{3T19&Z(?c+H!~nGAa7!73NbM@G&nH|Wo~3| zVrmLEHXtw{Z(?c+JUlNbY*fNFGg%(bY(&{qfMee=Ny{wW{Wq43QxQslxbBv6PIsf?~JjRD$|LO1B+lzmG5g*>aXdyh7hc-ue z91k&thxu6N9QEPzyBFWQ=&PWIXuo;6)xmGIxA;9j_W0FS|M?+eEdJ;1?cuLqzxd0) zkMUtXy#D3|hZrAXj*opjw2~h4!|U6NpN&6z{f{qVew?kW3a@|l;%9&R@w+c?K74rp z@z?fK9*-mXPyg3S>SG*f4i$a+?Ps*m9&@QG`v+DVCC#a#_rH4g$x2gr%voixt)M*C zI73p=yU(}xAK!eiAO7<1=bEOC{bda0aZUB%UHy}$YN@#DLnAeWu03un*H=jOy`1CvNKv@g!!(PMr4JMP? zndD0FnUH{f_s!=go&3|g-@p5nP$iG+&ZNf_ zpAIkX?fTbW|CSA|K7#Km2KV#V4}Z7L?yuK|<+VBwWv-RX4>yC?${O4r)58aY$NEQ^ zsjS}tuM@f8waSffT02)};jasS3|fb$0A5pDP=D-%7LizRi)uSmLe-!!=b}KX_HekN zc1`SQ!PZalUl;n@II6eBaim2b2oJ#PlxQRs^H@WO9BINl7b0;UY2x<<+f2Us^B0Q_ zKKyPi(*IolUn~3Yix+A1wOJ1}^hGz;Vx=+cAA&zDcrJ`Fn4K=Tt4GD^pW}e*L$$H1y=nceRdl#mdq!*{;9(VOED@7luq|+nl}ozDI|y^pUa_QliOrx| z`#tR6Ys2qrMv=c4LTs-zwAV8heZh&f1IMrNg>E}(U(b&9Sa-|h{1VrrI^3`xGjl$+ z`ZgczrC{qXbd7FN$7~x=hM~Uou+CIkRl*wgqC5)@k3n11>w+ULhSfzhBJg${g|((7 z*`kKWG#^s8HM2>sFRg{XCNm6PWFuyLVbkj@37Iu))<&umLF>Zc5!VN=UPPPr?`(8= zZTuSUx(_(oV)F@$^b$Xk?S4%_xioSBHngbK%*2+SwEC$Ndy49(WD{fESh#Xcm=L&+ zQ7hf2p=33z?|>KP*qGOO#rGXswqTfGn!oD_V4lgo2LOrH9p*bJhd!-8{eBi8C<%qT}+yMh^k)?x)JW>jBkWj|nwfg8Mt3=Fj2Ay1EBn;+w7L^5E%3Sf0#-omi zb~D)Qvi3S+?_&;{U5KPw+Uq_uW|u2>uYtzpwAZ!`?tZ~Yn$rNa-V*zsTFc6{%E4#a z*!$F4=FYWiK5}cVI7MBj-iSeU3Kp^M18rd}8SBuxDE?Y9Tc`5GfGpj(q^=-gNU%fD@`nwl-tPM6UPU_nQ*&;iK? zl-%yxLyZoms`T1%ppGw+&*OV$nvZ$ZyO~zbt6gjK%3iF^`DCW6hSBnL=_MUA;mkFP zW9It36F#jJf8S%M;Fx>&QF@KOcdS;TJ@#rC7o}*poIUvb&*P|}9)$1h zOp%0*>Y-!xdb^*;2;R#+b^S>VuEm_3Y1=f%Yee>9XB{)WZz1`w-Ouga??(^Q&+WBF z7XHrZr}p}L@i`v4VitC|V0nQ%47mv@%G~29T|^>8ySpgC&l0qo~bIZ>*%T2HO~H zvlh)Hn4V-b>|&ddV;yy}r%HW^dob|>-;zZ=;OgI^zAaDQ zZM8A4J?VDZBN=S%n?FAW+jLO8O6Qfgo9I%Ou!G*O-S=@G91i{&PW~-xw>=qatF>!S zt@^JVNn>jmEHux>h*aYG2ktSO$EX%u)IhIbhg;L^AyJ+>?2)zW35xzL>sIM}yscWU zeO2kUI1(vO&O;qima&2^g#G#GJ~TEzrVowX?~TOZ#vTlya-Eir^loeKk@^zZ(nvbn zvY}>hw`G=26v!Y}Wme&99^gi1Mdyo=wKK3FZgK{RMeXTuB3uYl`vxgkFm!eK3YT=i z7!4IwXb)OLO)o<&Rpt`fx{t?x&*OmY``ql|VWh@6!qFHw!v)Yw<&l1?Fw7Rb#e7F3D} zEgdxsu2ItKAcHfp7zypDX}k- zT~3ma1(oVozzMdxAz^$~r_kY^{Zgr&7k<*EVly)Goq2hlXW0CUOc8@?hZgLMD*Ae9 zkzX9Wa>r(KHUz6wcpZU5prALY zw)o6X%;sK+I-LzTwK09S*Up##WL?<~3P@4IXifbI8ku)9ZzgdCoqLcJH@LIFJ; zdtkd6)8n4CjUwneI?Zv5bGwavRx~8)V>c5XljC|1poqpg7T@R2efASa6VZS*;zqb! zm}n#JMn$2Eyb-pU&gQFSSBKTe)9Eh1*jH6yAJH|->#Ac(6~5-qFAhaQ?rd{vu6YQK zezkXAPxY7y&e&+f$0<1Zg|yIi{c{~Y>W*FYK$4dWZuc-Xn&{$$Ct&JC^x8y;Lh zsXuqg;$p0GvrUu*o1)x0FWFS9fCu{CnoUy`)RbkstOe%NR9$kcX$#_Bv( zvz^(R=CXlejvUsVgSF!~?2Eyv3bwJV{hCF3_u^}XuFh-npG8BRjQ_5scJ1SnIsBnI z{sR7r!@x`nnB27WK|r=9bY+c-mS)|@ufSMmE807&tfOfN-J>J$M5ET%39RO@A$<0d z-c+M;6vXefh*hIXXN10P<#`~dp><+-Dn7Q@g!5CU3-b#wRv&P-IrwQ)N$;#txgfDV z+@I&Woy=wxG$#bDZnG0$n`@YbwMbnH$tYHW1DnnFqD6zN`3z)Sm-qr!{I@Uiq)SL$6JOF9Koi{TO!dkS+M>j( zcUuW;iy1<#leW%yVz;L4HeO_{(^}AM4i+hrBP;#kexPi{S}tn2QIRmMy;YK}7WG;- zcnmR*wfL*?HMDh?*-*0CC5@3>hvG4yMlu2bxJJTga1A2}r$#g;bB#ndqru%^3EjNR zN|V)kU8ISeuXs(fof_wuhSVjQin4q?zPXzb+B!1DG^W?d0Yb!FD+|z9x;@~7g4qK} z*Yvuf=lWt@i$;;M-PLQ;iqYJ;)~A~qE*T8Ow*@gt+DZ(QZ1*Txn|!j?1s@E9*I@fV z7e=ma`sQD>R?xakHtMx<>m1zAf-7jM9ov@0>WAi7ml9jawhuFNAIwL@u+TK7){1H4 zIZ%@xjnQ00&88+LXETQ@+xY_BMKj$3mSVu+0tF-T_Yw)WN!SKpaBY_(LVHs)M>J|a z#~~=>QK%wJuExuS!=QQz?ive{ctxplb>f;bGL$VO-}*tZ&TckoVxd#1iS-AMnjk1q zQJ1Q(X@tJiOlw-66w#{dK_-2>YK;y@{N9r00yn8rCBkRAA+0rcW!ezp6RqJSg}F$z zHVAKp#DH9(5}fe}<(nKFPKXZSwpQ6huov2zvr5FIdPDEx!bvZjpM2BcU}P}H*Be;I zTBzj)+=#imHfTX3R6$7aZ|Gt`MA*`3JXB&7AzD_~T6J7;>-XfpH|$Z|_A8V7?Sv$^ zX+jTRyQnYV{^BC5;)5 zFZ!iMo~j`${GIS@ZA7X@p<>o3`)O3t_KwE)sey) zD9C8ltg=|y@iV(w&fES7L++uVY}^?$@@@NHaiwcHtC*kxQ+`_L}|O%lk!^X z(m<7~XjdIFpy-}@hxu@xvrg8^M2d$Ppdxes}$1Xd6rNGL{|ksc?7FV-zrL-AlG| zVJjQHs(wi9^WqIu!A9V$Qke{Q&@$X0Ra0b7be&r;)_(xM1Sg)v=Jf$fWp8!c^tu@* zsQEpLGnJ^sq0(5sG+K#V>8ml^l4tP18C7rai!4KmYkUv&m2M(x3W{;n@#s-K?D@uH zjIUT?ww$2*p-OpmP!cfTomHw@nP3M8jzKmKs1(wg#iSap8*gXEzaf^hn#l}bBol$q z4|Fd0$OM~erX7$$I|B=>k6cZ3%0?oLP{Zw(6_&0AZ<102iMuOh`{$^ysz%L#b_7k?nw2V5Omc^uy|tU_~*On(Z^3V9cWLVPe82yR9K|n_+am zaUCWPIk#P~Gm>7v@pydu6SQGQx8pTM@FdG=+_^V8@ zNp1p(5jW<+jhiXKWx0$ZF+HVlQQoJ>*4sArt{M*8Xky_(l65;pem`UyNrATZAXzU# zKrs8Y`it2kfYcwxGyT}61i8Vi@4NqIdJPnj7fb~d-7MQ>66?%OWZLC!Sa{yJix8Uz z2D4V5+sR8MS52jn)hg0h2u+5(xmUN7OC`Z^ohD}o^*hh%;T~os(@U&JF?)mT+kzu) zD?a%gY^kdLjfG1RDXcCgxvjp74`9%e*i#$@t1&enUhq>w&VtXOSg90uQ{cvkkj#DE zC-`Gv^n>k-Jr)|`!ZO5Q>s|D+YxM@N=<0|y$UMm1ASbcTHL5+bwg&g3f1w(WAMRsZ ziP1-#IATB84Pp_GGLANOc#czz3u*Yu(T}q*EC>W5PR2JV`eDI|u$YxN8ST)dV2F&P z3eAJT1{BT~t-|24k?E-~t6enn0ppq&_SWI^pZ(W_ua7zWhaTP9_66qa6!={ zP3+V!ct@UKY+1y@Vs8i~LWsr4A$VjCMwTX-YQ$QZZh2OR17YtC7+BNc0%)Vn94&O< zd#qYlF{O-pIj^(6j=ZZq9!+sC#jSLSDwAqak1#cyMsQ|-6P*GV6H6ySME=>x1Bo^w z?`)=#w>}~Tt)18vh0<-oYDykq1jFfqJ^ratx9>4aWG@!%aVi#vmqc+->1-}REKg z9gDG%*9anbU=_%!PYjI1X9K4fh>WZcrnAQGu~Z1h>r)Xoqq6m|@mI5ffQ;CuiM5uR z39zk4Y7P(XMbzqLnh9e)>f36>;H#&#Qv3~FN`VWEP=X&iR!`%#@y)5#hpMI;s@CJz zG5ps?bC}0z-Onxus+ne$PtFMz)wgiT04^^`M6iI$UgfX1?pwf({&kD>;un?CvJKjB zi-ydFK5ThOCKk-q;Uky9=2>_azF4AbfgT&dXVzB}l(rP4n z7PigV+9EVYL4%)X)Z@C~x^HgacFRp=tq3l|pLqTaSFA;>+x!!P#vf~L>*%drS?Gz_ z@yzmOJgeoW$Sp3O*nTPeWvoN7dRgSWPHSuZQtcND)6Z?m2QSTTycl8p)K1Hs(#-Yn;>| z2FB8wof6jkW{QpkIm*_-xckZ&Zy1ej2<*~AfhVUH5d}U>SX=O53$`|6uMIn06A6PM zuQT}$g~A}-h#kuODndBKogW#;8XIStA31bLvl`as6^L^GaZ>~U8QOw{it`?~qv2qWHt6)CN#>sb9JO}weAdrPHWm2m)k07BUn z*{-`TGcp-Y|F;*H0jdRZh#`0J5@3NCqJQC_)~;f`Y5cu$G~F0iJBYS?b}lEwtg#s8 zTRNE@K+9(i&e)M=w-O`05$Zkc%%t9!pTKmBKnyDY?_#MpIxC=o1&2a7bO!&=cy_(G z`^6T=OgA`=!%Vx$ykL7{6!b#21w+q)!~#;hVZiacIDz5B*;y$N8~je@AZmr$X?r3w zB22n}d7yT~@iP!)z;wRR29ZEBOql42OOSBPLx$!D9B#83yr;p@S8QPAJ-td`5l2b0 zKGyoT$Wa%3p?%44SbFPNu*<4Ab$D@Ef&g1CEX5>Qz&IwSW@1X^W|8j;OwhoA8@&os z>z&M%0a56w;{&t5DlQ$nYd*JwaA*(L)vG79Lh2BSru@WuSMYw37{g-_wpe10XcR)` z1rFEx-G!u%Lqjuw5)yQ#7uaG_Va^IAGzgEL!@`9wz{7>E`glrDu$J3rF-e=(Kwxc3 z2qDYNz>$!u!r`Xm7W!fxvB5Q@7uza{N{0atl+_uWmMGFC8ZWxOXy%E4FYK5CX2y-; zA4nXX+ShEZ85oo~5AH7IFn2c%-DZ%(f&#nJfG%ZAZi&7pSTc|DXSRte-Qt$r2%}5q zyWzxg%GZ#XIVB!>07wa)vW9}YGfAfD&`lmW4j2b_WM-jh8-%I3l#;QD)g{@&+%dJg zMCW%VWvW0Fn#cE@Bc}cxu&u~+T2HC($diyc!YJ8$B+k5@=v%n4Nr5==?uL4TGt8;6vC4Tn=6?wa|D;3*HbOHya!BCX zXu3uGR}zmBecqRh63=QiXliTY&=(cz@u<<6+n7a|=HYGZiVT4qo5LM4juE00#&EZZ z*sB{t1#cb7JgpXVdxa|8;krJFgRTZXN~GJP_A^L3lfbqpMbm9-b7wdd+2<1Ie`&{> z+ZR3+DXXa+EL4Thtv@=IP~+OTc5~<4*rRggeWS7Fh)=qdU=+noq0&Jn6UxSrIo@^F zhtt8OBHI23-9xf#qMWj)* zUSyYys6E&xhKx)m!#7wsY^$;*;X?1wbT1H+M-l%9CMqIktyB*W=HY{z9Oq+5Z+crS zBBE1ZD4=2l(WKfz-om9NnXoTkobWM1w`Wl}s1+GKl(u#9Qi2ghdOL1higLa4VB*;6 z1a~-Im}VAnwJxVRyxrg;owZu=`AqCeYkMCrC8rv7JBTD&XPZZpZFt9m#lhH>Cbh_h z+jVsV$7h*NB9#ZHwcNTRI90;Qn4Qh35&gs-3F@qO^P$FS*HwD(u61upd8gUAP zlCe}c{(!kC%u#kb*SX9K0UxW}lva??3(|6xxG4)t5=-dG&(Rrob2jg<9uQa@rgC2u zI;VvxO?e?EhM_EK1q!cXoQSWWxsy~+7J{s-20LfK8PqOc1?aXA)j?ery|fkCm;-~b z<+N+8C_K_5A@jzT9VZ7U7z)B!2!o0jC2Gh4UY4a~IRk~dMp=Rk(4oKuDQjJGptD+b z{v}YGm$S_2!ECPUgyG+2>Q3$f5&|8mI(2txQeB)1_`XTAdrHdHHHkY$mdG6nxG4DxcWbP?)zXCgT4MK1r0^~&QE|p;l5a`U{H^^!{p4|~AvUgmIxq+OqZ5qU zi{23HFq52Nd_n;PkX&~`V{8S|K1|14a|$YERAWhxETLW-C5+Hm*#8(*f+)FSA#F(| z-NGUkX@a&1CnTXx4Tzx;okNMmyU^kuGGjfmC4?rWtgKUpdN)zNz=J!eWlJ%LI&Emo zxSb{mY?@a-_j(WC-P20N%k&OWX@Mf$dM7E}+FBaywnao14oY#EhNnu|aQ%rmyl^R2SIU!C;BBW7_BN|O!E&-lI zg-L1vXG)maDGQw6hq5r52VLmO>gJ3=Wrxz68kvLu{P5v$Lh)QAi2=2}%Wt1{;L_z? z2EoA+5)@uet2-q82|RyCm#v&TRAh3k?u!G@9UA68(9bS0#nX0@vNiA&K(GRt>u&N+ zfda;A+B~y|NYkaUyYois@CRlHHt?i$u}`^>k?T>*o++kMVQet6gCNlVJkLZ*aCDi{ zxkDOYZQM#=LT7Zpe+o=+%I2U>hsXM>Q{*!kmw8rro|aPNDAc$|#V_*4J*rY(AqJ*w z<^ypeg$KUFJilmyoR%70tcrvNpJfFipE_hhnxn(g*nx+x&^NUP1*%wNS@A%cf;A~_ z18h*8teY@+mtyB462g?y<)t2({iV1oLts{}B2_~Q$P}~&H3(4@Q@l}cL?H79A=4WRkR%4N_3Xp)5ZN(bd%{s<>FQGOPbkh? zJV=nnFAsVtX8IH+J0p!ArG<^!p-##boGXqvCG;h}f^Kvr_e$AQRm#+mxDlSsX3d$u zSNYPUBqAWso;a~0(t1aF0Cpu&Pj-J*o@V||`JzYN3U*5%4~Mv(FqNpR3h4%e3PnAV z-QftjVC_a(wJNK!*n(E1^9_Z8c=DfIFz$usI{Ba|(pe4|p_bBc2NH4yWC3Pap+Za& z9qtfrR{h8{2E6h61~wu3*l{3=uRLAQ*5Ms$-NHOe6aN`Ng%`ZTSr*kv#+H`}CCu7) zW+kg3>p-_eow#&EiwCW;5CBrjtYGScg=Ha-Rsx3VnvV z^W6%WVYK82%IcFDM_3;Mk6ps5uSf|b_(~aE1zf#RJ2OykIA5Mk!!-&$JwXXhn*HR# zWNvuO)EoOF1*jV5WFF`Yjxj>X+yv&AXv=9H zdYzd-niddgCNdIKfDH@EW`I{bpyW0O3uB7l1l{0*ku0-ItTdh^IB^uZ0S>Kd9=@egDK|6&j+t>UA`jl+r7sS82_TKPKQB^U=BG~>pgreMG<>eDDtH_0P*UPN}Y&I{U8B0Y?F9tO~j z(al%8ik_B(Dj*ofF^WRlPy$s@2ANN%(*}I+l;M#fmp*#JeQK3E@^tQJBMKR5Dnvy6 z5Kig%q?oVKowfzG@8`cNv{7t)VNUfUwlsM<$m&K1DzAs!Ru?=TPf>;oo@b|lB`4@! zlKY6_(0%>jIZfi1~_v{C?TCno$)(h`+l)@~>AiC}j8_qV5sneGS&-N5nWTehU5NL6@5JRJL zxRJA{-r|qs)*MHaXmKjLfw;E0vynf==mTrYvDeMl@OE19d|jh}72s&eXYb7G&&-GS zZM!?!cU0_5Q@=vRd2d#ygW>~@JC6aJr+f3BQ#f-j&vTMzzV(csSAJMoJYx7>F73=a zp4%!)swjhQWB+c-Ip3+z+-;R%r?c-=$ybV4X{MW%H)E&jz4%)qi>pyqXnxJ;VrzeT z|Dub>&FZ-PikwGx&f^dIee+DaMsjXWJZ3rbnCJOEKfb&11B>RC56`#d^Yg!3A4R|% zrnLL@b$IiqRX2y6p^{Pu%>BB@nREOK4|^K-HrU0>Eq@u=^@c2WBW;g6+hjW59p{l{ zr>fwt;POdF32F%x0WW@vhl4Xx2qLaP@OvUN}C6sTbad`}`J_v|h7$MRTI`L^kmG>g))QHwFQd$K<4 z=RCgobA-x1D$^aqLG|QB^zc#!i`D6mY%)KBS@7NQ8Fm)ADkeTpf>ew|yKoaA1lhc`=4g)1h8tRQ}+O}5O)cnEs13p`@eCats zWdoFLYLJhvJ3Kiv^OJN73q^FvBgF^P^>w*oGjjAe3*?K?fGQJf@MUR z)U&m?^Vgz83&13?_JBm_EU}cYmi?v57uI4x>{*W_AITceaWj)H-A!q)-KDA}N#V04 zKfH3=p~n1>a)aVpJB7(U(-r)7H> zY-<^r4=pf|SUWzWHk2Vo*126nBH9+40%!C=*doj<#1!c^2_q_#ekr?#qG!#-oo%@G zKm)#LjHlAgFn7_75B(x*tlgRx`o;{FNWwoD+&M_)!YMM7lSH!M8$(RZ+pi7mYZ_BY z@fj|Kgi(2nQTHweoAvvp=s3aMO??T&{A55wrx%~o`UC@N&{cE11K)hMpR=y zz+ico2GOBeyCd>?vYfJZ2WMQu*=EmKSy|m>2y$m4Vl%TQTRn?ZP0Z$pJsGrm^o5(< z*M@c`6tNA6d_7g?7K(d$h&!M%|M2zXV{KCC<-n+jUft)CVp-ozID9_ApJaRul(k+DIc-Nl*6CK(+}yQEL>@mU@VVYnSVT zK2`PuNk18uCKsgz%hTSyKIstC>fG1IQ9?qBh=Cqh8^XN5nT2spQq1W)BGNwma%$&Q zmA^=o32heoIz{;pOlBSE`>JJZL60uX`Klk~jTbfrw78>vK!-(!Ig7n65*#n2=D9YW z;&18Bh+Iq`CWVwqez;7w)k&=ryk&U;uE>14M63ad*1k zEow3XGm*0W#<)RTk~Sh^;p`5vfoI$|%ygshkGezjQ6Vzuzc6)5W9CM{GjrWr_7MHX z+uVd*24_~fp|%isH&?itBC^2@*~ay?P9dZqOnWfn0@Bx;q1wcztaSF^JuMnA@(aJ8 z7$JxvrUvK?xjD3nlOAV$DCfp7Q>}(`mvmHaNk?*YIoY_D!-FGrn2H{+9uy~yJbF?g z1}ii@w3W4Xa}=i;dCI8>oXVit^%$@^yHYOtNKr)_}&ooOJ<$TNskz<@4x)9m5Vxw9$~C^Zh; zPYRngoE?010F5SbXF0La&SVmcOo0O`h?|Gp3o2?%O=sc_Bzm{2t~p;xQP(W@B+WtD z;WM&9g7FMhw-}h!Xn)b@sO**;yit$7vygxUBYDR}<_vlIvD27I{uw5C^chTa z)Kog+@J&?@f@9h+rZzE?&LF`c6J5as*=x5!<2D@--YeEAgThg*Ch}tzcBT6w+C{Vk z;Sh;prUx?S9+E>Xdbh;L&IA&gu!yNt1n?oLC3$;@9`V%YP@nB9eX7Hv4l6tCyT7FV zqB^YVP%DMs7fOdaQYJajQ@N1j_*puMu9P~f!sdRc6CNio4=_kOH+Y2|A^wUeDGtKnfD{Rz#yZhHWMPAO{-KqqZXt#7)yF22VhE{m}ch1WZT;?)l?3}ZIH^9LG1BJPz1CY+yc z&P$Yu&5J9N


|kd?!5{>%&Q{su7ha)l9Mm?_DYOO#Ah{DM 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�DwR8iTIg~^*5-Au7kRfZT6(uZ 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
)59fo?Y(|Q) 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±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